@WebServlet注解(Servlet注解)...修改中...

目录

@WebServlet 注解的属性

@WebServlet 注解的使用


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

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

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

@WebServlet 注解的属性

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

属性名类型标签描述是否必需
nameString<servlet-name>指定 Servlet 的 name 属性。
如果没有显式指定,则取值为该 Servlet 的完全限定名,即包名+类名。
valueString[ ]<url-pattern>该属性等价于 urlPatterns 属性,两者不能同时指定。
如果同时指定,通常是忽略 value 的取值。
urlPatternsString[ ]<url-pattern>指定一组 Servlet 的 URL 匹配模式。
loadOnStartupint<load-on-startup>指定 Servlet 的加载顺序。
initParamsWebInitParam[ ]<init-param>指定一组 Servlet 初始化参数。
asyncSupportedboolean<async-supported>声明 Servlet 是否支持异步操作模式。
descriptionString<description>指定该 Servlet 的描述信息。
displayNameString<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)直接写在注解内,如下所示。

@WebServlet("/myHttpServlet")

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

@WebServlet(urlPatterns = "/myHttpServlet")

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

@WebServlet(asyncSupported = true, name = "MyHttpServlet", description = "name描述", loadOnStartup = 1, urlPatterns = {
        "/myHttpServlet", "/*"}, initParams = {
        @WebInitParam(name = "Hello", value = "MyHttpServlet!", description = "init参数1"),
        @WebInitParam(name = "Hi", value = "World!", description = "init参数2")})
public class MyHttpServlet extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取Servlet初始化参数
        ServletConfig config = this.getServletConfig();
        String hello = config.getInitParameter("Hello");
        String Hi = config.getInitParameter("Hi");
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = resp.getWriter();
        writer.write("Hello:" + hello + " Hi:" + Hi);
        writer.close();
    }

    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

注意事项:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值