Servlet与HttpServlet详解
一、Servlet概述
Servlet(Server Applet)是Java Servlet API中定义的一个接口,用于扩展Web服务器的功能。Servlet是一个运行在Web服务器或应用服务器上的Java程序,它可以动态地生成Web页面或其他类型的响应。
二、HttpServlet类
HttpServlet类是Java Servlet API中的一个核心类,它继承自GenericServlet类,实现了Servlet接口,并为HTTP协议提供了特定的实现。HttpServlet类的主要职责是处理HTTP请求和构建HTTP响应。
HttpServlet的主要方法
service(ServletRequest req, ServletResponse res)
这是Servlet接口中的核心方法,所有来自客户端的请求首先都会调用此方法。HttpServlet为这个方法提供了默认实现,它会根据请求的类型(GET、POST等)调用对应的doXXX方法。
doGet(HttpServletRequest request, HttpServletResponse response)
用于处理HTTP GET请求。
doPost(HttpServletRequest request, HttpServletResponse response)
用于处理HTTP POST请求。
doPut, doDelete, doOptions, doHead, doTrace 等
这些方法用于处理其他类型的HTTP请求,但在常见的Web应用中很少直接使用。
init(ServletConfig config)
Servlet的初始化方法,当Servlet实例被加载到内存并准备使用时,容器会调用此方法。
destroy()
Servlet的销毁方法,当Servlet实例不再需要并被容器卸载时,容器会调用此方法。
HttpServlet处理流程
部署Servlet
开发者编写Servlet类,继承自HttpServlet并覆盖相应的方法。
在Web应用的web.xml文件中配置Servlet的映射路径和初始化参数等信息。
将Web应用打包成WAR文件并部署到Servlet容器中(如Tomcat)。
客户端请求
客户端(如Web浏览器)发送HTTP请求到Servlet容器。
请求中包含URL、HTTP方法(GET、POST等)、请求头、请求体等信息。
容器调度
Servlet容器接收到请求后,解析URL路径,找到与之匹配的Servlet实例。
如果Servlet实例不存在,容器会创建一个。
调用service方法
Servlet容器调用Servlet实例的service方法,并传入HttpServletRequest和HttpServletResponse对象。
HttpServletRequest对象包含了请求的所有信息,如参数、头信息等。
HttpServletResponse对象用于构建并发送HTTP响应。
处理请求
根据请求的类型(如GET、POST),service方法会调用相应的doXXX方法。
开发者在doXXX方法中实现业务逻辑,如访问数据库、处理数据等。
构建响应
开发者使用HttpServletResponse对象设置响应的状态码、响应头、响应体等。
可以向响应体写入HTML、JSON、XML等格式的数据。
发送响应
Servlet容器将HttpServletResponse对象封装成HTTP响应,并通过网络发送给客户端。
客户端接收到响应后,会显示在Web浏览器上或进行其他处理。
Servlet生命周期结束
当Servlet实例不再需要时(如Web应用被卸载),容器会调用destroy方法,允许开发者进行资源清理工作。
在Servlet API中,service 方法是Servlet容器(如Tomcat)用来调用特定HTTP方法处理程序的入口点。当客户端发送一个HTTP请求到Servlet容器时,容器会解析请求,确定它是哪种类型的HTTP方法(如GET、POST、PUT、DELETE等),然后调用相应的doXXX方法。