监听器和过滤器他们的用法其实和servlet很相似,都是通过配置文件进行映射,比如这个自定义的简单的一个 sessionListener,它的配置文件时这样的:
<listener>
<listener-class>com.yc.web.Listeners.SessionListener</listener-class>
</listener>
这个sessionListner是实现的javax.servlet.http包下的 HttpSessionListener接口:
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class SessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent se) {
//对session的创建的监听的计数统计.要在这里取到application
ServletContext application=se.getSession().getServletContext();
int count=0;
if(application.getAttribute("count")!=null){
count=(Integer)application.getAttribute("count");//判断属性是否为空,不为空则
}
count++;
application.setAttribute("count", count);
}
public void sessionDestroyed(HttpSessionEvent se) {
//对session的创建的监听的计数统计.要在这里取到application
ServletContext application=se.getSession().getServletContext();
int count=0;
if(application.getAttribute("count")!=null){
count=(Integer)application.getAttribute("count");//判断属性是否为空,不为空则
}
count--;
application.setAttribute("count", count);
}
}
这段代码实现的是实现对session的创建,销毁的监听,对session属性的监听可以实现 HttpSessionAttributeListener接口的方法实现。
通过这段代码,在session里得到jsp中的application,。就可以实现同一服务器在线人数的统计。(当然如果本机测试可以用两三个浏览器去试)。
下面是过滤器:
配置如下:
<filter>
<filter-name>CharactorFilter</filter-name>
<filter-class>com.yc.web.filters.CharactorFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharactorFilter</filter-name>
<url-pattern>/*</url-pattern><!-- 访问的映射通配符-->
</filter-mapping>
和一般的servlet很类似的配置方法。
package com.yc.web.filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CharacterFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse resp=(HttpServletResponse)response;
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
}
public void init(FilterConfig arg0) throws ServletException {
}
}
这段代码和上面的配置是表示对所有的页面进行字符集的设置过滤,即页面的额全部的HttpServletRequest HttpServletResponse的字符集都会被设置成utf-8字符集。