<JavaWeb>Servlet接口与实现类(下)

Servlet共享配置信息

数据库的配置信息一般是有多个Servlet共享的,那么在这种情况下,上一份笔记中的方法已经不再适合了。我们需要一个更好的解决方案,那就是ServletContext对象。

<context-param>
    <param-name>GlobalData</param-name>
    <param-value>GlobalValue</param-value>
</context-param>

Servlet容器在启动时时会给每一个Servlet应用创建一个ServletContext对象,这个ServletContext对象是唯一的,并且代表了对应的web应用。这样,所有在同一个web应用中的Servlet访问的都是同一个ServletContext对象。在结构上,<context-param>标签和<servlet>标签同级,多个信息配置在不同的<context-param>中。

ServletContext ctx = this.getServletContext();
ctx.getInitParameter("name1");

以上方法都是建立在配置信息已知的前提下,如果我们想要共享的信息是动态的呢?

ServletContext ctx = this.getServletContext();
ctx.setAttribute("GlobalData1", "GlobalValue1");
(String)ctx.getAttribute("GlobalData1");
ctx.removeAttribute("GlobalData1");

注意访问Servlet的先后顺序。
如果我们想要读取的配置信息并不是保存在应用信息中,而是想要读取一个外部的配置信息,就需要使用其他的接口了。

ServletContext ctx = this.getServletContext();
//通过getResource的方法获取
try{
    URL url = ctx.getResource("/WEB-INF/classes/log4j.properties");//返回一个url对象
    InputStream in = url.openStream();
    String propertyValue = GeneralUtil.getPropery(key, in);
    System.out.println(propertyValue);
}catch(MalformedURLException e){
    e.printStackTrace();
}catch(IOException e){
    e.printStackTrace();
}

//通过getResourceAsStream的方法获取
InputStream in2 = ctx. getResourceAsSteam("/WEB-INF/classes/log4j.properties");
String p2 = GeneralUtil.getPropery(key, in2);
System.out.println(p2);

//通过getRealPath的方法获取,返回外部资源文件的绝对路径
String path = ctx.getRealPath("/WEB-INF/classes/log4j.properties");
File f = new File(path);
//转化为inputStream
InputStream in3 = new FileInputStream(f);
String p3 = GeneralUtil.getPropery(key, in3);

通过以上三个方法获取外部资源文件,结果都是相同的,只是过程不同而已。
而实际上,ServletContext不只是用来获取外部资源配置文件用的,它还可以实现Servlet转发,在以后的笔记中会详细说明。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,120评论 19 139
  • Servlet学习的大纲 servlet概念及相关接口简介 servet 执行过程 servlet映射路径 缺省s...
    奋斗的老王阅读 4,944评论 1 51
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,498评论 11 349
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,353评论 18 399
  • 需要实现一个简单的 PHP 长连接功能,使用 Swoole 作为最开始的尝试,转过来的一个 Swoole 的介绍:...
    马文Marvin阅读 3,644评论 0 5

友情链接更多精彩内容