ServletConfig对象和ServletContext对象
Posted K_artorias
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ServletConfig对象和ServletContext对象相关的知识,希望对你有一定的参考价值。
ServletConfig对象是servlet配置对象,(web.xml中的)servlet信息封装在ServletConfig对象中,因此在一个web应用可存在多个ServletConfig。ServletContext对象是servlet上下文对象,而整个web.xml信息封装在ServletContext对象中,因此 一个web应用中只有一个servletcontext对象,可能存在多个servletconfig对象。
ServletConfig
创建:在创建完servlet对象之后,在调用init方法之前创建,直接从有参数的init方法中得到。
API:
1 java.lang.String getInitParameter(java.lang.String name) 根据参数名获取参数值 2 java.util.Enumeration getInitParameterNames() 获取所有参数 3 ServletContext getServletContext() 得到servlet上下文对象 4 java.lang.String getServletName() 得到servlet的名称
注意:servlet的参数只能由当前的这个sevlet获取。
如下,我想访问e盘下的某个文件,想通过web.xml中配置,在提交请求到服务器时访问。
web.xml
1 <servlet> 2 <servlet-name>ConfigDemo</servlet-name> 3 <servlet-class>gz.itcast.f_config.ConfigDemo</servlet-class> 4 <!-- 初始参数: 这些参数会在加载web应用的时候,封装到ServletConfig对象中 --> 5 <init-param> 6 <param-name>path</param-name> 7 <param-value>e:/b.txt</param-value> 8 </init-param> 9 </servlet>
ConfigDemo.java
public class ConfigDemo extends HttpServlet { /** * 以下两段代码GenericServlet已经写了,我们无需编写!! */ /*private ServletConfig config;*/ /** * 1)tomcat服务器把这些参数会在加载web应用的时候,封装到ServletConfig对象中 * 2)tomcat服务器调用init方法传入ServletConfig对象 */ /*@Override public void init(ServletConfig config) throws ServletException { this.config = config; }*/ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 读取servlet的初始参数 */ String path = this.getServletConfig().getInitParameter("path"); File file = new File(path); //读取内容 BufferedReader br = new BufferedReader(new FileReader(file)); String str = null; while( (str=br.readLine())!=null ){ System.out.println(str); } }
ServletContext对象
核心API
java.lang.String getContextPath() --得到当前web应用的路径 java.lang.String getInitParameter(java.lang.String name) --得到web应用的初始化参数 java.util.Enumeration getInitParameterNames() void setAttribute(java.lang.String name, java.lang.Object object) --域对象有关的方法 java.lang.Object getAttribute(java.lang.String name) void removeAttribute(java.lang.String name) RequestDispatcher getRequestDispatcher(java.lang.String path) --转发(类似于重定向) java.lang.String getRealPath(java.lang.String path) --得到web应用的资源文件 java.io.InputStream getResourceAsStream(java.lang.String path)
在web.xml配置web应用参数,如下:
<context-param> <param-name>AAA</param-name> <param-value>AAA‘s value</param-value> </context-param>
在web.xml中配置了上述的参数,就相当于给整个web添加了一个新属性,那么可以通过ServletContext访问。而上边的在servlet中添加一个<init-param>,相当于某个web应用的某个特定的servlet添加了一个属性,所以只能通过该servlet的ServletConfig访问。下面的例子描述ServletContext如何访问:
public class ContextDemo2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //得到SErvletContext对象 ServletContext context = this.getServletContext(); System.out.println("参数"+context.getInitParameter("AAA")); Enumeration<String> enums = context.getInitParameterNames(); while(enums.hasMoreElements()){ String paramName = enums.nextElement(); String paramValue =context.getInitParameter(paramName); System.out.println(paramName+"="+paramValue); } //尝试得到ConfigDemo中的servlet参数 String path = this.getServletConfig().getInitParameter("path"); System.out.println("path="+path); } }
以上是关于ServletConfig对象和ServletContext对象的主要内容,如果未能解决你的问题,请参考以下文章