在使用tomcat7.0+eclipse j2ee時,建立Dynamic Web Project時,會讓選擇是否產生web.xml.無論選擇與否,此時建立一個servlet,可以不在web.xml中進行servlet的配置,只需在相應的servlet中進行標註配置即可,而且標註遠遠比配置web.xml簡單。
建立一個Dynamic Web Project,取名servlet。如:
伺服器選擇Tomcat7.0,之後點擊下一步兩次進入到如下介面:
會發現產生web.xml選項預設為未選中,不理會之,繼續。點擊完成。產生的工程中已經沒有了web.xml檔案。
一、如何標註配置Servlet
1、建立一個Servlet,如下:
不做任何修改,點擊完成。
以下是新產生的servlet完整類。
packagecn.onlylove.servlet; importjava.io.IOException; importjavax.servlet.ServletException; importjavax.servlet.annotation.WebServlet; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; @WebServlet("/HelloWroldServlet") publicclassHelloWroldServletextendsHttpServlet { privatestaticfinallongserialVersionUID= 1L; protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException { } protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException { } } |
可以發現,在Servlet類名前,已經存在如下標註:
@WebServlet("/HelloWroldServlet"),運行tomcat,在瀏覽器中輸入http://localhost:8080/HelloWroldServlet.
可以發現,未報異常等錯誤資訊。說明該servlet訪問是正確的。
比較:相對於web.xml中的配置,需要如下: <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>cn.onlylove.servlet.HelloWroldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWroldServlet</url-pattern> </servlet-mapping> 對於web.xml中的配置,在標註中通通都有配置。上述配置通過標註可以改成如下: @WebServlet(name="HelloWorld",value="HelloWroldServlet") 由於是在對應的類中配置的資訊,因而則可以不用在標註中配置class了。 另一個問題,在web.xml中一個servlet可以配置多個servlet-mapping,只要在其中指定相同的servlet-name即可。而在標註中使用value只能指定一個。其實,標註也可以指定多個的,但不再用value,而是用urlPatterns數組。如下配置 @WebServlet(name="HelloWorld",urlPatterns={"/HelloWroldServlet","/HelloWorld"})。如此,通過 http://localhost:8080/servlet/HelloWroldServlet http://localhost:8080/servlet/HelloWorld 兩個都可以進入同一個servlet。 當標註與web.xml同時配置時,標註無效。 |
2、如何配置初始化參數。
將標註改成:
@WebServlet(name="HelloWorld",urlPatterns={"/HelloWroldServlet","/HelloWorld"},initParams={@WebInitParam(name="id",value="yeh"),@WebInitParam(name="name",value="九天玄燁")})
注意initParams的配置,而後將doGet()方法改成:
response.setContentType("text/html;charset="UTF-8"");PrintWriter out=response.getWriter(); out.println(this.getInitParameter("id")); out.println(this.getInitParameter("name")); out.flush(); out.close(); |
再次訪問該servlet 即可獲得這兩個參數的值。其它配置一致,無益為String型,沒有什麼變換的地方。此處僅為解釋一下類型數組的配置。無它。
另看網上有人將WebServlet與WebInitParam分開來進行標註,如此而得到初始化參數,我沒有成功。即類似如下:
@WebServlet(“hello”) @WebInitParam(name=”id”,value=”yeh”) Public class …… |
此種方式我沒有成功,看大家有沒有什麼建議。或者tomcat7.0的版本的細微差別。我的是tomcat7.0.12
WebFilter,WebListener配置類似。