Servlet 基本介绍
文章目录
1. 基本概念
Servlet 是由 server applet 两个单词拼接而成,指的是运行在服务器端的小程序,它本质上是一个接口,它定义了 Java 类被浏览器访问到(被tomcat识别到)的规则。使用时需要我们自定义一个类来实现 Servlet 接口,并复写其中的方法。
这里提供几个关于 Servlet 的学习资料或平台:
2. 快速入门
我这里演示的开发环境是 IDEA_2019.2.3 和 Tomcat_9.0.26,关于 IDEA 配置 Tomcat 的方法,推荐一篇博文 IDEA 配置 Tomcat ,讲的相对详细。
-
创建 JavaWeb 项目(Web Application)。
-
定义一个类,实现 Servlet 接口,复写其中方法。
package servlet.demo1;
import javax.servlet.*;
import java.io.IOException;
public class ServletDemo implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("项目启动了!");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello servlet!");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("项目关闭了!");
}
}
- 在 web.xml 中配置 Servlet 的资源路径,后面会介绍注解配置,这里作为了解。
<!-- 在web.xml中配置 -->
<!-- 配置servlet-->
<servlet>
<!-- 这里给模块命名,与后面的mapping相对应 -->
<servlet-name>demo1</servlet-name>
<!-- 这里写全类名 -->
<servlet-class>com.base.servlet.ServletDemo1</servlet-class>
</servlet>
<!--配置路径-->
<servlet-mapping>
<!-- 这里的 name 属性与上面对应 -->
<servlet-name>demo1</servlet-name>
<!-- 这里是浏览器访问资源的 资源路径 -->
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
- 配置 Tomcat 的虚拟路径
- 启动Tomcat,到浏览器访问链接:http://localhost:8080/Serv/demo1
- 查看看控制台输出
3. Servlet 执行原理
- 当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问 Servlet 的 资源路径。
- 服务器根据获取到的 资源路径 去查找 web.xml 文件中的 <url-pattern> 标签是否有对应的 资源路径。
- 如果有,则找到对应的 <servlet-class> 全类名。
- Tomcat 将对应类的字节码文件加载进内存,创建其对象,并调用 service() 方法。
4. Servlet 中的方法
方法名 | 描述 |
---|---|
init() | 初始化方法,在 Servlet 对象被创建时被调用,并且只会调用一次。 |
getServletConfig() | 获取 ServletConfig 对象,这是 Servlet 的配置对象。 |
service() | 提供服务方法,每次 Servlet 被访问时,都会被调用。 |
getServletInfo() | 获取 Servlet 的一些信息,如:版本、作者等信息。 |
destroy() | 销毁方法,在服务器正常关闭时被调用,并且只会执行一次。 |
关于init()方法:
- 默认情况下,Servlet 第一次被访问时才会去创建对象。
- 通过配置可以改变 Servlet 对象的创建时机。具体操作如下:
<!-- 在<servlet>标签下配置 -->
<!-- 第一次被访问时创建对象,则设置值为任意的 负数 即可。 -->
<load-on-startup>-5</load-on-startup>
<!-- 在服务器启动时创建对象,则设置值为任意 正数 或 0 即可。-->
<load-on-startup>5</load-on-startup>
-->
5. Servlet 的生命周期
Servlet 中的 init()、service()、destroy() 三个方法可以代表 Servlet 的生命周期。
- 被创建:调用 init() 方法,对象被创建后会调用一次。
- 提供服务:执行service()方法,对象每次被访问都会执行。
- 被销毁:执行destroy()方法,服务器正常关闭前会被调用一次。
注意:
Servlet是单例的,多个用户同时访问时,可能存在安全问题,所以尽量不在 Servlet 中定义成员变量,可以定义常量用 final 修饰。
6. Servlet 的注解配置
Servlet3.0 后的新特性,可以通过注解的方式配置 Servlet ,不用在 web.xml 中配置。
配置方法:在类上使用@WebServlet("/资源路径")注解,如下所示:
//@WebServlet(urlPatterns = "/demo2")
//value属性可以省略属性名
@WebServlet("/demo2")
public class ServletDemo implements Servlet {
//类方法......
}
注意:
- urlPatterns 是 Servlet 的资源访问路径。
- 一个 Servlet 可以有多个资源访问路径:@WebServlet({"/demo1","/demo2","/demo3"})。
- 路径定义规则
- /XXX —— 一层路径
- /XXX/XXX —— 多层路径
- *.后缀名 —— *代表任意字符,只要访问资源路径的后缀名是提前设定的字符,就可以访问成功。
7. IDEA 与 Tomcat 的相关细节
- IDEA 会为每一个Tomcat 部署的项目单独创建一份配置文件,存储路径会在启动或关闭项目时输出到控制台上,如下图所示。
- 工作空间项目 和 Tomcat部署的 web项目
- 工作空间:项目文件夹
- Tomcat部署的web项目:项目文件夹\out\artifacts\项目名\
- Tomcat真正访问的是“Tomcat部署的web项目”
- “Tomcat部署的web项目”对应着“工作空间项目”的web目录下的所有资源。
- WEB-INFO目录下的资源不能被浏览器直接访问。
8. Servlet 的体系结构
名称 | 类型 | 描述 |
---|---|---|
Servlet | 接口 | 上面已经介绍过了。 |
GenericServlet | 抽象类 | 继承Servlet,将Servlet接口中其他的方法做了默认空实现,只将Service做抽象。 |
HttpServlet | 抽象类 | 继承GenericServlet,是对http协议的一种封装,简化操作。 |
注意:
- 用的较多的是 HttpServlet 接口。
- 其中具体的方法,这里不做介绍了,具体查看文章开头提供的 API 文档。
- 实现 HTTPServlet 的类需要重写 doGet() 和 doPost() 方法。
2019年11月1日19:43:11