《Servlet、JSP和Spring MVC初學指南》——1.6 ServletConfig
本節書摘來自異步社區《Servlet、JSP和Spring MVC初學指南》一書中的第1章,第1.6節,作者:【加】Budi Kurniawan(克尼亞萬) , 【美】Paul Deck著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看
1.6 ServletConfig
當Servlet容器初始化Servlet時,Servlet容器會給Servlet的init方法傳入一個ServletConfig。ServletConfig封裝可以通過@WebServlet或者部署描述符傳給Servlet的配置信息。這樣傳入的每一條信息就叫一個初始參數。一個初始參數有key和value兩個元件。
為了從Servlet內部獲取到初始參數的值,要在Servlet容器傳給Servlet的init方法的ServletConfig中調用getInitParameter方法。getInitParameter的方法簽名如下:
java.lang.String getInitParameter(java.lang.String name)
此外,getInitParameterNames方法則是返回所有初始參數名稱的一個Enumeration:
java.util.Enumeration<java.lang.String> getInitParameterNames()
例如,為了獲取contactName參數值,要使用下麵的方法簽名:
String contactName = servletConfig.getInitParameter("contactName");
除getInitParameter和getInitParameterNames外,ServletConfig還提供了另一個很有用的方法:getServletContext。利用這個方法可以從Servlet內部獲取ServletContext。關於這個對象的深入探討,請查閱本章1.7節。
下麵舉一個ServletConfig的範例,在app01a中添加一個名為ServletConfigDemoServlet的Servlet。這個新的Servlet如清單1.7所示。
清單1.2 ServletConfigDemoServlet類
package app01a;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
@WebServlet(name = "ServletConfigDemoServlet",
urlPatterns = { "/servletConfigDemo" },
initParams = {
@WebInitParam(name="admin", value="Harry Taciak"),
@WebInitParam(name="email", value="admin@example.com")
}
)
public class ServletConfigDemoServlet implements Servlet {
private transient ServletConfig servletConfig;
@Override
public ServletConfig getServletConfig() {
return servletConfig;
}
@Override
public void init(ServletConfig servletConfig)
throws ServletException {
this.servletConfig = servletConfig;
}
@Override
public void service(ServletRequest request,
ServletResponse response)
throws ServletException, IOException {
ServletConfig servletConfig = getServletConfig();
String admin = servletConfig.getInitParameter("admin");
String email = servletConfig.getInitParameter("email");
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.print("<html><head></head><body>" +
"Admin:" + admin +
"<br/>Email:" + email +
"</body></html>");
}
@Override
public String getServletInfo() {
return "ServletConfig demo";
}
@Override
public void destroy() {
}
}
如清單1.2所示,在@WebServlet的initParams屬性中,給Servlet傳入了兩個初始參數(admin和email):
@WebServlet(name = "ServletConfigDemoServlet",
urlPatterns = { "/servletConfigDemo" },
initParams = {
@WebInitParam(name="admin", value="Harry Taciak"),
@WebInitParam(name="email", value="admin@example.com")
}
)
利用下麵這個URL,可以調用ServletConfigDemoServlet:
https://localhost:8080/app01a/servletConfigDemo
其結果類似於圖1.4。
圖1.4 ServletConfigDemoServlet效果展示
另一種方法是,在部署描述符中傳入初始參數。在這裏使用部署描述符,比使用@WebServlet更容易,因為部署描述符是一個文本文件,不需要重新編譯Servlet類,就可以對它進行編輯。
部署描述符將在本章後續“使用部署描述符”小節以及第13章中詳細講解。
最後更新:2017-05-27 17:31:24