@WebServlet注解(Servlet注解)

8个月前 (04-27)
在 Servlet 中,web.xml 扮演的角色十分的重要,它可以将所有的 Servlet 的配置集中进行管理,但是若项目中 Servelt 数量较多时,web.xml 的配置会变得十分的冗长。这种情况下,注解(Annotation)就是一种更好的选择。

与 XML 不同,注解不需要依赖于配置文件,它可以直接在类中使用,其配置只对当前类有效,这样就避免了集中管理造成的配置冗长问题。那么 Servelt 支持注解吗?

为了简化 Servlet 的配置,Servlet 3.0 中增加了注解支持,例如:@WebServlet、@WebInitParm 、@WebFilter 和 @WebLitener 等,这使得 web.xml 从 Servlet 3.0 开始不再是必选项了。下面我们对 @WebServlet 进行介绍。

@WebServlet 注解的属性

@WebServlet 用于将一个类声明为 Servlet,该注解会在部署时被容器处理,容器根据其具体的属性配置将相应的类部署为 Servlet。该注解具有下表给出的一些常用属性。

属性名

类型

标签

描述

是否必需

name

String

<servlet-name>

指定 Servlet 的 name 属性。

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

value

String[ ]

<url-pattern>

该属性等价于 urlPatterns 属性,两者不能同时指定。

如果同时指定,通常是忽略 value 的取值。

urlPatterns

String[ ]

<url-pattern>

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

loadOnStartup

int

<load-on-startup>

指定 Servlet 的加载顺序。

initParams

WebInitParam[ ]

<init-param>

指定一组 Servlet 初始化参数。

asyncSupported

boolean

<async-supported>

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

description

String

<description>

指定该 Servlet 的描述信息。

displayName

String

<display-name>

指定该 Servlet 的显示名。

@WebServlet 注解的使用

1. 启用注解支持

web.xml 的顶层标签 <web-app> 中有一个属性:metadata-complete,该属性用于指定当前 web.xml 是否是完全的。若该属性设置为 true,则容器在部署时将只依赖 web.xml,忽略所有的注解。若不配置该属性,或者将其设置为 false,则表示启用注解支持。

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3网站站点" rel="nofollow" />

@Web​Servlet("/MyServlet")


该写法省略了 urlPatterns 属性名,其完整的写法如下所示。

@WebServlet(​urlPatterns = "/MyServlet")。


如果 @WebServlet 中需要设置多个属性,则属性之间必须使用逗号隔开,如下所示。

package net.biancheng.www;

import java.io.IOException;

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;

@WebServlet(asyncSupported = true, name = "myServlet", description = "name描述", loadOnStartup = 1, urlPatterns = {

"/MyServlet", "/*" }, initParams = {

@WebInitParam(name = "编程帮", value = "www.biancheng网站站点" rel="nofollow" />