【JavaWeb】之Servlet
一、Servlet简介
1.1 什么是Servlet(server applet): 是一种独立于平台和协议的服务器端Java应用程序,通过Servlet可以生成动态web页面。还可以在服务器端对客户端的请求进行处理,控制程序的执行。
作用:交互式的浏览和更新数据,并生成动态的页面内容展示。
Servlet处理web请求过程:
- 服务器接受从客户端发送的请求
- 服务器将请求信息发送至Servlet
- Servlet经处理后,生成响应的内容
- 服务器将响应的内容返回客户端
jsp和Servlet关系:Jsp被web容器解析时,最终会编译成一个Servlet类
1.2 Servlet API
名称 | 说明 | 包名 |
Servlet接口 | Java Servlet的基础接口,定义类Servlet必须实现的方法 | javax.srevlet |
GenericServlet类 | 继承自Servlet接口,属于通用的、不依赖于协议的Servlet | javax.srevlet |
HttpServlet类 | 继承自GenericServlet类,是在其基础上拓展了HTTP协议的Servlet | javax.srevlet.http |
HttpServletRequest接口 | 继承自ServletRequest接口,用于获取请求数据的读取 | javax.srevlet.http |
HttpServletResponse接口 | 继承自ServletResponse接口,用于返回响应数据 | javax.srevlet.http |
1.3 Servlet生命周期
Servlet生命周期:Servlet从创建到销毁的过程。
Servlet容器:用来装载Servlet对象的一种容器,是负责管理Servlet的一类组件。
包括一下几个环节:
1.加载和实例化。
Servlet容器负责加载和实例化Servlet,当客户端发送一个请求时,容器查找是否存在对应的Servlet实例,没有则创建一个,有则取出该实例来响应请求
2.初始化。
容器完成Servlet实例化后,容器将调用Servlet的init()方法进行初始化,初始化的目的是让Servlet对象在处理客户端请求前完成一些初始化工作,如设置数据库连接参数、建立JDBC连接,或者建立对其他资源的引用。init()方法在java.servlet.Servlet接口中定义。(对于每一个Servlet实例,init()方法只被调用一次)
3.提供服务,请求处理。
Servlet被初始化后,就处于能响应请求的就绪状态。当Servlet容器接收到客户端请求时,调用Servlet的service()方法处理客户端请求。Servlet实例通过ServletRequest对象获得客户端的请求。通过ServletResponse对象的方法设置响应信息。
4.销毁。
容器判断一个Servlet是否应当被释放时(容器关闭或需要回收资源),容器就会调用Servlet的destroy()方法。destroy()方法知名哪些资源可以被系统回收,而不是由destroy()方法直接进行回收。
二、Servlet应用
2.1 创建Servlet三种方式
- 实现Servlet接口
- 继承GenericServlet类
- 继承HttpServlet类
package myproject; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet extends HttpServlet{ protected void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{ System.out.println("调用doGet方法"); } protected void doPost(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{ System.out.println("调用doPost方法"); } public void destroy(){ System.out.println("Servlet 被销毁"); } public void init(ServletConfig config)throws ServletException{ System.out.println("Servlet 初始化"); String initParam = config.getInitParameter("charSetConfig"); System.out.println(initParam); } }
2.2 Servlet的部署与运行
部署Servlet需要配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>myproject</display-name> <servlet> <servlet-name>myServlet</servlet-name> <servlet-class>myproject.MyServlet</servlet-class> <init-param> <param-name>charSetContent</param-name> <param-value>utf-8</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
web.xml常用的<url-pattern>设置有3中形式
- <url-pattern>/xxx</url-pattern>。精确匹配,例如:<url-pattern>/helloserlvet</url-pattern>
- <url-pattern>/xxx/*</url-pattern>。匹配路径,如果没有精确匹配,对/xxx/路径的说有请求将由该Servlet处理,例如:<url-pattern> /helloservlet/*</url-pattern>
- <url-pattern>*.do</url-pattern>。如果没哦有精确匹配和路径匹配,则对所有的.do扩展名的请求将由该Servlet处理
运行:浏览器输入http://localhost:8080/myproject/test
控制台: