1. 概述
Servlet是Java提供的一门动态web资源开发技术。
Servlet 是JavaEE 规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet。
2. 快速入门
1.创建web项目,导入Servlet依赖坐标。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
2.创建:定义一个类,实现Servlet接口,重写接口中的所有方法,并在service方法中输入一句话。
3.配置:在类上使用@WebServlet注解,配置该Servlet的访问路径。
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {
public void init(ServletConfig servletConfig) throws ServletException {
}
public ServletConfig getServletConfig() {
return null;
}
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello servlet");
}
public String getServletInfo() {
return null;
}
public void destroy() {
}
}
4.访问:启动Tomcat,浏览器输入URL访问该Servlet。
3. Servlet执行流程
Servlet对象由web服务器创建,Servlet方法由web服务器调用。
4. Servlet生命周期
对象的生命周期是指一个对象从被创建到被销毁的整个过程。
Servlet运行在Servlet(web服务器)中,其生命周期由容器来管理,分为4个阶段。
阶段 | 发生时刻 | 完成功能 | 备注 |
加载和实例化 | 默认情况下,当Servlet第一次被访问时 | 容器创建Servlet对象 | @WebServlet(urlPattern="/demo",loadOnStartup=1) loadOnStartup的值决定了容器创建Servlet对象的时刻。
|
初始化 | 在Servlet实例化之后 | 容器将调用Servlet对象的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作 | init()方法只调用一次 |
请求处理 | 每次请求Servlet时 | Servlet容器都会调用Servlet对象的service()方法对请求进行处理 | |
服务终止 | 当需要释放内存或者容器关闭时 | 容器就会调用Servlet对象的destroy()方法完成资源的释放 | destroy()方法只调用一次 |
Servlet其他方法介绍
上面表格涉及到init()方法、service()方法、destroy()方法。此外Servlet对象还存在两个不常用的方法:
获取ServletConfig对象
ServletConfig getServletConfig()
获取Servlet信息
String getServletInfo()
5. Servlet体系结构
我们将来开发B/S架构的web项目,都是针对HTTP协议,所以我们自定义Servlet,会继承HttpServlet。
5.1 HttpServlet使用步骤
- 继承HttpServlet。
- 重写doGet方法和doPost方法。
5.2 HttpServlet原理
HTTP 协议中,GET 和 POST 请求方式的数据格式不一样,将来要想在Servlet中处理请求参数,得在service方法中判断请求方式,并且根据请求方式的不同,分别调用不同的doXxx方法:
6. Servlet urlPattern配置
6.1 精确匹配
6.2 目录匹配
6.3 扩展名匹配
6.4 任意匹配
/ 和 /* 区别
- 当我们的项目中的Servlet配置了“/”,会覆盖掉tomcat中的DefaultServlet,导致静态资源不能被访问。当其他的 url-pattern都匹配不上时都会走这个Servlet。
- 当我们的项目中配置了“/*”,意味着匹配任意访问路径 。
优先级
精确路径 > 目录路径 > 扩展名路径 > /* > /
7. XML 配置方式编写 Servlet
Servlet 从3.0版本后开始支持使用注解配置,3.0版本前只支持 XML 配置文件的配置方式。
步骤:
- 编写Servlet类。
- 在web.xml中配置该Servlet类。
web.xml
<!--Servlet全类名-->
<servlet>
<servlet-name>demo8</servlet-name>
<servlet-class>com.ydh.ServletDemo8</servlet-class>
</servlet>
<!--Servlet访问路径-->
<servlet-mapping>
<servlet-name>demo8</servlet-name>
<url-pattern>/demo8</url-pattern>
</servlet-mapping>