Filter 过滤器、监听器
Filter:过滤器 ,用来过滤网站的数据;
- 处理中文乱码
- 登录验证…
开发步骤:
-
导包 pom.xml
<!--Servlet依赖--> <dependency> <groupid>javax.servlet</groupid> <artifactid>javax.servlet-api</artifactid> <version>3.1.0</version> </dependency> <!--JSP依赖--> <dependency> <groupid>javax.servlet.jsp</groupid> <artifactid>javax.servlet.jsp-api</artifactid> <version>2.3.3</version> </dependency> <!--JSTL表达式的依赖--> <dependency> <groupid>javax.servlet.jsp.jstl</groupid> <artifactid>jstl-api</artifactid> <version>1.2</version> </dependency> <!--standard标签库--> <dependency> <groupid>taglibs</groupid> <artifactid>standard</artifactid> <version>1.1.2</version> </dependency> <!--链接数据库--> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>5.1.47</version> </dependency>
-
编写过滤器
-
导包不要错(javax.servlet)
-
实现Filer接口,重写对应方法即可
public class Filer implements Filter { //初始化 public void init(FilterConfig filterConfig) throws ServletException { System.out.println("初始化成功~~~~!"); } //初始化: web服务器启动时就初始化,随时等待过滤器对象的出现 //Chain 链 //1.过滤器中的所有代码,在过滤特定请求时都会执行 //2.必须要让过滤器继续执行 //chain.doFilter(servletRequest, servletResponse) public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { servletRequest.setCharacterEncoding("utf-8"); servletResponse.setCharacterEncoding("utf-8"); servletResponse.setContentType("text/html; charset=UTF-8"); System.out.println("执行前..."); chain.doFilter(servletRequest, servletResponse);//让请求继续走,如果不写拦截停止 System.out.println("执行后...."); } //销毁 web服务器关闭的时候才会被销毁 public void destroy() { System.out.println("已被销毁~~~~!"); } }
在web.xml中配置Filter映射
<filter> <filter-name>filer</filter-name> <filter-class>com.zhu.Filer.Filer</filter-class> </filter> <filter-mapping> <!-- /*会过滤所有的请求--> <!--servlet/*会过滤所有servlet下的所有请求--> <filter-name>filer</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
监听器
监测网站在线人数(基于session)
1、编写一个监听器,实现HttpSessionListener
//统计网站在线人数,统计session
public class OnlineListen implements HttpSessionListener{
/**
* 监听session新创建时执行的方法 *
@param se
*/
//创建session监听
//一旦创建session就会触发一次这个事件
@Override
public void sessionCreated(HttpSessionEvent se){
ServletContext sc = se.getSession().getServletContext();
System.out.println("sessionId:"+ se.getSession().getId());
Integer onlineCount =(Integer)sc.getAttribute("onlineCount");
if(onlineCount ==null){
onlineCount =1;
}else{
onlineCount++;
}
sc.setAttribute("onlineCount",onlineCount);
}
/**
* 监听session销毁时执行方法 *
@param se
*/
@Override
public void sessionDestroyed(HttpSessionEvent se){
ServletContext sc = se.getSession().getServletContext();
Integer onlineCount =(Integer)sc.getAttribute("onlineCount");
if(onlineCount ==null){
onlineCount =0;
}else{
onlineCount--;}
System.out.println("销毁session了--监听到");
sc.setAttribute("onlineCount",onlineCount);
}
}
web.xml中注册监听器
<!--监听器-->
<listener>
<listener-class>com.bug.listener.OnlineListen</listener-class>
</listener>
jsp页面
<h1>当前有<span><%=this.getServletConfig().getServletContext().getAttribute("OnlineCout")%></span>人在线</h1>
session销毁方法
- 手动销毁 getSession().invalidate();
- 自动销毁 在web.xml中设置超时时间
<session-config>
<session-timeout>1</session-timeout>
</session-config>