<!-- 过滤器1,解决中文乱码 -->
<filter>
<!-- 名字随便起,但是类要写完整的带包的路径-->
<filter-name>encodingFitler</filter-name>
<filter-class>com.accp.filter.EcondingFilter</filter-class>
<!-- 获取初始化的一些参数-->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- 过滤器2,权限控制 -->
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.accp.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFitler</filter-name>
<!-- *表示匹配所有 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<!-- 过滤除login.jsp和register.jsp页面的 -->
<url-pattern>/page/*</url-pattern>
</filter-mapping>
这个是过滤器解决中文乱码的类
package com.accp.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 EcondingFilter implements Filter { private String charset = null; public void destroy() { // TODO Auto-generated method stub System.out.println("filter销毁"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub System.out.println("doFilter前"); //对请求的转码 request.setCharacterEncoding(charset); //对回应的转码 response.setCharacterEncoding(charset); chain.doFilter(request, response); System.out.println("doFilter后"); } public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub System.out.println("filter初始化"); //读取初始化filter的参数 charset=filterConfig.getInitParameter("encoding"); System.out.println(charset); } }
这个是过滤器控制用户权限的类package com.accp.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.HttpSession; public class LoginFilter implements Filter { public void destroy() { // TODO Auto-generated method stub System.out.println("filter销毁"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub System.out.println("doFilter前面"); //获取HttpServletRequest通过,它的实例获取一个session HttpSession session = ((HttpServletRequest)request).getSession(); //判断session中是否有数据 if(session.getAttribute("user")!=null){ System.out.println(session.getAttribute("user")); chain.doFilter(request, response); System.out.println("doFilter后"); }else{ String mes = "你还没有登录"; System.out.println(mes); request.setAttribute("mes", mes); request.getRequestDispatcher("../login.jsp").forward(request, response); } } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub System.out.println("filter被实例化"); } }
过滤器无需我们在程序中调用,每次当我们获取web请求时,会首先自动的进入过滤器类。