(16)ServletContext详解
1,作用:
ServletContext对象 ,叫做Servlet的上下文对象。表示一个当前的web应用环境。一个web应用中只有一 个ServletContext对象。
2,对象的创建
加载web应用时创建ServletContext对象。
上一篇说了ServletConfig对象,一个web应用中默认只有一个ServletContext对象,可以有多个ServletConfig对象;Config对象的创建时机是Servlet第一次调用的时候,init方法之前创建。
ServletContext相当于web环境的化身,ServletConfig对象相当于每个sevlet对象的化身。
我们可以简单想象一下sun公司关于ServletContext的设计:
1)创建ServletContext对象 ServletContext context = new ServletContext() 2)创建ServletConfig对象 ServetConfig config = new ServletConfig(); config.setServletContxt(context); class ServletConfig{ ServletContext context; public ServletContext getServletContxt(){ return contxt; } } public void init( ServletConfig config ){ 得到ServletConfig对象 从ServletConfig对象中得到ServletContext对象 SerlvetContext context = config.getServletContext(); }
3,ServletContext对象的获取:
a,从ServletConfig对象获取
getServletConfig().getServletContext()
b,在Servlet中直接获取
ServletContext context = getServletConfig().getServletContext();
context = getServletContext();
4,常用的API
a,获取当前web应用的路径
getServletContext().getContextPath()
b,获取web初始化参数
配置web初始化参数:
获取参数:
getServletContext().getInitParameterNames();//返回枚举类型,参数名列表
getServletContext().getInitParameter(paraName)//获取具体的参数值
c,作为域对象共享数据使用
getServletContext().setAttribute("time", "2017.11.11");
System.out.println(getServletContext().getAttribute("time"));
getServletContext().removeAttribute("time");
作为与对象,设置的属性数据,可以在同一个web应用下的其他servlet地方使用。相当于单例共享数据的感觉。
d,转发
//转发 /** * 注意:不能转发当前web应用以外的资源。 */ /*RequestDispatcher rd = this.getServletContext().getRequestDispatcher("/GetDataServlet"); rd.forward(request, response);*/ this.getServletContext().getRequestDispatcher("/GetDateServlet").forward(request, response);
对比重定向:
//重定向 /** * 注意:可以跳转到web应用内,或其他web应用,甚至其他外部域名。 */ //response.sendRedirect("/day09/adv.html"); response.sendRedirect("/day10/GetDataServlet");
e,获取资源路径
java.lang.String getRealPath(java.lang.String path) --得到web应用的资源文件
java.io.InputStream getResourceAsStream(java.lang.String path)
重点概述:
1,所有域对象
HttpServletRequet 域对象
ServletContext域对象
HttpSession 域对象
PageContext域对象
2,转发和重定向
1)转发
a)地址栏不会改变
b)转发只能转发到当前web应用内的资源
c)可以在转发过程中,可以把数据保存到request域对象中
2)重定向
a)地址栏会改变,变成重定向到地址。
b)重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。
c)不能再重定向的过程,把数据保存到request中。