目录 1、ServletContext概述 2、获取ServletContext 3、域对象的功能 4、获取项目初始化参数 5、获取资源相关方法 6 练习:访问量统计 ===================================== 1、ServletContext概述 服务器会为每个项目创建一个ServletContext对象,一个项目只有一个ServletContext上下文对象! 我们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据! 与服务器同寿!!!这个对象在Tomcat启动时就创建,在Tomcat关闭时才会被销毁死去! 作用: 在整个Web应用的动态资源之间共享数据! 例如:在AServlet中向ServletContext对象中保存一个值,然后在BServlet中就可以获取这个值,这就是共享数据了。 2、获取ServletContext * ServletConfig 接口中 getServletContext()方法; * GenericServlet 类中 getServletContext()方法; 在Servlet接口中获取ServletContext对象: * 在void init(ServletConfig config)中: ServletContext context = config.getServletContext(); ServletConfig类的getServletContext()方法可以用来获取ServletContext对象; 在GenericeServlet或HttpServlet中获取ServletContext对象: * GenericServlet类有getServletContext()方法,所以可以直接使用this.getServletContext()来获取; public class MyServlet implements Servlet { public void init(ServletConfig config) { ServletContext context = config.getServletContext(); } … } public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) { ServletContext context = this.getServletContext(); } } 3、域对象的功能 ServletContext是JavaWeb四大域对象之一: * PageContext; * ServletRequest; * HttpSession; * ServletContext; 所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操作数据的方法: * void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性。 * Object getAttribute(String name):用来获取ServletContext中的数据,当前在获取之前需要先去存储才行。 * void removeAttribute(String name):用来移除ServletContext中的域属性,如果参数name指定的域属性不存在, 那么本方法什么都不做; * Enumeration getAttributeNames():获取所有域属性的名称; 4、获取项目初始化参数 * 一个Servlet只能获取自己的初始化参数,不能获取别人的,即初始化参数只为一个Servlet准备! * 可以配置公共的初始化参数,为所有Servlet而用!这需要使用ServletContext才能使用! 还可以使用ServletContext来获取在项目web.xml文件中配置的应用初始化参数! 注意,项目初始化参数与Servlet初始化参数不同: web.xml <web-app> ... <context-param> [配置了两个应用初始化参数] <param-name>paramName1</param-name> <param-value>paramValue1</param-value> </context-param> <context-param> <param-name>paramName2</param-name> <param-value>paramValue2</param-value> </context-param> </web-app> ServletContext context = this.getServletContext(); [获取ServletContext对象] String value1 = context.getInitParameter("paramName1"); String value2 = context.getInitParameter("paramName2"); Enumeration names = context.getInitParameterNames();[获取所有应用初始化参数名称] while(names.hasMoreElements()) { System.out.println(names.nextElement()); //会得到 paramName1,paramName2 } 5、获取资源相关方法 5.1、获取真实路径(*****) 还可以使用ServletContext对象来获取Web应用下的资源,例如在hello应用的根目录下创建a.txt文件, 现在想在Servlet中获取这个资源,就可以使用ServletContext来获取。 * 获取a.txt的真实路径:String realPath = servletContext.getRealPath(“/a.txt”), realPath的值为a.txt文件的绝对路径:F:\tomcat6\webapps\hello\a.txt; * 获取b.txt的真实路径:String realPath = servletContext.getRealPath(“/WEB-INF/b.txt”); 5.2、获取资源流 不只可以获取资源的路径,还可以通过ServletContext获取资源流,即把资源以输入流的方式获取: * 获取a.txt资源流:InputStream in = servletContext.getResourceAsStream(“/a.txt”); * 获取b.txt资源流:InputStream in = servletContext.getResourceAsStream(“/WEB-INF/b.txt”); 5.3、获取指定目录下所有资源路径 还可以使用ServletContext获取指定目录下所有资源路径,例如获取/WEB-INF下所有资源的路径: Set set = context.getResourcePaths("/WEB-INF"); System.out.println(set); [/WEB-INF/lib/, /WEB-INF/classes/, /WEB-INF/b.txt, /WEB-INF/web.xml] 注意,本方法必须以“/”开头!!! 6 练习:访问量统计 一个项目中所有的资源被访问都要对访问量进行累加! 创建一个int类型的变量,用来保存访问量,然后把它保存到ServletContext的域中,这样可以保存所有的Servlet都可以访问到! 相信各位一定见过很多访问量统计的网站,即“本页面被访问过XXX次”。因为无论是哪个用户访问指定页面, 都会累计访问量,所以这个访问量统计应该是整个项目共享的!很明显,这需要使用ServletContext来保存访问量。 ServletContext application = this.getServletContext(); [获取ServletContext对象] Integer count = (Integer)application.getAttribute("count") [获取ServletContext对象中的count属性]; if(count == null) { count = 1; [如果在ServletContext中不存在count属性,那么设置count的值为1,表示第一次被访问。] } else { count++; [如果在ServletContext中存在count属性,说明以前被访问过,那么让count在原来的基础上加1。]; } response.setContentType("text/html;charset=utf-8"); // response.setHeader("Content-Type","text/html;charset=utf-8"); 设置头信息(文本类型和编码),等同于上面 response.getWriter().print("<h1>本页面一共被访问" + count + "次!</h1>")[向客户端响应本页面被访问的次数。]; application.setAttribute("count", count);[覆盖保存count的值到ServletContext对象中。]
ServletContext(重要)
猜你喜欢
转载自blog.csdn.net/weixin_42472048/article/details/81607786
今日推荐
周排行