1.new-> filter
例子1:设置编码过滤器:自动设置成utf-8
有用的方法:doFilter() 方法
web.xml里面有filter的配置
<!-- 转换乱码 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在doFilter()方法中写方法:
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain){
HttpServletRequest req = (HttpServletRequest)request;
req.setCharacterEncoding("utf-8");
chain.doFilter(request,response);
}
web.xml 中的配置:
<url-pattern></url-pattern>`
表示哪些请求会经过过滤器
/* 表示全部经过
/文件/* 表示 “文件”中的网页全部经过过滤器
如果有的电脑不能直接创建filter
可通过创建普通class创建filter
然后要实现Filter-javax.servlet.Filter接口
实现之后少了一个构造方法,doFilter()方法中缺少了一个 arg.doFilter(request,response)操作,这句话的意思是继续之前的请求向下执行
在web.xml中配置
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>cn.com.fmm.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/filter/*</url-pattern>
</filter-mapping>
然后,在doFilter()方法中写方法
每一次请求会走一次filter,request.getRequestDispatcher().forward()请求转发是一次请求,会产生一次,response.setRedirect()重定向是第二次
例子2:验证登录
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
//获取session并获取登录信息
HttpServletRequest request =(HttpServletRequest) arg0;
HttpServletResponse response =(HttpServletResponse) arg1;
String username = (String)request.getSession().getAttribute("username");
System.out.println("useruser"+username);
if(username !=null){
//继续之前的请求 向下执行
arg2.doFilter(arg0, arg1);
}else{
response.sendRedirect("../Login.jsp");
}
}