1. 程式人生 > >Eclipse新建Servlet時候,不會自動生成mapping到web.xml,而是在程式碼中加入註解@WebServlet

Eclipse新建Servlet時候,不會自動生成mapping到web.xml,而是在程式碼中加入註解@WebServlet

現象:

用Eclipse新版本新建servlet時候,發現建立Servlet後,Eclipse不會自動在web.xml中生成該Servlet對應的mapping資訊,而是在Servlet程式碼中加入註解@WebServlet,如下


分析:

查詢文件發現,這是Servlet3.0新特性(得Tomcat7.0版本及以上),@WebServlet 用於將一個類宣告為 Servlet,該註解將會在部署時被容器處理,容器將根據具體的屬性配置將相應的類部署為 Servlet。該註解具有下表給出的一些常用屬性(以下所有屬性均為可選屬性,但是 value 或者 urlPatterns 通常是必需的,且二者不能共存,如果同時指定,通常是忽略 value 的取值)


解決方法:

在@WebServlet 中定義Servlet的name、urlPatterns等資訊


  1. import javax.servlet.annotation.WebInitParam;  
  2. import javax.servlet.annotation.WebServlet;  
  3. @WebServlet(  
  4. displayName = "This is Login Action"//描述
  5. name = "LoginAction"//servlet名稱
  6. urlPatterns = { "/servlet/LoginAction" },//url
  7. loadOnStartup = 1
    //啟動項
  8. initParams = { @WebInitParam(name = "username", value = "張三") }//初始化引數
  9. )  
  10. publicclass LoginAction extends HttpServlet {  
  11.     /** 
  12.      * Constructor of the object. 
  13.      */
  14.     public LoginAction() {  
  15.         super();  
  16.     }  
  17. }  
Servlet的訪問URL是Servlet的必選屬性,可以選擇使用urlPatterns或者value定義。
  像上面的LoginAction
可以描述成@WebServlet(name="LoginAction",value="/LoginAction")。

  也定義多個URL訪問:
  如@WebServlet(name="LoginAction",urlPatterns={"/LoginAction","/LoginAction2"})

  或者@WebServlet(name="LoginAction",value={"/LoginAction","/LoginAction2"})

這樣的簡化形式也可以,相當於設定了name和urlPattern

@WebServlet("/servlet/LoginAction")

在新建Servlet時候在URL mapping中可以直接輸入