1.图解filter
2.filter是如何实现拦截的?
首先,建立一个java类,实现Filter接口。
public class LoginFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
// 1.先看session中有没有值
// 2.在看cookie中有没有值
// 3.放行
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse) res;
User user = (User)request.getSession().getAttribute("user");
if(user == null){
String requestURI = request.getRequestURI();
String requestString = request.getQueryString();
System.out.println(requestString);
System.out.println(requestURI);
// 将css和图片也放行
if(requestURI.contains("/servlet/LoginServlet") || requestURI.contains("/bootStrap/css") || requestURI.contains("/img")){
chain.doFilter(request, response);
}
else{
request.setAttribute("msg", "请先登录!!");
response.sendRedirect(request.getContextPath()+"/servlet/LoginServlet?servletMethod=login");
return;
}
}else{
chain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
其次,在web.xml中进行配置。
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.lxb.view.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.Listener
配置的过程中,是按顺序的,必须显示监听器->过滤器->servlet
1.建立一个类,实现HttpSessionListener
/**
* 用户的在线人数的监听
* @author bing
*
*/
public class OnlineUserCountListener implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent event) {
System.out.println("有客户的登录");
ServletContext application = event.getSession().getServletContext();
Object obj = application.getAttribute("onlineCount");
int onlineCount = 0;
if( obj == null ){
onlineCount = 1;
}else{
onlineCount = (Integer)obj +1;
}
application.setAttribute("onlineCount", onlineCount);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("有客户下线了");
ServletContext application = event.getSession().getServletContext();
Integer onlineCount = (Integer)application.getAttribute("onlineCount");
onlineCount = onlineCount -1;
application.setAttribute("onlineCount", onlineCount);
}
}
2.配置web.xml
<listener>
<listener-class>com.lxb.view.listener.OnlineUserCountListener</listener-class>
</listener>