• Servlet注解-8


    目录

    1、@WebServlet 注解的属性

    2、@WebServlet 注解的使用

    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 开始不再是必选项了。

    1、@WebServlet 注解的属性

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

    属性名类型对应的标签描述是否必需
    nameString用于指定 Servlet 的 name 属性。
    如果没有显式指定,则取值为该 Servlet 的完全限定名,即包名+类名。
    valueString[]该属性等价于 urlPatterns 属性,两者不能同时指定。
    如果同时指定,通常是忽略 value 的取值。
    urlPatternsString[]指定一组 Servlet 的 URL 匹配模式。
    loadOnStartupint指定 Servlet 的加载顺序。
    initParamsWebInitParam[ ]指定一组 Servlet 初始化参数。
    asyncSupportedboolean声明 Servlet 是否支持异步操作模式。
    descriptionString指定该 Servlet 的描述信息。
    displayNameString指定该 Servlet 的显示名。

    2、@WebServlet 注解的使用

    1)启用注解支持

            web.xml 的根标签 中有一个属性:metadata-complete,该属性用于指定当前 web.xml 是否是完全的。若将该属性设置为 true,则容器在部署时将只依赖 web.xml,忽略所有的注解。(默认值是 false,即默认启用 Servlet 注解支持。所以默认情况下,使用该注解时,不必创建 web.xml 文件。

    2)使用 @WebServlet 注解

            @WebServlet 属于类级别的注解,它标注在继承了 HttpServlet 的类上。常用的写法是将 Servlet 的相对请求路径(即 value)直接写在注解内,如下所示。

    @Web​Servlet("/MyServlet")

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

    @WebServlet(​urlPatterns = "/MyServlet")

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

    1. package com.hoperun.www;
    2. import java.io.IOException;
    3. import java.io.PrintWriter;
    4. import jakarta.servlet.ServletException;
    5. import jakarta.servlet.annotation.WebInitParam;
    6. import jakarta.servlet.annotation.WebServlet;
    7. import jakarta.servlet.http.HttpServlet;
    8. import jakarta.servlet.http.HttpServletRequest;
    9. import jakarta.servlet.http.HttpServletResponse;
    10. /**
    11. *
    12. * @author Administrator
    13. *
    14. */
    15. @WebServlet(name = "MyServlet", urlPatterns = { "/MyServlet", "/*" }, loadOnStartup = 1, initParams = {
    16. @WebInitParam(name = "BaiDu", value = "www.baidu.com", description = "initParam-1"),
    17. @WebInitParam(name = "JD", value = "www.jd.com", description = "initParam-2") }, description = "Servlet Description", asyncSupported = true)
    18. public class MyServlet extends HttpServlet {
    19. private static final long serialVersionUID = 1L;
    20. protected void doGet(HttpServletRequest request, HttpServletResponse response)
    21. throws ServletException, IOException {
    22. response.setContentType("text/html;charset=UTF-8");
    23. PrintWriter writer = response.getWriter();
    24. writer.write("Dynamic Web Project...");
    25. writer.close();
    26. }
    27. protected void doPost(HttpServletRequest request, HttpServletResponse response)
    28. throws ServletException, IOException {
    29. doGet(request, response);
    30. }
    31. }

    注意:

    • 通过实现 Serlvet 接口或继承 GenericServlet 类创建的 Servlet 无法使用 @WebServlet 注解。
    • 使用 @WebServlet 注解配置的 Servlet 类,不要在 web.xml 文件中再次配置该 Servlet 相关属性。若同时使用 web.xml 与 @WebServlet 配置同一 Servlet 类,则 web.xml 中 的值与注解中 name 取值不能相同,否则容器会忽略注解中的配置。

    3、@WebServlet 注解 和 web.xml 的优缺点

            使用 web.xml 或 @WebServlet 注解都可以配置 Servlet,两者各有优缺点。

    1)使用 @WebServlet 注解配置 Servlet

    • 优点:@WebServlet 直接在 Servlet 类中使用,代码量少,配置简单。每个类只关注自身业务逻辑,与其他 Servlet 类互不干扰,适合多人同时开发。
    • 缺点:Servlet 较多时,每个 Servlet 的配置分布在各自的类中,不便于查找和修改。

    2)使用 web.xml 配置文件配置 Servlet

    • 优点:集中管理 Servlet 的配置,便于查找和修改。
    • 缺点:代码较繁琐,可读性不强,不易于理解。 
  • 相关阅读:
    Leetcode: 63. 不同路径 II(动态规划)
    程序员必备!10款实用便捷的Git可视化管理工具
    Java刷题day29
    信息系统项目管理师(第四版)教材精读思维导图-第十章项目进度管理
    不用定时器,实现鼠标长悬浮和鼠标长按监听
    C语言内存函数
    数学建模——最优连接(基于最小支撑树)
    java实现前后端分离文件下载
    码农必备?清华大学开源了一款写代码神器。。。
    [modern c++] 函数式编程与 std::ref
  • 原文地址:https://blog.csdn.net/weixin_42051619/article/details/127623776