zoukankan      html  css  js  c++  java
  • Servlet 使用ServletContext共享数据,读取web.xml配置

    ServletContext对象

      session和cookie,对于每一个请求用户来说,都是不同的,因为要保证隐私安全。

      而有一些数据,可以让所有用户共享,此时就可以用ServletContext对象。只要在一个Servlet中设置了ServletContext属性值,那么本项目的中任意一个Servlet中都可以获取到设置的属性值。作用范围是所有Servlet,而有效期是服务器关闭之前。

    public class TestServletContext extends HttpServlet {
    	@Override
    	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		
    		// 获取Servlet的三种方式,获取的ServletContext对象是相同的。
    		//ServletContext context = this.getServletContext();
    		//context = req.getSession().getServletContext();
    		//ontext = this.getServletConfig().getServletContext();
    		
    		ServletContext context = this.getServletContext();
    		
    		// 设置属性值setAttribute(String name, Object object)
    		context.setAttribute("name", "张三");
    		
    		// 获取属性值,如果不存在,则返回null
    		String name  = (String)context.getAttribute("name");
    	}
    }
    

      

    使用ServletContext来获取web.xml中的配置项

      之前讲了可以使用Properties工具类来获取配置文件中的配置项,这里,同样可以使用ServletContext来实现。

      不过需要注意的是,ServletContext对象能够读取的配置项需要专门配置:

    # 下面创建了两个配置项,分别是name=张三,age=99
    <context-param>
    	<param-name>name</param-name>
    	<param-value>张三</param-value>
    </context-param>
    
    <context-param>
    	<param-name>age</param-name>
    	<param-value>99</param-value>
    </context-param>
    

      使用ServletContext读取配置的实例:

    ServletContext context = this.getServletContext();
    String name = (String)context.getInitParameter("name");
    int age = Integer.parseInt(context.getInitParameter("age"));
    System.out.println("从web.xml读取到全局配置如下:
    " + "name :" + name + "	 age :" + age);
    

      运行结果如下:

    从web.xml读取到全局配置如下:
    name :张三	 age :99
    

      

    从其他文件中读取数据

      读取数据的时候,有一个问题就是路径的问题,如果使用绝对路径,一旦服务器代码改变位置,路径就会错误,一般都会使用相对路径。

      相对路径有时候并不能准确的表示文件的位置,即使能都找到,在定位文件的时候也会有点麻烦,

      可以在指定路径的时候,以项目根路径为准,来定位文件。

    // 获取以项目webRoot目录为根目录,给定path的资源文件,返回绝对路径
    String path = context.getRealPath("/doc/intro.txt");
    System.out.println(path);
    // E:javaee.metadata.me_tcat85webappsMySitedocintro.txt
    
    // 获取webRoot下的资源流对象
    InputStream config = context.getResourceAsStream("/doc/intro.txt");
    // 实际是读webRoot/doc/intro.txt
    
    byte[] b = new byte[1000];
    int length = config.read(b);
    System.out.println(new String(b, 0, length));
    // 打印配置文件中的数据
    

      

  • 相关阅读:
    (原)Lazarus 异构平台下多层架构思路、DataSet转换核心代码
    (学)新版动态表单研发,阶段成果3
    (学) 如何将 Oracle 序列 重置 清零 How to reset an Oracle sequence
    (学)XtraReport WebService Print 报错
    (原)三星 i6410 刷机 短信 无法 保存 解决 办法
    (原) Devexpress 汉化包 制作工具、测试程序
    linux下网络配置
    apache自带ab.exe小工具使用小结
    Yii::app()用法小结
    PDO使用小结
  • 原文地址:https://www.cnblogs.com/-beyond/p/10080409.html
Copyright © 2011-2022 走看看