Java ServletContext与ServletConfig
捣蛋孩学编程 人气:0ServletContext接口
1.概念
当Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用,可以和程序的容器(服务器)来通信。
两种获取方式:
通过request对象获取
ServletContext context = request.getServletContext();
通过HttpServlet获取
ServletContext context = this.getServletContext();
2.功能
1、获取Web应用程序的初始化参数
定义了getInitParameterNames()和getInitParameter(String name)方法分别用来获取参数名和参数值。
package cn.itcast.chapter04.servlet; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet03 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); // 得到ServletContext对象 ServletContext context = this.getServletContext(); // 得到包含所有初始化参数名的Enumeration对象 Enumeration<String> paramNames = context.getInitParameterNames(); // 遍历所有的初始化参数名,得到相应的参数值,打印到控制台 out.println("all the paramName and paramValue are following:"); // 遍历所有的初始化参数名,得到相应的参数值并打印 while (paramNames.hasMoreElements()) { String name = paramNames.nextElement(); String value = context.getInitParameter(name); out.println(name + ": " + value); out.println("<br>"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
2、实现多个Servlet对象共享数据
由于一个Web应用中的所有Servlet共享同一个ServletContext对象,因此ServletContext对象的域属性可以被该Web应用中的所有Servlet访问。在ServletContext接口中定义了分别用于增加、删除、设置ServletContext域属性的四个方法,如表1所示。
表1 ServletContext接口的方法
方法说明 | 功能描述 |
---|---|
Enumeration getAttributeNames() | 返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的所有域属性名 |
Object getAttibute(String name) | 根据参数指定的属性名返回一个与之匹配的域属性值 |
void removeAttribute(String name) | 根据参数指定的域属性名,从ServletContext中删除匹配的域属性 |
void setAttribute(String name,Object obj) | 设置ServletContext的域属性,其中name是域属性名,obj是域属性值 |
ServletContext context = this.getServletContext(); // 通过setAttribute()方法设置属性值 context.setAttribute("data", "this servlet save data");
3、读取Web应用下的资源文件
ServletContext接口中用于获取资源路径的相关方法,具体如下:
表2 ServletContext接口的常用方法
方法说明 | 功能描述 |
---|---|
Set getResourcePaths(String path) | 返回一个Set集合,集合中包含资源目录中子目录和文件的路径名称。参数path必须以正斜线(/)开始,指定匹配资源的部分路径 |
String getRealPath(String path) | 返回资源文件在服务器文件系统上的真实路径(文件的绝对路径)。参数path代表资源文件的虚拟路径,它应该以正斜线开始(/)开始,“/”表示当前Web应用的根目录,如果Servlet容器不能将虚拟路径转换为文件系统的真实路径,则返回null |
URL getResource(String path) | 返回映射到某个资源文件的URL对象。参数path必须以正斜线(/)开始,“/”表示当前Web应用的根目录 |
InputStream getResourceAsStream(String path) | 返回映射到某个资源文件的InputStream输入流对象。参数path传递规则和getResource()方法完全一致 |
编写读取itcast.properties资源文件:
package cn.itcast.chapter04.servlet; import java.io.*; import java.util.Properties; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet06 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); ServletContext context = this.getServletContext(); PrintWriter out = response.getWriter(); InputStream in = context .getResourceAsStream("/WEB- INF/classes/itcast.properties"); Properties pros = new Properties(); pros.load(in); out.println("Company=" + pros.getProperty("Company") + " <br>"); out.println("Address=" + pros.getProperty("Address") + " <br>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
ServletConfig接口
1.概念
Tomcat初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中,通过调用init(ServletConfig cofig)方法将ServletConfig对象传递给Servlet。
2.ServletConfig的常用方法
表1 ServletConfig接口的常用方法
方法说明 | 功能描述 |
---|---|
String getInitParameter(String name) | 根据初始化参数名返回对应的初始化参数值 |
Enumeration getInitParameterNames() | 返回一个Enumeration对象,其中包含了所有的初始化参数名 |
ServletContext getServletContext() | 返回一个代表当前Web应用的ServletContext对象 |
String getServletName() | 返回Servlet的名字,即web.xml中<servlet-name>元素的值 |
package cn.itcast.chapter04.servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet02 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); // 获得ServletConfig对象 ServletConfig config = this.getServletConfig(); // 获得参数名为encoding对应的参数值 String param = config.getInitParameter("encoding"); out.println("encoding="+param); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
加载全部内容