layout: post
#标题配置
title: Servlet以及其注解开发
#时间配置
date: 2021-08-29 19:48:00 +0800
#目录配置
categories: Web
#标签配置
tag: 学习笔记
Servlet
一.Servlet的介绍
- Servlet是运行在Java服务器端的程序,用于接收和响应来自客户端基于HTTP协议的请求.
- 如果想实现Servlet的功能,可以通过实现javax.servlet.Servlet接口或者继承它的实现类.
- 核心方法: service0,任何客户端的请求都会经过该方法。
二.Servlet实现方式
- 第一种
- ·实现Servlet接口,实现所有的抽象方法。该方式支持最大程度的自定义。
- 第二种
- 继承GenericServlet抽象类,必须重写service方法,其他方法可选择重写。该方式让我们开发Servlet变得简单。但是这种方式和HTTP协议无关。
- 第三种
- 继承HttpServlet抽象类,需要重写doGet和doPost方法。该方式表示请求和响应都需要和HTTP协议相关。
三.Servlet映射方式
- 第一种
- 具体名称的方式。访问的资源路径必须和映射配置完全相同。
- 第二种
- /开头+通配符的方式。只要符合目录结构即可,不用考虑结尾是什么。
- 第三种
- 通配符+固定格式结尾的方式。只要符合固定结尾格式即可,不用考虑前面的路径。
注意∶优先级问题。越是具体的优先级越高,越是模糊通用的优先级越低。第一种->第二种->第三种。
四.servlet多路径映射
- 我们可以给一个Servlet配置多个访问映射,从而根据不同的请求路径来实现不同的功能
用三.2方法实现
五.Servlet创建时机
- 第一次访问时创建
- 优势:减少对服务器内存的浪费。提高了服务器启动的效率。
- 弊端:如果有一些要在应用加载时就做的初始化操作,无法完成。
- 服务器加载时创建
-
优势:提前创建好对象,探高了首次执行的效率。可以完成一些应用加载时要做的初始化操作.
-
弊端:对服务器内存占用较多,影响了服务器启动的效率,
-
修改Servlet创建时机。在标签中,添加标签(标签里面只能写数字)
正整数代表服务器加载时创建,值越小、优先级越高。负整数或不写代表第一次访问时创建
五.默认Servlet
- 默认Servlet是由服务器提供的一个Servlet。它配置在Tomcat的conf目录中的web.xml中.
- 它的映射路径是/,我们在发送请求时,首先会在我们项目中的web.xml 中查找映射配置,找到则执行。但是当找不到对应的Servlet路径时,就去找默认的Servlet,由默认Servlet处理。所以,一切都是Servlet.
ServletConfig介绍
- ServletConfig是Servlet的配置参数对象,在Servlet的规范中,允许为每一个Servlet都提供一些初始化的配置。所以,每个Servlet都有一个自己的ServletConfig.
- 作用:在Servlet 的初始化时,把一些配置信息传递给Servlet。
- 生命周期:和Servlet相同
一.ServletConfig配置方式
- 在标签中,通过标签来配置。有两个子标签。
- :代表初始化参数的key.
- :代表初始化参数的value,
要给一个servlet配置多个,需要写多个,一个标签里面只能有一个键值对
##二.ServletConfig常用方法
| 返回值 | 方法名 | 说明 |
|---|
| String | getlnitParameter(Stringname) | 根据参数名称获取参数的值 |
| Enumeration | getInitParameterNames0 | 获取所有参数名称的枚举 |
| String | getServletName0 | 获取Servlet的名称 |
| ServletContext | getServletContext( | 获取ServletContext对象 |
ServletContext介绍
- ServletContext是应用上下文对象(应用域对象)。每一个应用中只有一个ServletContext对象.
- 作用:可以配置和获得应用的全局初始化参数,可以实现Servlet之间的数据共享.
- 生命周期:应用一加载则创建,应用被停止则销毁
一.域对象
- 域对象指的是对象有作用域。也就是有作用范围。域对象可以实现数据的共享。不同作用范围的域对象,共享数据的能力也不一样。
- 在Servlet规范中,一共有4个域对象。ServletContext就是其中的一个。它也是web应用中最大的作用域,也叫application域。它可以实现整个应用之间的数据共享!
二.ServletContext配置方式
- 在标签中,通过标签来配置。有两个子标签。
- :代表全局初始化参数的key.
- :代表全局初始化参数的value
三.ServletContext常用方法
| 返回值 | 方法名 | 说明 |
|---|
| String | getlnitParameter(String name) | 根据名称获取全局配置的参数 |
| String | getContextPath0 | 获取当前应用的访问虚拟目录 |
| String | getRealPath(String path) | 根据虚拟目录获取应用部署的磁盘绝对路径 |
| 返回值 | 方法名 | 说明 |
|---|
| void | setAttribute(String name,Object value) | 向应用域对象中存储数据 |
| Object | getAttribute(String name) | 通过名称获取应用域对象中的数据 |
| void | removeAttribute(String name) | 通过名称移除应用域对象中的数据 |
注解开发Servlet
一.自动注解开发的注解详解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
String name() default "";
String[] value() default {};
String[] urlPatterns() default {};
int loadOnStartup() default -1;
WebInitParam[] initParams() default {};
boolean asyncSupported() default false;
String smallIcon() default "";
String largeIcon() default "";
String description() default "";
String displayName() default "";
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
二.手动创建容器的介绍
- Servlet 3.0规范除了使用自动注解的配置方式外,还支持手动创建Servlet容器的方式。如果使用须遵循其编写规范。在3.0版本加入了一个新的接口∶ServletContainerInitializer