美文网首页
<JavaWeb>Servlet接口与实现类(下)

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

作者: 普通一般社会人 | 来源:发表于2016-04-19 03:15 被阅读164次

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转发,在以后的笔记中会详细说明。

相关文章

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

    Servlet共享配置信息 数据库的配置信息一般是有多个Servlet共享的,那么在这种情况下,上一份笔记中的方法...

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

    Servlet生命周期 我们如果想要在Servlet处理逻辑之前做一些准备工作,或者在Servlet实例被销毁之前...

  • Servlet规范总结

    Servlet接口 Servlet规范的核心接口即是Servlet接口,它是所有Servlet类必须实现的接口,在...

  • Servlet与Jsp(1)

    Servlet 实现原理Servlet接口使Servlet容器能将Servlet类载入内存,并在Servlet实例...

  • JavaWeb-Servlet

    Servlet 1. servlet的基本使用: 定义一个类,实现Servlet接口 实现接口中的抽象方法 配置S...

  • JavaWeb--Servlet体系结构

    Servlet->Servlet体系根接口GenericServlet->Servlet抽象实现类HttpServ...

  • Servlet

    最重要的是javax.servlet.Servlet接口Servlet就是一种实现了Servlet接口的类 Ser...

  • Servlet及容器

    狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,...

  • Servlet 实例

    Servlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接口的 Java 类。W...

  • 四、 Servlet详解

    1. Servlet核心接口和类 在Servlet体系结构中,除了实现Servlet接口,还可以通过继承Gener...

网友评论

      本文标题:<JavaWeb>Servlet接口与实现类(下)

      本文链接:https://www.haomeiwen.com/subject/fiialttx.html