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读取到全局配置如下:\n" + "name :" + name + "\t age :" + age);
运行结果如下:
从web.xml读取到全局配置如下: name :张三 age :99
从其他文件中读取数据
读取数据的时候,有一个问题就是路径的问题,如果使用绝对路径,一旦服务器代码改变位置,路径就会错误,一般都会使用相对路径。
相对路径有时候并不能准确的表示文件的位置,即使能都找到,在定位文件的时候也会有点麻烦,
可以在指定路径的时候,以项目根路径为准,来定位文件。
// 获取以项目webRoot目录为根目录,给定path的资源文件,返回绝对路径 String path = context.getRealPath("/doc/intro.txt"); System.out.println(path); // E:\javaee\.metadata\.me_tcat85\webapps\MySite\doc\intro.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)); // 打印配置文件中的数据
如需转载,请注明文章出处,谢谢!!!