Servlet
文章目录
一、概念
- Servlet 是 Java 提供的一门动态 web 资源开发技术
- Servlet 是 JavaEE 规范之一,其实就是一个接口,将来我们需要定义 Servlet 类实现 Servlet 接口,并由 web 服务器运行 Servlet
二、快速入门
- 创建 web 项目导入 Servlet 依赖坐标
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
- 创建:定义一个类,实现 Servlet 接口,并重写接口中的所有方法,并在 service 方法中输出一句话
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello servlet");
}
- 配置:在类上使用@WebServlet 注解,配置该 Servlet 的访问路径
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {
- 访问:启动Tomcat,浏览器输入URL访问该Servlet
http://localhost:8080/web_demo/demo1
三、Servlet 执行流程
- Servlet 由Web服务器创建,Servlet方法由web服务器调用
- 服务器怎么知道 Servlet 中一定有 service 方法?
- 我们自定义的 Servlet,必须实现 Servlet 接口并复写其方法,而 Servlet 接口中有 service 方法。
四、Servlet 生命周期
- 对象的生命周期指一个对象从被创建到被销毁的整个过程
- Servlet 运行在 Servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:
- 加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象
- 初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些诸如加载配置文件,创建链接等初始化的工作。该方法只调用一次
- 请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理
- 服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收
@WebServlet(urlPatterns = "/demo1", loadOnStartup = -1)
/**
* 负整数:第一次这访问时创建Servlet对象
* 0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高
*/
除生命周期外的还有两个方法需要注意:
-
获取Servlet对象
public ServletConfig getServletConfig()
-
获取Servlet信息
public String getServletInfo()
五、Servlet 体系结构
我们将来开发B/S架构的web项目,都是针对HTTP协议,所以我们自定义Servlet,会继承HttpServlet
- HttpServlet 使用步骤
- 继承HttpServlet
- 重写doGet 和 doPost方法
- HttpServlet 原理
- 获取请求的方式,根据不同的请求方式,调用不同的doXxx方法
六、Servlet urlPattern配置
- Servlet 要想被访问,必须配置其访问路径(urlPattern)
- 一个Servlet可以配置多个urlPattern
- urlPattern 配置规则
- 精确匹配
@WebServlet("/user/demo")
- 目录匹配
@WebServlet("/user/*")
- 扩展名匹配
@WebServlet("*.doc")
- 任意匹配
@WebServlet("/")
@WebServlet("/*")
- 精确匹配
-
/ 和 /* 的区别:
- 当我们项目中的Servlet配置了"/",会覆盖掉tomcat中的DefaultServlet,当其他的 urlPattern 都匹配不上时会走这个Servlet
- 当我们的项目中配置了"/*",意味着匹配任意访问路径
-
优先级:
- 精确路径 > 目录路径 > 扩展名路径 > /* > /
七、XML 配置方式编写 Servlet
- Servlet 从3.0版本后开始支持使用注解配置,3.0版本以前只支持 XML 配置文件的配置方式
- 步骤:
- 编写Servlet类
- 在 web.xml 中配置该 Servlet
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>com.itheima.web.servletDeom</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
声明: 本文内容整理自:黑马程序员新版JavaWeb基础教程,Java web从入门到企业实战完整版