在这之前一直对filter感到陌生,有点细思极恐的感觉~~终于下定决心来学习一下,欢迎拍砖~~
Filter的主要作用是实现对HttpServletRequest的预处理,也可以对HttpServletResponse的后期处理。二者的分界线就是chain.doFilter()。
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet。
过滤器的作用描述
- 在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest 。
- 根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和数据。
- 在HttpServletResponse 到达客户端之前,拦截HttpServletResponse 。
- 根据需要检查HttpServletResponse ,可以修改HttpServletResponse 头和数据。
【创建Filter】
创建Filter类实现Filter接口;在web.xml中注册filter。两步走……
在 web 应用程序启动时,web 服务器将根据 web.xml 文件中的配置信息来创建每个注册的 Filter 实例对象,并将其保存在服务器的内存中
- init() Init 方法在 Filter 生命周期中仅执行一次,web 容器在调用 init 方法时
- destory() 在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。
- doFilter() Filter 链的执行 。
在配置文件中的配置等同servlet的配置。
【参考】http://www.oschina.net/question/565065_86538
【ServletContext】
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。
【作用】
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
1. 实现数据的共享 。通过setAttribute()/getAttribute
2. 获取WEB应用的初始化参数。获取在web.xml中的初始化参数
1 <context-param> 2 3 <param-name>url</param-name> 4 5 <param-value>jdbc:mysql://localhost:3306/4g</param-value> 6 7 </context-param>
3. 获取相关资源
1 /*获取ServletContext对象*/ 2 3 ServletContext context = this.getServletContext(); 4 5 //第一种方式 6 7 URL url = context.getResource("WEB-INF/classes/db.properties"); 8 9 InputStream is = url.openStream(); 10 11 //第二种方式 12 13 /*读取db.properties文件*/ 14 15 String path =context.getRealPath("WEB-INF/classes/db.properties"); 16 17 /*根据文件的路径 构建文件对象*/ 18 19 File file = new File(path); 20 21 /*根据file文件对象 创建输入流*/ 22 23 InputStream is = new FileInputStream(file);
【参考】http://blog.csdn.net/qiqiongran_luck/article/details/6889037
【ServeletConfig】
将配置信息封装为ServletConfig~它对应着web.xml文件中的标签。调用Servlet的init方法时,该对象作为参数一并传入。调用Init()方法的时候获取该对象,然后使用其中的getInitParameter()方法来获取配置文件中的参数配置。