1 概述
Servlet是Java Web应用的最核心组件,Servlet运行在Servlet容器(比如tomcat)中,能够为用户的请求提供各式各样的服务:
-
动态生成Html文档
-
把请求转发给同一个Web应用中的其他Sevlet组件,或者是jsp组件
-
把请求转发给其他Web应用中的Servlet组件
-
读取客户端的Cookie,以及向客户端写入Cookie
-
访问其他服务器资源,(比如数据库)
servlet之所以能完成如此众多的功能,主要依赖于几个常用的武器:
- 请求对象(ServletRequest和HttpServletRequest):servlet可以从该对象获取客户端的请求信息
- 响应对象(ServletResponse和HttpServletResponse):Servlet通过该对象来生成响应结果
- 配置对象:当容器初始化一个Servlet对象时,会向Servlet提供一个ServletConfig对象,Servlet通过该对象来获取初始化参数信息以及ServletContext对象。
- 上下文对象(ServletContext):通过该对象来访问容器为当前Web应用提供各种资源
2 Servlet核心接口
javax.servlet.Servlet接口是Servlet Api的核心,所有的Servlet类都必须实现这个接口。这个接口提供了5个方法,其中有三个方法是容器自动调用的:
-
init(ServletConfig config):该方法负责初始化Servlet对象。容器在创建好了Servlet对象之后,就会立马调用该方法
-
service(ServletRequest req, ServletResponse resp):该方法负责响应客户端的请求,为客户提供响应服务。容器接收到客户端要求访问特定Servlet对象的请求时,就会调用对应的Servlet的service方法
-
destory():负责释放Servlet对象占用的资源。当Servlet对象结束生命周期的时候,容器会自动调用
-
Servlet接口还定义了两个返回Servlet相关信息的方法,Java Web应用中我们自己可以调用这两个方法:
-
getServletConfig():返回一个ServletConfig对象,该对象中包含了Servlet的初始化参数信息
-
getServletInfo():返回一个字符串,该字符包含了Servlet的创建者,版本和版权信息。
3 GenericServlet抽象类
GenericServlet抽象类为Servlet接口提供了通用的实现。我们之前用的LoginServlet就是继承GenericServlet来实现的。
但是在以后做项目的话就不会用到这个类了,一般就是用的是HttpServlet这个类在里面
4 HttpServlet抽象类
HttpServlet抽象类是GenericServlet的子类。HttpServlet类为Servlet接口提供了和Http协议相关的通用实现。我们以后编写的给予Http协议的Java程序,我们自定义的Servlet类一般都是扩展HttpServlet抽象类。
HttpServlet重写了GenericServlet的service方法,它在service方法中首先获取客户端提交上来的Http Method,如果是GET请求调用doGet方法,如果是POST请求doPost方法,以此类推。
HttpServlet对应的serivce方法的具体实现:
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getMethod();
long lastModified;
if (method.equals("GET")) {
lastModified = this.getLastModified(req);
if (lastModified == -1L) {
this.doGet(req