码迷,mamicode.com
首页 > 其他好文 > 详细

ServletContext

时间:2018-10-06 22:06:47      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:generic   创建   根目录   文件中   对象   文件   inf   继承   let   

ServletContext
  在ServletConfig接口中,有一个getServletContext方法可以获取一个ServletContext对象,那么ServletContext到底有什么作用呢?ServletContext是一个接口,也是是一个域对象,而且是最大的域对象,tomcat会为每一个web项目创建一个ServletContext对象,并且在服务器启动时就创建它,直到服务器关闭,这个对象才会被销毁,既然是域对象它必然也有如下方法:

  • Object getAttribute(String var1);
  • void setAttribute(String var1, Object var2);
    •   注意如果重复设置同一个值,那么新的值会覆盖旧的值
  • void removeAttribute(String var1);
  • Enumeration<String> getAttributeNames();

  在所有的Servlet中都可以获取到这个项目唯一的ServletContext对象,我们可以使用它在多个Servlet中传递数据,一个Servlet可以往其中添加数据,另一个Servlet可以拿到上一个Servlet添加的树据,除了使用ServletConfig接口中的方法,我们还可以使用如下方法获取ServletContext:

  • HttpSession中的getServletContext()方法
  • GenericServlet中的getServletContext()方法,这个方法其实也是使用了ServletConfig
  • ServletContextEvent中的getServletContext()方法,

  所以我们在一个继承了HttpServlet的Servlet中可以使用两种方法获取ServletContext,
  this.getServletConfig().getServletContext()或者this.getServletConfig()

获取应用初始化参数
  注意这个应用初始化参数是与整个项目相关的,不是与某一个特定Servlet相关的,所有的Servlet都可以使用ServletContext来获取应用初始化参数,而Servlet初始化参数,是与某一个Servlet相关的。可以在web.xml文件中配置应用初始化参数,配置如下:

<context-param>
<param-name>p1</param-name>
<param-value>v1</param-value>
</context-param>
<context-param>
<param-name>p2</param-name>
<param-value>v2</param-value>
</context-param>

  然后我们就可以在Servlet中获取到配置的参数

1 ServletContext servletContext = this.getServletContext();
2 System.out.println(servletContext.getInitParameter("p1"));
3 System.out.println(servletContext.getInitParameter("p2"));
4 // 获取所有初始化参数的名字
5 Enumeration<String> initParameterNames = servletContext.getInitParameterNames();
6 while (initParameterNames.hasMoreElements()) {
7     System.out.println(initParameterNames.nextElement());
8 }

 

我们还可以使用ServletContext 来获取web应用下的资源
获取文件的真实路径:

1 ServletContext servletContext = this.getServletContext();
2 // D:\JavaWeb\FirstWeb\out\artifacts\FirstWebApp_war_exploded\index.jsp
3 System.out.println(servletContext.getRealPath("index.jsp"));

需要注意的是ServletContext 是以web根目录作为相对目录的

 

还可以获取资源流

1 ServletContext servletContext = this.getServletContext();
2 InputStream in = servletContext.getResourceAsStream("index.jsp");
3 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
4 String s;
5 while ((s = bufferedReader.readLine()) != null) {
6     System.out.println(s);
7 }

以上这段代码会将web目录下的index.jsp文件打印到控制台上

 

还可以获取指定目录下的所有资源路径

ServletContext servletContext = this.getServletContext();
// 方法参数要以“/”开头
Set<String> set = servletContext.getResourcePaths("/WEB-INF");
// [/WEB-INF/classes/, /WEB-INF/web.xml]
System.out.println(set);

 

ServletContext

标签:generic   创建   根目录   文件中   对象   文件   inf   继承   let   

原文地址:https://www.cnblogs.com/yusiming/p/9748666.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!