9.14JavaWeb之@WebServlet注解

什么是WebServlet注解

概念:

为了简化 Servlet 的配置而产生的

作用:

使 web.xml 从 Servlet 3.0 开始不再是必选项了

@WebServlet注解的属性

作用:

@WebServlet 将一个类声明为 Servlet

该注解会在部署时被容器处理

容器根据其具体的属性配置将相应的类部署为 Servlet。

常见属性:

属性名类型标签描述是否必需

name

String

指定 Servlet 的 name 属性。 如果没有显式指定,则取值为该 Servlet 的完全限定名,即包名+类名。

value

String[ ]

该属性等价于 urlPatterns 属性,两者不能同时指定。 如果同时指定,通常是忽略 value 的取值。

urlPatterns

String[ ]

指定一组 Servlet 的 URL 匹配模式。

loadOnStartup

int

指定 Servlet 的加载顺序。

initParams

WebInitParam[ ]

指定一组 Servlet 初始化参数。

asyncSupported

boolean

声明 Servlet 是否支持异步操作模式。

description

String

指定该 Servlet 的描述信息。

displayName

String

指定该 Servlet 的显示名。

@WebServlet注解的使用

启用注解支持

使用@WebServlet注解

启用注解支持

过程:

在web.xml的顶层标签中设置属性

设置metadata-complete

属性设置为 true,则容器在部署时将只依赖 web.xml,忽略所有的注解

不配置该属性,或者将其设置为 false,则表示启用注解支持

示例注解:

MyServletDemoNo3 net.biancheng.www.MyServletDemoNo3 MyServletDemoNo3 /MyServletDemoNo3

使用注解不必创建 web.xml 文件。

使用@WebServlet注解

特点:

@WebServlet 属于类级别的注解,标注在继承了 HttpServlet 的类之上--->写在类上方

完整写法:

@WebServlet(urlPatterns="/MyServlet")

常用写法:

@WebServlet("/MyServlet")

注释中设置多个属性需要用,隔开

示例代码:

package ServletPractice;​import javax.jws.WebService;import javax.servlet.ServletException;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;​/** * 使用注释的方式实现web.xml中创建Servlet容器的效果 * @since JDK 1.8 * @date 2021/09/14 * @author Lucifer */@WebServlet(asyncSupported = true, name = "myServlet", description = "name描述", loadOnStartup = 1, urlPatterns = { "/MyServlet", "/*" }, initParams = { @WebInitParam(name = "百度", value = "www.baidu.com", description = "init参数1"), @WebInitParam(name = "京东", value = "www.jd.com", description = "init参数2") })public class MyServletDemoNo4 extends HttpServlet { private static final long SERIALVERSIONUID = 1L;​ //doGet方法 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {​ }​ //doPost方法 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {​ }}

注意事项:

通过实现 Serlvet 接口或继承 GenericServlet 创建的 Servlet 类无法使用 @WebServlet 注解。

使用 @WebServlet 注解配置的 Servlet 类,不要在 web.xml 文件中再次配置该 Servlet 相关属性

若同时使用 web.xml 与 @WebServlet 配置同一 Servlet 类,则 web.xml 中 的值与注解中 name 取值不能相同,否则容器会忽略注解中的配置。