Java for Web學習筆記(七):Servlet(5)初始化引數
阿新 • • 發佈:2019-02-13
Context Init引數
在web.xml中可以基於整個上下文進行設定,在web app內各個Servlet都可以獲取。
<context-param> <param-name>settingOne</param-name> <param-value>foo</param-value> </context-param> <context-param> <param-name>settingTwo</param-name> <param-value>bar</param-value> </context-param>
我們可以在context中獲取這些數值。例子如下:
@WebServlet( name = "ContextparamTestServlet", urlPatterns = {"/ContextParamTest"} ) public class ContextparamTestServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* 應養成設定Content-Type這個Header的習慣 ,本例設定為Content-Type:“text/plain;charset=UTF-8”*/ response.setContentType("text/plain"); response.setCharacterEncoding("UTF-8"); ServletContext context = getServletContext(); //獲取上下文 response.getWriter().append("settingOne = ").append(context.getInitParameter("settingOne")) .append("\nsettingTwo = ").append(context.getInitParameter("settingTwo")); } }
Servlet Init引數
使用web.xml
基於不要同時使用web.xml和程式碼中的@WebServlet的原則,我們在程式碼中刪除或者註釋掉@WebServlet。在web.xml中加入以下定義:
<servlet> <servlet-name>ServletParamTestServlet</servlet-name> <servlet-class>cn.wei.flowingflying.chapter03.ServletParamTestServlet</servlet-class> <init-param> <param-name>databaseName</param-name> <param-value>mydabase</param-value> </init-param> <init-param> <param-name>databaseIp</param-name> <param-value>192.168.1.101</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ServletParamTestServlet</servlet-name> <url-pattern>/servletInitTest</url-pattern> </servlet-mapping>
程式碼如下:
public class ServletParamTestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
ServletConfig c = this.getServletConfig();
PrintWriter writer = response.getWriter();
writer.append("databaseName = ").append(c.getInitParameter("databaseName"))
.append("\ndatabaseIp = ").append(c.getInitParameter("databaseIp"));
}
}
使用@WebServlet
使用@WebServlet的例子如下:
@WebServlet(
name = "servletParameTest2Servlet",
urlPatterns = {"/servletParameTest2"},
initParams = {
@WebInitParam(name = "databaseName", value = "TestDatabase"),
@WebInitParam(name = "databaseIp", value = "181.0.0.100")
})
程式碼內容同上一個例子,執行結果如下:
討論:使用哪種方式
如果我們需要對Servlet的初始引數進行設定,一般使用web.xml。這些配置可以根據部署情況變化而進行修改,無需開發人員重新進行編譯。當然,有一些引數可能是固定,那麼這種情況,我們可以將此放置在一個類中。
使用@Config的方式(在javax.servlet.annotation中定義),可以簡化web.xml內容,一般推薦使用,但是這種方式不適用於:
1、 為同一個servlet建立多個servlet例項;
2、 無需重新編譯,修改初始化引數(通常和具體的配置有關)
3、 超過一個Filter。對於Filter,提供了@WebFilter的方式,如果有多個Filter,使用@Config方式無法設定Filter的順序。