淺 談 Servlet
一、傳統 Servlet配置與Java EE 7 Servlet 之間的比較
我們都知道,傳統創建一個Servlet後,都需要在web.xml文件中進行相關的配置。即需要在web.xml
文件中添加以下代碼:
<servlet> <servlet-name>First_Servlet</servlet-name> <servlet-class>servlet.First_Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>First_Servlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
而在Java EE 7 中,每當我們創建一個新的Servlet時,不需要再e.xml文件中進行相關配置了,只
需要將Servlet類繼承HttpServlet,並在該類前聲明 @WebServlet("/hello")註解,啓動Tomcat服務器
後,在本機即可通過 http://localhost:8080/Java_Web/hello 對該Servlet進行訪問。
注意點:
1、@WebServlet 註解是用來標識一個類是一個Servlet類的。
2、該註解使用時,一般包含 urlPatterns、value 屬性,但是,當該註解只是用來聲明Servlet的
訪問路徑時,即聲明urlPatterns時,只需指定value值即可。否則,當需要以上兩個屬性外的其他屬性
時,需要顯示指定urlPatterns屬性,而不能只指定value值。
二、傳統 Servlet初始化參數配置與Java EE 7 Servlet 之間的比較
在Java web中,我們可以配置至少兩種類型的參數。
第一種是web全局初始化參數,該參數對整個web應用生效。第二種是servlet初始化參數。但在以前
都是在web.xml文件中進行配置,相關詳細配置如下:
<!-- 全局參數 --> <context-param> <param-name>user</param-name> <param-value>root</param-value> </context-param> <!-- Servlet參數 --> <servlet> <servlet-name>First_Servlet</servlet-name> <servlet-class>servlet.First_Servlet</servlet-class> <init-param> <param-name>user</param-name> <param-value>root</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>First_Servlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
以上兩種參數在一個Servlet中可以通過以下方式獲得:
String userName = request.getServletContext().getInitParameter("user"); System.out.println("=="+userName); public void init(ServletConfig config) throws ServletException { // TODO Auto-generated method stub super.init(config); System.out.println(config.getInitParameter("user")); } 或者: ServletConfig p = this.getServletConfig(); String value = p.getInitParameter("name"); System.out.println(value); //注意:不能通過request對象直接獲取初始化參數的值,但可以通過request獲取ServletContext對///象然後獲取全局初始化變量的值,如 request.getServletContext().getInitParameter("user")
當然除了以上兩種參數,我們也可以根據需要配置其他的參數,如Filter過濾器參數。
在Java EE 7 中,允許使用Java註解來定義Servlet初始化參數(非全局參數)
//在聲明Servlet路徑的同時也聲明瞭該Servlet的一個初始化參數 @WebServlet(urlPatterns="/a",initParams=@WebInitParam(name="name",value="a"))
我們或許會問,那如果我想聲明多個Servlet初始化參數呢?
//在聲明Servlet路徑的同時也聲明瞭該Servlet的2個初始化參數 @WebServlet(urlPatterns="/a",initParams={@WebInitParam(name="name",value="a"),@WebInitParam(name="age",value="13")})
在@WebServlet註解中,initParams屬性可以傳入一個@WebInitParam註解數組,每個@WebInitParam
註解相當於定義了一個初始化參數,但注意,多個參數要以中括號{}包裹着。