Servlet
# Servlet
# 继承 GenericServlet
继承 GenericServlet
重写 serviece 方法
在 web.xml 中配置 servlet
<!-- 声明--> <servlet> <!-- 类名--> <servlet-name>servletDemo</servlet-name> <!-- 类路径--> <servlet-class>com.example.demo.demo</servlet-class> </servlet> <!-- 映射--> <servlet-mapping> <!-- 与类名一致--> <servlet-name>servletDemo</servlet-name> <!-- 网页访问链接路径--> <url-pattern>/demo</url-pattern> </servlet-mapping>1
2
3
4
5
6
7
8
9
10
11
12
13
14
重启项目
# 继承 HttpServlet
- 继承 HttpServlet
- 重写 doGet 和 doPost 方法 (可以在 doPost 中调用 doGet 方法)
- 在 web.xml 中配置 servlet
- 重启项目
# 生命周期
- 出生 init ()
- 过程 doGet serviece
- 销毁 destroy ()
# 线程安全问题
serviece 采用是单例模式,整个应用中只有一个实例对象,我们称为单例模式
- 如果只是使用而不修改
- 将变量级别降到 局部变量 在 doget 中
- 使用 synchronized 同步代码块
# 映射方式
完整名称
/ 开头 + 通配符 以什么什么开头
<servlet-name>/demo/*</servlet-name>1
通配符 + 固定结尾 以什么什么结尾
<servlet-name>*.qwq</servlet-name>1
# 创建时机
- 第一次访问时创建
- 减少对服务器内存的浪费,访问时才创建
- 服务器加载时创建
- 提前创建好对象,提高首次执行的效率 对内容占用较大
在 web.xml 中配置 servlet 的 load-on-startup
<servlet>
<servlet-name>servletDemo</servlet-name>
<servlet-class>com.example.demo.demo</servlet-class>
<!-- 正整数为加载时创建值越大优先级越高 负数或不写为第一次访问时创建 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servletDemo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# ServletConfig
在 servlet 标签中 通过 init-param 标签 来配置
以键值对方式配置 param-name 和 param-value
<servlet>
<servlet-name>servletDemo</servlet-name>
<servlet-class>com.example.demo.demo</servlet-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 获取方法
获取 ServletConfig 对象
private ServletConfig config; // 在init方法中 public void init(ServletConfig config) { }1
2
3
getInitParameter (String name) 根据 key 获取 value
getInitParmeterNames () 获取所有参数名称的枚举
getServletName () 获取 Servlet, 名称
getServltContext () 获取 ServltContext 对象
# ServletContext
ServletContext 是应用上下文对象 (应用域对象). 每个应用只有一个 ServletContext 对象
# 配置
在 <web-app> 标签中 通过 <context-param> 标签进行配置
以键值对 <param-name> 和 <param-value> 进行配置
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee">
<context-param>
<param-name>key</param-name>
<param-value>value</param-value>
</context-param>
</web-app>
1
2
3
4
5
6
2
3
4
5
6
# 方法
- getServletContext () 获取当前应用的 ServletContext 对象
- getInitparameter (String name) 根据名称获取全局配置参数
- getContextPath () 获取当前应用访问的虚拟目录
- getRealPath (String path) 根据虚拟目录获取绝对路径
- setAttribute (String name,Object value) 向应用域对象中存储数据
- getAttribute (string name) 根据名称获取应用域中的数据
- removeAttribute (string name) 根据名称移除应用域中的数据
# 注解
Servlet 3.0 支持 注解和 XML 配置,要求 tomcat 9 和 javaee8
以前我们写一个类需要在 xml 中配置该类的路径、名称、链接
@WebServlet 注解配置 Servlet
在该类上面使用
@WebServlet(name = "helloServlet", value = "/hello-servlet")1
# 手动创建容器
- 定义一个类 继承 HttpServlet
- 重写 doget 和 dopost 方法
- 定义一个类 实现 ServletContainerInitializer 接口
- 在 src 目录下创建一个 META-INF 包
- 在 META-INF 包 创建一个 services 包
- 在 services 包 下创建一个 javax.servlet.ServletContainerInitializer 的文件 无后缀文件
- 文件中的内容为容器实现类的全类名
- 在容器实现类中 的 onStarup 方法 中完成注册 Servlet
- 创建要注册的 servlet 对象
- res = serveletContext.addServlet (name, 对象)
- res.addMapping (访问路径)
- 重启项目
编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48