@WebServlet注解(Servlet注解)
@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 注解的使用
1. 启用注解支持
web.xml 的顶层标签
<?xml version="1.0" encoding="UTF-8"?>
由于 metadata-complete 属性的默认值是 false,即默认启用 Servlet 注解支持,所以默认情况下,使用该注解时,不必创建 web.xml 文件。
2. 使用 @WebServlet 注解
@WebServlet 属于类级别的注解,标注在继承了 HttpServlet 的类之上。常用的写法是将 Servlet 的相对请求路径(即 value)直接写在注解内,如下所示。
- @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.net", description = "init参数1"),
@WebInitParam(name = "京东", value = "www.jd.com", description = "init参数2") })
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
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 取值不能相同,否则容器会忽略注解中的配置。
@WebServlet 注解 和 web.xml 的优缺点
使用 web.xml 或 @WebServlet 注解都可以配置 Servlet, 两者各有优缺点。
@WebServlet 注解配置 Servlet
优点:@WebServlet 直接在 Servlet 类中使用,代码量少,配置简单。每个类只关注自身业务逻辑,与其他 Servlet 类互不干扰,适合多人同时开发。
缺点:Servlet 较多时,每个 Servlet 的配置分布在各自的类中,不便于查找和修改。
web.xml 配置文件配置 Servlet
优点:集中管理 Servlet 的配置,便于查找和修改。
缺点:代码较繁琐,可读性不强,不易于理解。