Servlet3.0下@WebServlet注解配置Servlet

    xiaoxiao2021-04-18  62

    @WebServlet注解配置Servlet

    从Servlet3.0开始,配置Servlet支持注解方式,但还是保留了配置web.xml方式,所有使用Servlet有两种方式:

    Servlet类上使用@WebServlet注解进行配置web.xml文件中配置

    @WebServlet常用属性

    属性类型是否必须说明asyncSupportedboolean否指定Servlet是否支持异步操作模式displayNameString否指定Servlet显示名称initParamsWebInitParam[]否配置初始化参数loadOnStartupint否标记容器是否在应用启动时就加载这个ServletnameString否指定Servlet名称urlPatterns/valueString[]否这两个属性作用相同,指定Servlet处理的url 测试代码如下:

    1.UserServlet

    通过注解方式配置,web.xml中不需要配置该Servlet

    @WebServlet(name = "myUserServlet", urlPatterns = "/user/test", loadOnStartup = 1, initParams = { @WebInitParam(name="name", value="小明"), @WebInitParam(name="pwd", value="123456") } ) public class UserServlet extends HttpServlet { private static final long serialVersionUID = 7109220574468622594L; @Override public void init(ServletConfig config) throws ServletException { super.init(config); System.out.println("servlet初始化..."); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter pw = response.getWriter(); pw.append("Hello Servlet!<br>" ); //servletName pw.append("servletName:" + getServletName() + "<br>"); //initParam ServletConfig servletConfig = this.getServletConfig(); Enumeration<String> paramNames = servletConfig.getInitParameterNames(); while (paramNames.hasMoreElements()) { String paramName = paramNames.nextElement(); pw.append(paramName + ":" + servletConfig.getInitParameter(paramName) + "<br>"); } pw.close(); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

    2.测试结果

    2.1应用启动时,servlet就会初始化,因为配置了loadOnStartup=1

    2.2访问/user/test,页面上显示结果;表名参数正确初始化以及自定义的servlet名称

    3.注

    (1).loadOnStartup属性:标记容器是否在启动应用时就加载Servlet,默认不配置或数值为负数时表示客户端第一次请求Servlet时再加载;0或正数表示启动应用就加载,正数情况下,数值越小,加载该Servlet的优先级越高; (2). name属性:可以指定也可以不指定,通过getServletName()可以获取到,若不指定,则为Servlet的完整类名,如:cn.edu.njit.servlet.UserServlet (3).urlPatterns/value属性: String[]类型,可以配置多个映射,如:urlPatterns={"/user/test", "/user/example"} (4).在使用注解方式时,需要注意: <web-app> </web-app>根元素中不能配置属性metadata-complete="true",否则无法加载Servlet。metadata-complete属性表示通知Web容器是否寻找注解,默认不写或者设置false,容器会扫描注解和Web分片,为Web应用程序构建有效的元数据;设置true,表示将由部署描述符为Web程序提供所有的配置信息 web.xml中不能再配置该Servlet (5).urlPatterns的常用规则: /*或者/:拦截所有*.do:拦截指定后缀/user/test:拦截路径/user/*.do、/*.do、test*.do都是非法的,启动时候会报错 (6).urlPatterns的配置规则:精确匹配、扩展名匹配、路径匹配以及会包含一些优先级,这些在以后会整理。
    转载请注明原文地址: https://ju.6miu.com/read-675035.html

    最新回复(0)