设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 公司 数据
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

@WebServlet注解 Servlet解析

发布时间:2022-07-19 11:45 所属栏目:51 来源:互联网
导读:在 Servlet 中,web.xml 扮演的角色十分的重要,它可以将所有的 Servlet 的配置集中进行管理,但是若项目中 Servelt 数量较多时,web.xml 的配置会变得十分的冗长。这种情况下,注解(Annotation)就是一种更好的选择。 与 XML 不同,注解不需要依赖于配置文
  在 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.org/2001/XMLSchema-instance"
      xmlns="http://xmlns.jcp.org/xml/ns/javaee"
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
      id="WebApp_ID" metadata-complete="false" version="4.0">
      <!-- metadata-complete取值为true,表示关闭注解支持 -->
      <!-- metadata-complete取值为false,表示启用注解支持 -->
  </web-app>
  由于 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 中 <servlet-name> 的值与注解中 name 取值不能相同,否则容器会忽略注解中的配置。
  @WebServlet 注解 和 web.xml 的优缺点
  使用 web.xml 或 @WebServlet 注解都可以配置 Servlet, 两者各有优缺点。
  @WebServlet 注解配置 Servlet
  优点:@WebServlet 直接在 Servlet 类中使用,代码量少,配置简单。每个类只关注自身业务逻辑,与其他 Servlet 类互不干扰,适合多人同时开发。
 
  缺点:Servlet 较多时,每个 Servlet 的配置分布在各自的类中,不便于查找和修改。
  web.xml 配置文件配置 Servlet
  优点:集中管理 Servlet 的配置,便于查找和修改。
 
  缺点:代码较繁琐,可读性不强,不易于理解。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读