目录
3、@WebServlet 注解 和 web.xml 的优缺点
在 Servlet 中,web.xml 可以将所有的 Servlet 的配置进行集中管理,但若项目中 Servlet 的数量较多时,web.xml 的配置会变得十分的冗长。在这种情况下,Servlet注解无疑是一种更好的选择。
与 XML 不同的是,注解不依赖配置文件,它可以直接在类中使用,其配置只对当前类有效,这样就避免了集中管理造成的配置冗长问题。那么 Servlet 支持注解吗?
为了简化 Servlet 的配置,Servlet 3.0 中增加了注解支持,例如:@WebServlet、@WebInitParam、@WebFilter 和 @WebListener 等注解,这使得 web.xml 从 Servlet 3.0 开始不再是必选项了。
@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 的显示名。 | 否 |
1)启用注解支持
web.xml 的根标签
2)使用 @WebServlet 注解
@WebServlet 属于类级别的注解,它标注在继承了 HttpServlet 的类上。常用的写法是将 Servlet 的相对请求路径(即 value)直接写在注解内,如下所示。
@WebServlet("/MyServlet")
该写法省略了 urlPatterns 属性名,其完整的写法如下:
@WebServlet(urlPatterns = "/MyServlet")
如果 @WebServlet 中需要设置多个属性,则属性之间必须使用逗号隔开,如下所示:
- package com.hoperun.www;
-
- import java.io.IOException;
- import java.io.PrintWriter;
-
- import jakarta.servlet.ServletException;
- import jakarta.servlet.annotation.WebInitParam;
- import jakarta.servlet.annotation.WebServlet;
- import jakarta.servlet.http.HttpServlet;
- import jakarta.servlet.http.HttpServletRequest;
- import jakarta.servlet.http.HttpServletResponse;
-
- /**
- *
- * @author Administrator
- *
- */
- @WebServlet(name = "MyServlet", urlPatterns = { "/MyServlet", "/*" }, loadOnStartup = 1, initParams = {
- @WebInitParam(name = "BaiDu", value = "www.baidu.com", description = "initParam-1"),
- @WebInitParam(name = "JD", value = "www.jd.com", description = "initParam-2") }, description = "Servlet Description", asyncSupported = true)
- public class MyServlet extends HttpServlet {
-
- private static final long serialVersionUID = 1L;
-
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html;charset=UTF-8");
- PrintWriter writer = response.getWriter();
- writer.write("Dynamic Web Project...");
- writer.close();
- }
-
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
-
- }
注意:
使用 web.xml 或 @WebServlet 注解都可以配置 Servlet,两者各有优缺点。
1)使用 @WebServlet 注解配置 Servlet
2)使用 web.xml 配置文件配置 Servlet