• 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));
    // 打印配置文件中的数据
    

      

  • 相关阅读:
    php 删除指定文件夹
    php 批量进行复制文件
    php 导入/导出 csv 文件
    Java8 Nashorn JavaScript引擎
    Java8 Optional类
    Java8数据流
    Java8默认方法
    异常的其他问题
    package和import语句_5
    继承和权限控制_1
  • 原文地址:https://www.cnblogs.com/-beyond/p/10080409.html
Copyright © 2020-2023  润新知