(18)servletContext应用:获取web应用的初始化参数、实现servlet转发、利用servletContext对象读取资源文件

1.为什么需要servletContext?
①访问某个网站时候,往往都会看到网站的首页面显示您是第几位浏览者(网站计数器),这是如何实现的?
【根据之前的学习,可以用文件或者数据库,缺点:对数据库或者文件访问过于频繁。
优点:简单,容易实现。】
②显示论坛在线人数
【放入数据库或者文件中,对数据库或者文件访问频繁】

解决之道:servletContext
这里写图片描述

servletContext:
1)servletContext是在服务器端创建的
2)servletContext是被所有客户端共享
3)servletContext是当web应用启动的时候,自动创建
4)servletContext是当web应用关闭/Tomcat关闭/对web应用reload会造成servletContext销毁。

这里写图片描述
可以实现跨浏览器、跨机器

WEB容器在启动时,它会为每个WEB应用都创建一个对应的servletcontext对象,它代表当前的web应用。
由于一个web应用中的所有servlet共享同一个ServletContext对象,因此servlet对象之间可以通过servletontext对象来实现通讯。servletContext对象通常也被称为context域对象。公共聊天室就会用到它。

对servletcontext用法小结:
获取:this.getServletContext; (建议用这个)、this.getServletConfig.getServletContext();
//添加属性
servletcontext.setAttribute(string,object);
//取出属性
servletcontext.getAttribute(“属性名”);
//删除
servletcontext.removeAttribute(“属性名”);

servletContext应用:
①获取web应用的初始化参数

 <!-- 配置该项目所有的servlet均可以使用的参数 ,写在servlet域外面-->
 <context-param>
    <param-name>sex</param-name>
    <param-value>famale</param-value>
 </context-param>

如何获取:String sex=this.getServletContext().getInitParameter("sex");

②实现servlet转发

//目前我们学的跳转到下一个页面:法一和法二区别:法一可以任意转向,转向在浏览器;法二只能在此项目内,转发在服务器
        //方法一:response.sendRedirect("/web应用名/资源名");
        //方法二:request.getRequestDispatcher("/资源名").forward(request, response);
        //1.如果:request.setAttribute("name", "haha");//希望下一个页面可以使用属性值,则只能用getRequestDispatcher
        //2.如果:session.setAttribute("name", "haha");//希望下一个页面可以使用属性值,两者均可用,推荐用getRequestDispatcher
        //3.若希望跳转到本web外的URL,应使用sendRedirect

        //方法三:其效果和方法二同,直到这种用法即可。
        this.getServletContext().getRequestDispatcher("/资源url").forward(request, response);

③利用servletContext对象读取资源文件
1)读取资源文件(读web目录下和WEB-INF目录下的文件)

//首先读取到文件[读WEB-INF目录下的文件]
        InputStream inputStream=this.getServletContext().getResourceAsStream("dbinfor.properties");

        //创建properties
        Properties pro=new Properties();
        pro.load(inputStream);
        out.println("<br/>");
        out.println("BookName="+pro.getProperty("BookName"));

2)读取文件路径

//读取一个文件的全路径
        String path=this.getServletContext().getRealPath("/images/1.png");
        out.println("<br/>");
        out.println("图片的全路径:"+path);

注意文件在src下,通过如上方法,并不能读到。应该使用类加载器来读取。

使用servletContext注意事项
因为存在servletContext中的数据会长时间的保存在服务器端,会占用内存,因此建议不要向servletContext中放过大的数据。

posted @ 2017-09-14 13:28  测试开发分享站  阅读(95)  评论(0编辑  收藏  举报