您的位置:首页 > 其它

web17天过滤器,监听器

2017-08-23 23:41 267 查看

1.过滤器

什么是过滤器:Servlet过滤器跟Servlet 十分相似,但它具有拦截客户端(浏览器)请求的功能,Servlet过滤器可以改变请求中的内容。

接口方法:init() doFilter() destroy()

常用功能:

1.设置字符集
private static final String DEFAULT_ENCODING  = "UTF-8";
private String currentEncoding;
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(currentEncoding);
response.setCharacterEncoding(currentEncoding);
chain.doFilter(request, response);
}

/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
String encoding = fConfig.getInitParameter("encoding");
currentEncoding = encoding == null ? DEFAULT_ENCODING :encoding;
}
2.过滤客户端传输的请求
String username = request.getParameter("username");
System.out.println(username);
if(username == "zhangsan") {
chain.doFilter(request, response);
}else {
HttpServletResponse hsr = (HttpServletResponse) response;
hsr.sendError(403);
}


url匹配

1. 精准匹配:如:/index.do
2. 路径匹配:如/index/*,/webapp/index/1,/webapp/index/2
3. 扩展匹配:*.jsp
4. 优先级规则:先精准后再模糊、/*
5. /*.action这样会报错


2.监听器

主要监听的事件

常用功能统计在线人数

列子:

1.监听人数
public void sessionCreated(HttpSessionEvent se) { // 启动 会话的时候+1
// TODO Auto-generated method stub
System.out.println("HttpSessionEvent created");
HttpSession session = se.getSession();
session.setMaxInactiveInterval(5);// 防止关闭后不触发session 给session设置一个触发时间
ServletContext ctx = session.getServletContext();// 获取上下文
AtomicInteger counter = (AtomicInteger) ctx.getAttribute("counter");// 获取上下文中counter属性
int total = counter.incrementAndGet();// 获取当前值自增
System.out.println(total);
}

public void sessionDestroyed(HttpSessionEvent se) {
// TODO Auto-generated method stub
System.out.println("HttpSession Destroyed");
HttpSession session = se.getSession();
int time = session.getMaxInactiveInterval();
System.out.println(time);// session 间隔时间
ServletContext ctx = session.getServletContext();
AtomicInteger counter = (AtomicInteger) ctx.getAttribute("counter");
int total = counter.decrementAndGet();// 获取当前的值,并自减
System.out.println(total);
}

public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
System.out.println("ServletContextEvent");
ServletContext contextEvent = sce.getServletContext();// 获取上细纹
contextEvent.setAttribute("counter", new AtomicInteger(0));// 线程安全的设置计数常量
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet