Servlet过滤器和监听器总结
2016-10-24 17:02
351 查看
1. Servlet 过滤器
过滤器具有拦截请求的功能,可以改变请求的内容。过滤器过滤的组件包括Servlet、html和jsp等。
过滤器链也就是多个过滤器,请求会按照web.xml中的配置的顺序进行处理。
1.1 生命周期
init(): 初始化,容器被启动时就会调用该方法。
doFilter(): 过滤处理,chain.doFilter()用于将过滤后的请求传递给下个过滤器,如果此过滤器已经是过滤链中最后一个过滤器,那么,请求将传送给目标资源。
destroy(): 释放资源
Notice: 过滤器可以在Servlet被调用之前截获该调用;能够在Servlet被调用之后截获该调用。如下图所示:
1.2 创建于配置
public class FilterOne implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("=======Filter init======="); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("=======doFilter start======="); filterChain.doFilter(servletRequest, servletResponse); System.out.println("=======doFilter end======="); } @Override public void destroy() { System.out.println("=======Filter Destroy======="); } }
<filter> <!-- 过滤器名称 --> <filter-name>FilterOne</filter-name> <!-- 过滤器类名 --> <filter-class>com.study.filter.FilterOne</filter-class> </filter> <filter-mapping> <!-- 过滤器名称 --> <filter-name>FilterOne</filter-name> <!-- 过滤器URL映射 --> <url-pattern>/*</url-pattern> </filter-mapping>
1.3 实例:字符编码过滤器
public class CharactorFilter implements Filter { volatile String encoding = null; //字符编码 public void init(FilterConfig filterConfig) throws ServletException { encoding = filterConfig.getInitParameter("encoding"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if(encoding != null){ request.setCharacterEncoding(encoding); //设置request的编码格式 response.setContentType("text/html;charset="+encoding); //设置response字符编码 } chain.doFilter(request, response); } public void destroy() { encoding = null; } }
//web.xml <filter> <filter-name>CharactorFilter</filter-name> <filter-class> com.study.filter.CharactorFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharactorFilter</filter-name> <!-- 过滤所有链接 --> <url-pattern>/*</url-pattern> </filter-mapping>
2. Servlet 监听器
监听器的作用是监听Web容器的有效事件,因此它是由容器管理。利用Listener接口监听在容器中的某个执行程序。2.1 简介
2.2 创建与配置
public class MyContentListener implements ServletContextListener{ //To Do }
//web.xml <listener> <listener-class> com.study.listener.MyContentListener </listener-class> </listener>
2.3 实例:统计在线人数
//用来存储在线用户和对在线用户进行增加和移除的操作 public class UserInfoList { private static UserInfoList user = new UserInfoList(); private Vector vector = null; public UserInfoList(){ this.vector = new Vector(); } public static UserInfoList getInstance(){ return user; } public boolean addUserInfo(String user){ if(user != null){ this.vector.add(user); return true; }else{ return false; } } public Vector getList(){ return vector; } public void removeUserInfo(String user){ if(user != null){ vector.remove(user); } } }
//有对象加入session时,会调用valueBound();有对象被移除session时,会调用valueUnbound() public class UserInfoTrace implements HttpSessionBindingListener { private volatile String user; private UserInfoList list = UserInfoList.getInstance(); public UserInfoTrace(){ user = ""; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } @Override public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) { System.out.println("上线"+this.user); } @Override public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) { System.out.println("下线"+this.user); if(user != ""){ list.removeUserInfo(this.user); } } }
//login.jsp: 登陆界面 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Login</title> </head> <body> <form action="showUser.jsp" method="post"> username: <input type="text" name="username"/><br/> <input type="submit" value="提交"/> <input type="reset" value="重置"/> </form> </body> </html>
//showUser.jsp 显示在线用户名单界面 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <%@page import="java.util.*"%> <%@page import="com.study.listener.*" %> <head> <title>show user</title> </head> <body> <% UserInfoList list = UserInfoList.getInstance(); UserInfoTrace ut = new UserInfoTrace(); String name = request.getParameter("username"); ut.setUser(name); session.setAttribute("list",ut); list.addUserInfo(ut.getUser()); session.setMaxInactiveInterval(10); %> <textarea rows="8" cols="20"> <% Vector vector = list.getList(); if(vector != null && vector.size() > 0){ for(int i = 0; i<vector.size(); i++){ out.println(vector.elementAt(i)); } } %> </textarea> </body> </html>
//web.xml <listener> <listener-class> com.study.listener.UserInfoTrace </listener-class> </listener>
相关文章推荐
- Servlet过滤器和监听器知识总结
- Servlet过滤器和监听器知识总结
- Servlet过滤器和监听器知识总结
- Servlet过滤器和监听器知识总结
- servlet 过滤器和监听器总结
- Servlet过滤器和监听器知识总结
- Servlet过滤器和监听器知识总结(转)
- Servlet过滤器和监听器知识总结
- Servlet过滤器和监听器知识总结(转)
- Servlet过滤器和监听器知识总结
- 使用servlet过滤器和监听器
- servlet最常用的过滤器总结
- Servlet开发(2)-----过滤器和监听器
- Servlet开发(2)-----过滤器和监听器
- jsp servlet中的过滤器Filter配置总结
- Servlet监听器总结
- Servlet中的过滤器(拦截器)Filter与监听器Listener的作用和区别
- Servlet中过滤器、监听器的区别
- 过滤器,监听器,servlet
- Jsp/Servlet-----------第5章 过滤器和事件监听器