Filter 是加强版的Servelt,就像人一样,一开始都是单独的个体,后来为了自己,做医生,警察等不同的职业
java 也是差不多的吧
开始servlet ,输出不好使,于是有了jsp作为输出
需要提前判断用户是否请求合理,于是有了Filter
Filter 有这几种方法
init() 初始化
doFilter()操作
destroy()毁灭
需要注意得是
doFilter() 中有个
chain.doFilter()
之前是对客户端执行
之后是对服务器操作的
Filter是在servelt 处理前,做处理,别称为拦截器
package ff;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
/**
* Servlet Filter implementation class LogFilter
*/
@WebFilter(filterName = "log", urlPatterns = { "/*" })//filterName 名字 urlPatterns 拦截范围
public class LogFilter implements Filter {
private FilterConfig config; //自己添加的属性,用于获取其他数据
/**
* Default constructor.
*/
public LogFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
this.config=null;
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
// pass the request along the filter chain
ServletContext context=this.config.getServletContext(); //可用于纪录日子
HttpServletRequest hrequest=(HttpServletRequest)request; //转换为HttpServeltRequest 获取路径
System.out.println(hrequest.getServletPath());
chain.doFilter(request, response);
System.out.println("ok");
System.out.println(hrequest.getRequestURI());//将数据发送的请求的页面 如果要判断是否权限合理,可以用sesion 如果不合理,重定向,后名的chain.filter()就省去了
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
this.config=fConfig;
}
}
之前使用注释里做的
其下面试试web.xml 怎么配置
为了方便,吧@webFilter 注释掉,直接使用这个类
web.xml 添加
<filter>
<filter-name>log</filter-name>
<filter-class>ff.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>log</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>