JavaWeb篇_12——ServletContext對(duì)象
ServletContext對(duì)象
ServletContext對(duì)象介紹
ServletContext官方叫Servlet上下文。服務(wù)器會(huì)為每一個(gè)Web應(yīng)用創(chuàng)建一個(gè)ServletContext對(duì)象。這個(gè)對(duì)象全局唯一,而且Web應(yīng)用中的所有Servlet都共享這個(gè)對(duì)象。所以叫全局應(yīng)用程序共享對(duì)象。
ServletContext對(duì)象的作用
- 相對(duì)路徑轉(zhuǎn)絕對(duì)路徑
- 獲取容器的附加信息
- 讀取配置信息
- 全局容器
相對(duì)路徑轉(zhuǎn)絕對(duì)路徑
context.getRealPath("path")
該方法可以將一個(gè)相對(duì)路徑轉(zhuǎn)換為絕對(duì)路徑,在文件上傳與下載時(shí)需要用到該方法做路徑的轉(zhuǎn)換。
//獲取ServletContext對(duì)象
ServletContext servletContext = this.getServletContext();
//轉(zhuǎn)換路徑
String realPath = servletContext.getRealPath("image.PNG");
File file=new File(realPath);
獲取容器的附加信息
servletContext.getServerInfo()
返回Servlet容器的名稱和版本號(hào)
servletContext.getMajorVersion()
返回Servlet容器所支持Servlet的主版本號(hào)。
servletContext.getMinorVersion()
返回Servlet容器所支持Servlet的副版本號(hào)。
public class GetBaseInfoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//獲取ServletContext對(duì)象
ServletContext servletContext = this.getServletContext();
//獲取容器的基本信息
String serverInfo = servletContext.getServerInfo();
//獲取容器所支持的主版本號(hào)
int majorVersion = servletContext.getMajorVersion();
//獲取容器所支持的副版本號(hào)
int minorVersion = servletContext.getMinorVersion();
//設(shè)置響應(yīng)編碼
resp.setContentType("text/plain;charset=utf-8");
PrintWriter pw = resp.getWriter();
pw.println("容器的基本信息:"+serverInfo);
pw.println("容器所支持Servlet的版本號(hào)為:"+majorVersion+"."+minorVersion);
}
}
<servlet>
<servlet-name>getBaseInfoServlet</servlet-name>
<servlet-class>com.java.GetBaseInfoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getBaseInfoServlet</servlet-name>
<url-pattern>/getBaseInfo.do</url-pattern>
</servlet-mapping>
獲取web.xml文件中的信息
<context-param>
<param-name>key</param-name>
<param-value>value</param-value>
</context-param>
servletContext.getInitParameter("key")
該方法可以讀取web.xml文件中標(biāo)簽中的配置信息。
servletContext.getInitParameterNames()
該方法可以讀取web.xml文件中所有param-name標(biāo)簽中的值。
<context-param>
<param-name>key1</param-name>
<param-value>java1</param-value>
</context-param>
<context-param>
<param-name>key2</param-name>
<param-value>java2</param-value>
</context-param>
public class ContextReadInfoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//獲取ServletContext對(duì)象
ServletContext servletContext = this.getServletContext();
//獲取所有的<param-name>的值
Enumeration<String> initParameterNames = servletContext.getInitParameterNames();
PrintWriter pw = resp.getWriter();
while (initParameterNames.hasMoreElements()){
String name = initParameterNames.nextElement();
String value = servletContext.getInitParameter(name);
pw.println("name:"+name+" = value:"+value);
}
pw.flush();
pw.close();
}
}
<servlet>
<servlet-name>contextReadInfoServlet</servlet-name>
<servlet-class>com.java.ContextReadInfoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>contextReadInfoServlet</servlet-name>
<url-pattern>/readInfo.do</url-pattern>
</servlet-mapping>
全局容器
servletContext.setAttribute("key",ObjectValue)
向全局容器中存放數(shù)據(jù)。
servletContext.getAttribute("key")
從全局容器中獲取數(shù)據(jù)。
servletContext.removeAttribute("key")
根據(jù)key刪除全局容器中的value。
public class GlobalContainerServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//獲取ServletContext對(duì)象
ServletContext servletContext = this.getServletContext();
String s1 = (String) servletContext.getAttribute("key1");
String s2 = (String)servletContext.getAttribute("key2");
PrintWriter pw=resp.getWriter();
pw.println(s1);
pw.println(s2);
pw.flush();
pw.close();
}
@Override
public void init() throws ServletException {
//獲取ServletContext對(duì)象
ServletContext servletContext = this.getServletContext();
servletContext.setAttribute("key1","java1");
servletContext.setAttribute("key2","java2");
}
}
ServletContext對(duì)象生命周期
? 當(dāng)容器啟動(dòng)時(shí)會(huì)創(chuàng)建ServletContext對(duì)象并一直緩存該對(duì)象,直到容器關(guān)閉后該對(duì)象生命周期結(jié)束。ServletContext對(duì)象的生命周期非常長,所以在使用全局容器時(shí)不建議存放業(yè)務(wù)數(shù)據(jù)。
浙公網(wǎng)安備 33010602011771號(hào)