Filter
六十七 创建Http Filter
1.JavaWeb-过滤器
(1)Filter的基本功能是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理的前后实现一些特殊的功能
(2)在Servlet API中定义了三个接口类来供开发人员编写Filter程序:Filter.FilterChain,FilterConfig
(3)Filter程序是一个实现了Filter接口的java类,与Servlet程序相似,它由Servlet容器进行调用和 执行
(4)Filter程序需要在web.xml文件中进行注册和设置它所能拦截的资源:Filter程序可以拦截Jsp,Servlet,静态图片文件和静态Htmlw文件
2.Filter:
Filter拦截的顺序和filtermapping在web.xml中的顺序有关
1)Filter是什么
JavaWeb的一个重要组件,可以对发送到Servlet的请求进行拦截,并对响应进行拦截。
Filter是实现了Filtere接口的Java类
Filter需要在web.xml文件中进行配置和映射
2)如何创建一个Filter,并跑起来
1.创建一个Filter类:实现FIlter接口
2.在web.xml进行注册和映射。其中url-pattern 指定该Filter可以拦截哪些资源,即通过哪些url访问到Filter
3)Filter 相关API:
1. init(filterConfig):类似于Servlet的init方法,在创建Filter对象后,立即被调用,且只被调用一次,Filter对象在Servlet容器加载当前WEB应用时被创建。该方法对当前的Filter进行初始化操作,Filter是单例的。
FilterConfig类似于ServletConfig
可以在web.xml文件中配置当前Filter的初始化参数,配置方式类似于Servlet
2.doFilter():真正Filter的逻辑代码需要编写在该方法中,每次拦截都会调用该方法。
FIiterChain:Filter链,多个Filter可以构成一个filter链
–doFilter():把请求传给Filter链的下一个Filter.若当前Filter是Filter的最后的一个Filter,则把请求给目标Servlet.
–多个Filter拦截的顺序和配置的顺序有关,靠前的先被调用。
3.destory();
Login.jsp
在这里插入代码片
<form action="hello.jsp" method="post">
username:<input type="text" name="username"/>
password:<input type="password" name="passwprd"/>
<input type="submit" value="submit"/>
</form>
UserNameFilter
String initUser=filterConfig.getInitParameter("username");
String username=request.getParameter("username");
if(!initUsre.equals(username)){
request.setAttribute("message","用户名不正确");
request.getRequestDispatcher("/login.jsp").forward(request,response);
return;
}
chain.doFilter(request,response);
PasswordFilter
String initUser=filterConfig.getInitParameter("password");
String username=request.getParameter("password");
if(!initUsre.equals(username)){
request.setAttribute("message","密码不正确");
request.getRequestDispatcher("/login.jsp").forward(request,response);
return;
}
chain.doFilter(request,response);
hello.jsp
Hello:${param.username}