Servlet简介

发布时间:2020-09-01   修改时间:2024-05-23   阅读次数:4489

1、Servlet简介

Servlet是用Java语言编写的服务器端程序,是由服务器端调用和执行的、按照Servlet自身规范编写的Java类。Servlet可以处理客户端传来的HTTP请求,并返回一个响应。

2、Servlet API

编程接口大部分与Jsp内部对象对应,常用方法不再给出,可参考jsp内部对象一节。

功能

类和接口

Servlet实现

javax.servlet.Servletjavax.servlet.SingleThreadModel  

javax.servlet.GenericServletjavax.servlet.http.HttpServlet

Servlet配置

javax.servlet.ServletConfig

Servlet异常

javax.servlet.ServletExceptionjavax.servlet.UnavailableException

请求和响应

javax.servlet.ServletRequestjavax.servlet.ServletResponse

javax.servlet.ServletInputStreamjavax.servlet.ServletOutputStream

javax.servlet.http.HttpServletRequestjavax.servlet.http.HttpServletResponse

会话跟踪

javax.servlet.http.HttpSessionjavax.servlet.http.HttpSessionBindingListener

javax.servlet.http.HttpSessionBindingEvent

Servlet上下文

javax.servlet.ServletContext

Servlet协作

javax.servlet.RequestDispatcher

其他

javax.servlet.http.Cookiejavax.servlet.http.HttpUtils

3、Servlet代码结构及配置


说明:

(1)Servlet类需要继承类HttpServlet 。

(2)Servlet的父类HttpServlet中包含了几个重要方法,常根据需要重写它们:

init():初始化方法,Servlet对象创建后,接着执行该方法。

doGet():当请求的类型是“get”时,调用该方法。

doPost():当请求的类型是“post”时,调用该方法。

service():Servlet处理请求时自动执行service()方法,该方法根据请求的类型(get或post),调用doGet()或doPost()方法,因此,在建立Servlet时,一般只需要重写doGet()和doPost()方法。

destroy():Servlet对象注销时自动执行。

(3)Servlet编写好后,需要进行配置才能起作用,配置方法有xml(在web.xml中配置)和注解两种(新版本的Servlet和IDE主要使用后者),配置项有多个,其中访问地址(URL Mappings)是必不可少的。

(4)Eclipse下Servlet的建立。

  •  在Java EE开发视图下,右击工程src—New—Servlet,确定Servlet包名和类名。

  •    接下来的对话框中设置Servlet访问地址(URL Mappings),例如设置为Servlet1(注意起始的/一定不能去掉)。


  • 最后确定后,会看到Servlet代码框架已经生成,类前添加了设置Servlet访问地址的注解。

@WebServlet("/Servlet1")

     则该servlet访问地址为:http://localhost:8080/web目录/Servlet1


4、Servlet、JavaBean、Jsp的关系

(1)Jsp是页面,Servlet和Javabean是类,Jsp在执行时会先翻译成Servlet;

(2)JavaBean供JSP或Servlet调用,不能独立运行。

(3)从功能上说,Servlet和Jsp是等价的,都可以用来执行代码处理客户端的请求,事实上Servlet出现早于Jsp,Servlet在输出页面内容时非常繁琐(用一系列的out.write()语句),为了克服这个缺点诞生了Jsp技术,但Servlet并没有因此退出历史舞台,Servlet侧重于代码设计,Jsp侧重于界面设计,两者各有所长,在一些开发模式中,如MVC模式(后面章节详细介绍),就充分利用两者的特点,让它们在开发中担任不同的角色。


5、Servlet和Jsp的等价性

(1)访问方法

jsp:http://localhost:8080/服务目录/*.jsp

servlet:需要先设置servlet的访问地址(<url-pattern>)

(2)内部对象

jsp:out,request,response,session,application等内部对象可以直接使用。

servlet:

request、response作为方法参数可直接使用。

out: PrintWriter out=response.getWriter();

session:HttpSession session=request.getSession();

application:ServletContext application= this.getServletContext();

(3)内容类型及编码

Jsp:<%@ page contentType="text/html;charset=utf-8" %>

Servlet:response.setContentType("text/html;charset=utf-8");

(4)导入包

Jsp:<%@ page import=“java.sql.*,java.net.*” %>

Servlet:import语句;

(5)转发

Jsp:<jsp:forward  page=“文件的名字” />

Servlet:request.getRequestDispatcher(“”).forward(request,response)

(6)包含

Jsp:<jsp:include  page=“文件的名字” />

Servlet:request.getRequestDispatcher(“”).include(request,response)

(7)页面或servlet关联的几种方式:

链接、表单提交、重定向、转发、包含。

地址关联时,建议地址以/开始,不同情况下/含义不同:

链接,表单提交、重定向时,/表示http://localhost:8080,因此/后要加上web目录,更好的写法是${pageContext.request.contextPath}。

转发、包含以及servlet映射地址中/表示http://localhost:8080/web目录,/后就不用加web目录了。

6、Jsp+Servlet实现两数求和。

思路和以前jsp练习中“计算两个数的和”类似,只有一点不同:将处理环节换成Servlet。输入和输出仍是借助于Jsp。

(1)输入页面

<%@ page pageEncoding="UTF-8" %>
<html>
<body>
<form method="post" action="add">
输入第一个整数:<input type="text" name="n1"><br>
输入第二个整数:<input type="text" name="n2"><br>
<input type="submit" value="求和"/>
</form>
</body>
</html>

其中action的值为Servlet的访问地址。

(2)Servlet(只保留关键代码)

package servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/add")
public class AddServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
   //。。。
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		int n1=Integer.parseInt(request.getParameter("n1"));
		int n2=Integer.parseInt(request.getParameter("n2"));
		String result=n1+"+"+n2+"="+(n1+n2);
		request.setAttribute("msg",result);
		request.getRequestDispatcher("/output.jsp").forward(request,response);
		
	}

}

(3)输出页面

<%@ page pageEncoding="UTF-8" %>
<html>
<body>
${msg}
</body>
</html>


隐藏菜单
Servlet简介
© 2024-2026 BigData1234.cn — All Rights Reserved. 鲁ICP备19007983号-1 您是第220687位访问者, 在线人数:27    教学周:11   切换背景