一.Filter过滤器
Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
1.xml配置
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.dmzj.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.Filter类
package com.dmzj.filter;
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;
public class EncodingFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain filterChain) throws IOException, ServletException {
req.setCharacterEncoding("UTF-8");
filterChain.doFilter(req, resp);
resp.setCharacterEncoding("UTF-8");
System.out.println();
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
3.参数初始化(init-param)
xml配置
<filter>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
类
@Override
public void init(FilterConfig arg0) throws ServletException {
String name = arg0.getInitParameter("encoding");
System.out.println("+++++++++++"+name+"++++++++++++");
}
二.listener监听器
域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器。这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同。
在web.xml中的加入语句
<listener>
<listener-class>com.dmzj.listener.SeesionListener</listener-class>
</listener>
1.在实例类中实现HttpSessionBindingListener接口(绑定实例类)
该接口有两个抽象方法:
@Override
public void valueBound(HttpSessionBindingEvent arg0) {
Count.count++;
}
@Override
public void valueUnbound(HttpSessionBindingEvent arg0) {
Count.count--;
}
2.创建listener类
package com.dmzj.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class SeesionListener implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent event) {
//需要session获取上下文getServletContext()
ServletContext sc = event.getSession().getServletContext();
Object count = sc.getAttribute("count");
Integer count1 = 0;
if (count==null) {
count1 = 1;
}else {
count1 = (Integer) count;
count1 ++;
}
sc.setAttribute("count", count1);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
ServletContext sc = event.getSession().getServletContext();
Object count = sc.getAttribute("count");
Integer count1 = 0;
if (count==null) {
count1 = 0;
}else {
count1 = (Integer) count;
count1--;
}
sc.setAttribute("count", count1);
}
}
在JSP中的调取:
<%
Integer count = (Integer)session.getServletContext().getAttribute("count");
out.print(count);
%>