学习感受
今天学习了过滤器,感觉过滤器并不是很难理解。过滤器就是一个在请求的时候需要对请求进行预处理,然后到达服务器,在服务器得到响应之后,再进行后处理的一个过滤器。
构建过滤器的一般步骤
构建过滤器一般分为两步,第一步,实现过滤器类,主要是实现doFilter方法,第二步,在web.xml文件注册过滤器。
过滤器简单实例
下面,我们就两个简单的过滤器进行实现,一个是解决中文乱码问题,一个是解决用户登录的安全权限问题。 中文乱码问题:
public class CharacterEncodingFilter implements Filter{ private FilterConfig config; @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(config.getInitParameter("charset")); //请求拦截处理完成之后,要调用chain对象的doFilter方法告诉服务器请求拦截处理已经完成了 chain.doFilter(request, response); } @Override public void init(FilterConfig config) throws ServletException { this.config = config; } public FilterConfig getConfig() { return config; } public void setConfig(FilterConfig config) { this.config = config; }}复制代码
其次,我们在web.xml文件进行注册:
characterEncodingFilter filter.CharacterEncodingFilter charset UTF-8 复制代码 characterEncodingFilter /*
下面,我们进行下一个过滤器,解决用户登录安全权限问题:
package 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;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class SessionFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //做一个类型转换,将request转换成HTTPServletRequest的对象 HttpServletRequest hrequest = (HttpServletRequest)request; HttpServletResponse hresponse = (HttpServletResponse)response; //判断用户session中是否有用户的登录名称来判断用户是否进行登录操作 String loginUser = (String)hrequest.getSession().getAttribute("loginUser"); //如果值为null的话,说明用户没有登录,做一个强制的重定向,转到登录界面 if(loginUser == null) { hresponse.sendRedirect(hrequest.getContextPath()+"/index.jsp?flag=1"); return; }else { chain.doFilter(hrequest, hresponse); return; } } @Override public void init(FilterConfig filterConfig) throws ServletException { }}复制代码
web.xml文件注册过滤器
sessionFilter filter.SessionFilter 复制代码 sessionFilter /message.jsp