Servlet3.0下@WebServlet注解配置Servlet

@WebServlet注解配置Servlet

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

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

@WebServlet常用属性

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

1.UserServlet

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

[java]  view plain  copy
  1. @WebServlet(name = "myUserServlet",   
  2.     urlPatterns = "/user/test",   
  3.     loadOnStartup = 1,    
  4.     initParams = {  
  5.             @WebInitParam(name="name", value="小明"),   
  6.             @WebInitParam(name="pwd", value="123456")  
  7.     }  
  8. )  
  9. public class UserServlet extends HttpServlet {  
  10.     private static final long serialVersionUID = 7109220574468622594L;  
  11.       
  12.     @Override  
  13.     public void init(ServletConfig config) throws ServletException {  
  14.         super.init(config);  
  15.           
  16.         System.out.println("servlet初始化...");  
  17.     }  
  18.       
  19.     @Override  
  20.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  21.         response.setContentType("text/html");  
  22.         response.setCharacterEncoding("utf-8");  
  23.         PrintWriter pw = response.getWriter();  
  24.           
  25.         pw.append("Hello Servlet!<br>" );  
  26.           
  27.         //servletName  
  28.         pw.append("servletName:" + getServletName() + "<br>");  
  29.           
  30.         //initParam  
  31.         ServletConfig servletConfig = this.getServletConfig();  
  32.         Enumeration<String> paramNames = servletConfig.getInitParameterNames();  
  33.         while (paramNames.hasMoreElements()) {  
  34.             String paramName = paramNames.nextElement();  
  35.             pw.append(paramName + ":" + servletConfig.getInitParameter(paramName) + "<br>");  
  36.         }  
  37.           
  38.         pw.close();  
  39.           
  40.     }  
  41.   
  42.   
  43.     @Override  
  44.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  45.         doGet(request, response);  
  46.     }  
  47. }  

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的配置规则:精确匹配、扩展名匹配、路径匹配以及会包含一些优先级,这些在以后会整理。

猜你喜欢

转载自blog.csdn.net/lanseliuxingluo/article/details/80222074
今日推荐