ServletContext对象
1、WEB容器在启动时,为每个web应用程序创建一个相应的ServletContext对象,它代表当前web应用,停掉服务器或者从服务器中删除某个web应用时被销毁。
2、得到servlet方式:
1)可通过ServletConfig.getServletContext方法获得ServletContext对象,即:
ServletContext context=this.getServletConfig().getServletContext;
2)现有的类继承HttpServlet,类里写:
context=this.getServletContext()
3、域就是容器,context域就是容器的范围,只要往容器里面放东西,整个web应用程序范围内都取得出来,如:this.getServletContext.setAttribute("xx",xx);设置的,别的servlet也能取到,要把数据带给1.jsp页面,不要用this.getServletContext.setAttribute("xx",xx);,因为存的数据被整个web应用程序共享,如果在跳转到1.jsp页面之前调用了别的servlet设置了this.getServletContext.setAttribute("xx",xx);跳转到2.jsp页面,会将之前容器中设置的数据覆盖,这样取不到想取的值
4、servletContext域:
1)这是一个容器
2)servletContext域就说明了这个容器作用范围,也就应用程序范围
5、应用:
1)多个servlet通过ServletContext对象实现数据共享
2)获取WEB应用的初始化参数
3)实现servlet的转发
4)利用ServletContext对象读取资源文件
6、配置文件通常有两种:.properties文件或.xml文件配置,数据之前没有关系用properties配置,数据之 间有关系用xml配置
配置文件(如src下面的db.properties)
1)通过servletContext读取:(常用)
InputStream in=this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"),
即使配置文件在src下,也不是通过src下路径读取的,因为Java工程是发布到服务器中的,读取配置文件实际上是服务器在读取,Java工程发布后在服务器中是以classes文件存在所以路径应为classes下db.properties所在的路径
路径可以看配置文件在文件夹里看它存在哪个位置
2)创建Properties对象:Properties props=new Properties();以map形式存储,如:键值对(username,*****),(password,******)......
3)通过流将获取到的路径中的信息读到对象中去:props.load(in);
4)读取配置信息,如:
String username=props.getProperty("username"); String password=props.getProperty("password");
通过传统方式读取:(不可行)
FileInputStream in = new FileInputStream("classes/db.properties"); 错误,读取不到,路径是相对于服务器中的java虚拟机的启动目录的路径,即相对的是虚拟机tomcat下的bin目录,若想访问,则每次需要在bin目录下创建一个classes的文件夹,将db.properties复制进去,此时通过传统方式就能读取到,所以在实际开发中最好不要用传统方式读取,应该用ServletContext读取;若想通过传统方式读取,可以通过ServletContext的getRealPath获得资源的绝对路径后再通过传统方式读取文件(当需要读取客户端穿过来的资源文件名称时可用这种方式)