Servlet3.0下@WebServlet註解配置Servlet

@WebServlet註解配置Servlet

從Servlet3.0開始,配置Servlet支持註解方式,但還是保留了配置web.xml方式,所有使用Servlet有兩種方式:

  1. Servlet類上使用@WebServlet註解進行配置
  2. web.xml文件中配置

@WebServlet常用屬性

屬性類型是否必須說明
asyncSupportedboolean指定Servlet是否支持異步操作模式
displayNameString指定Servlet顯示名稱
initParamsWebInitParam[]配置初始化參數
loadOnStartupint標記容器是否在應用啓動時就加載這個Servlet
nameString指定Servlet名稱
urlPatterns/valueString[]這兩個屬性作用相同,指定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的配置規則:精確匹配、擴展名匹配、路徑匹配以及會包含一些優先級,這些在以後會整理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章