06-【servletconfig、servletContext 】

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 }
View Code

原文地址:https://www.cnblogs.com/cao-yin/p/9892526.html