简述: JavaWeb中的监听器和过滤器他们的用法详解。
本文初发于 “曾晨de小站” zengchen233.cn,同步转载于此。
过滤器Filter
比如说写一个LoginDemo
用户登录之后才能进入主页!用户注销后就不能进入主页了!
用户登录之后,向Sesison中放入用户的数据
进入主页的时候要判断用户是否已经登录;要求:在过滤器中实现!
我们可以使用过滤器来过滤掉非法请求,示例代码如下:
package cn.zengchen233.filter;
import cn.zengchen233.util.Constant;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class SysFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void destroy() {
Filter.super.destroy();
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
if (req.getSession().getAttribute(Constant.USER_SESSION) == null) {
resp.sendRedirect("/500.jsp");
}
chain.doFilter(req, resp);
}
}
上述代码讲的是过滤掉/sys/*下面的全部请求,如果没有这个Session就会把你重定向到/500.jsp这么页面底下,完美解决了登陆问题,完整代码:LoginDemo。
监听器Listener
监听器可以用来监听很多事件的发生,一般用在gui编程当中,此处是web编程用来监听在线人数,示例代码:
package cn.zengchen233.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnlineCountListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
ServletContext ctx = se.getSession().getServletContext();
// System.out.println(se.getSession().getId());
Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
if (onlineCount == null) {
onlineCount = new Integer(1);
} else {
int count = onlineCount.intValue();
onlineCount = new Integer(count + 1);
}
ctx.setAttribute("OnlineCount",onlineCount);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext ctx = se.getSession().getServletContext();
// System.out.println(se.getSession().getId());
Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
if (onlineCount == null) {
onlineCount = new Integer(1);
} else {
int count = onlineCount.intValue();
onlineCount = new Integer(count - 1);
}
ctx.setAttribute("OnlineCount",onlineCount);
}
}
此处用到了装箱拆箱,这块地方还不怎么懂,还需要复习复习Java SE。