通过前面的学习,我们知道了JSP可以完成的功能Servlet都可以完成,而Servlet可以做的事JSP未必能做:过滤和监听
一.下面来了解下过滤器:
1.过滤器在web中的作用:
当需要限制用户访问某些资源或者在处理请求时提前处理某些资源时,过滤器的作用就显现出来了。
2.何为Servlet过滤器?
它是一种链式处理的已组件的形式绑定到web应用中的工具。
下图为它的工作原理:
我们通过实现javax.servlet.Filter接口来实现过滤器:
其中FilterChain接口的主要作用是将用户的请求向下传递给其他的过滤器或者servlet,从而形成链式过滤处理
二.下面我们通过实例来实现一个过滤器:
1.Filter代码:
FirstFilter.java
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.annotation.WebFilter;
/**
* Servlet Filter implementation class FirstFilter
*/
@WebFilter("/FirstFilter")
public class FirstFilter implements Filter {
private FilterConfig filterconfig;
/**
* Default constructor.
*/
public FirstFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
this.filterconfig=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
try{
System.out.println("客户端的请求经过这里!!");
chain.doFilter(request, response);
System.out.println("账号和密码请求处理经过这里");
}catch(ServletException e)
{
System.out.println("客户端请求失败");
}catch(IOException io)
{
System.out.println("账号密码请求失败");
}
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
this.filterconfig=fConfig;
// TODO Auto-generated method stub
}
}
2.web.xml编写:
<filter>
<filter-name>FirstFilter</filter-name>
<filter-class>Filter.FirstFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FirstFilter</filter-name>
<url-pattern>/*</url-pattern>// /*根目录下的表示所有的资源都过滤
</filter-mapping>
启动服务器,不论我们访问那个页面,都会先经过过滤器:
结果: