ServletConfig、ServletContext
1、ServletConfig获取web.xml中的配置信息:
java代码:
1 @Override 2 public void init(ServletConfig config) throws ServletException { 3 String encode = config.getInitParameter("encode"); 4 System.out.println("encode:"+ encode); 5 //获取参数名 6 Enumeration<String> names = config.getInitParameterNames(); 7 while(names.hasMoreElements()){ 8 String name = names.nextElement(); 9 String paramValue = config.getInitParameter(name); 10 System.out.println(name +"----"+ paramValue); 11 } 12 }
Tomcat启动是注意观看加载信息:
2、ServletContext
实现跨浏览器取值,servletContext 在服务器启动web项目的时候创建一个唯一的servletcontext对象,服务器关闭的时候销毁 servletContext的对象,在一个web应用域中,范围最广的对象
首先要获取ServletContext:this.getServletContext()
1 //获取servletContext 2 ServletContext servletContext = this.getServletContext();
1.获取文件的真实路径:getRealpath()
1 //获取文件的真实路径 2 String realPath = servletContext.getRealPath("/index.jsp"); 3 System.out.println("url:"+realPath);
2.获取 web.xml中的参数:getInitparameter("param-name");
先配置web.xml中参数
1 <!-- servletcontext获取 web。xml中 上下文参数 --> 2 <context-param> 3 <param-name>info</param-name> 4 <param-value>200 ok </param-value> 5 </context-param>
再去获取
1 // 获取 web.xml中的参数 2 String info = servletContext.getInitParameter("info"); 3 System.out.println("获取web.xml中的上下文参数:"+info);
3.获取文件的数据,文件下载
4.获取某个文件夹下子文件夹和文件名:getResourcePaths
1 Set<String> resourcePaths = servletContext.getResourcePaths("/WEB-INF"); 2 Iterator<String> iterator = resourcePaths.iterator(); 3 while(iterator.hasNext()){ 4 String childPath = iterator.next(); 5 System.out.println("WEB-INF目录下的子文件夹和文件名:"+childPath); 6}
servletConext对象的创建和作用范围:每个 Java 虚拟机的每个“Web 应用程序”都有一个上下文。
服务器中每个web应用,拥有一个servletContext的实例,所有的servlet和jsp共享servletContext中的数据。在单个web应用中,所有的servlet和jsp共享servletContext中数据。如果跨浏览器获取数据,跨浏览器使用session获取数据无法获取,可以使用 ServletContext(应用域)的实例存取数据
【request、session、servletContext】作用域和作用域对象:
request作用域对象:一次请求和响应 ,在一次请求和响应内 所有的servlet和jsp共享request对象的数据
session作用域对象:一次会话,可以跨请求取值
servletcontext作用域对象:一个web应用,可以跨会话(跨浏览器)取值
// 测试跨浏览器访问值
servletContext.setAttribute("value", "我是web项目的老大,可以跨浏览器访问值的呢!!!!");
// 重定向到ok.jsp
response.sendRedirect(request.getContextPath()+"/ok.jsp");
代码:
TestServletContext.java
1 package boom.servletcontext; 2 3 import java.io.IOException; 4 import java.util.Iterator; 5 import java.util.Set; 6 7 import javax.servlet.ServletContext; 8 import javax.servlet.ServletException; 9 import javax.servlet.http.HttpServlet; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 13 public class TestServletContext extends HttpServlet { 14 @Override 15 protected void service(HttpServletRequest request, HttpServletResponse response) 16 throws ServletException, IOException { 17 // 获取ServletContext 18 ServletContext servletContext = this.getServletContext(); 19 //获取文件的真实路径 20 String realPath = servletContext.getRealPath("/index.jsp"); 21 System.out.println("url:"+realPath); 22 // 获取 web.xml中的参数 23 String info = servletContext.getInitParameter("info"); 24 System.out.println("获取web.xml中的上下文参数:"+info); 25 // 获取某个文件夹下子文件夹和文件名 26 Set<String> resourcePaths = servletContext.getResourcePaths("/WEB-INF"); 27 Iterator<String> iterator = resourcePaths.iterator(); 28 while(iterator.hasNext()){ 29 String childPath = iterator.next(); 30 System.out.println("WEB-INF目录下的子文件夹和文件名:"+childPath); 31 } 32 33 // 测试跨浏览器访问值 34 servletContext.setAttribute("value", "我是web项目的老大,可以跨浏览器访问值的呢!!!!"); 35 // 重定向到ok.jsp 36 response.sendRedirect(request.getContextPath()+"/ok.jsp"); 37 38 } 39 }