Filter in JSP

来源:互联网 发布:java相除保留两位小数 编辑:程序博客网 时间:2024/05/17 04:38

最近学习了JSP的相关知识,先来说一下Filter!

Filter是Servlet2.3和JSP1.2才新增加进来的 功能.Filter字面意思就是过滤器,当用户的请求到达指定网页之前,可以先利用过滤器来改变这些请求的内容或检查相应请求,反之执行响应也是同样的道理.

Filter可行的运用方法如下:

统一的认证处理

对用户的请求做检查记录等

监视或对用户所传递的参数做前期处理

改变图象文件的格式

对响应做编码的动作及压缩处理

对XML的输出使用XSLT来转换

Filter主要通过RequestDispatcher的forward(),include()或HttpServletResponse的sendRedirect(),sendError()等方法来转向其他网页的动作.通过在web.xml中使用<dispatcher>元素,来设定Filter所对应的请求方式.

1.REQUEST默认

<dispatcher>REQUEST</dispatcher>

2.FORWARD

<dispatcher>FORWARD</dispatcher>

3.INCLUDE

<dispatcher>INCLUDE</dispatcher>

4.ERROR

<dispatcher>ERROR</dispatcher>

最重要的配置文件web.xml

<filter>

<filter-name>filter-name</filter-name>

<filter-class>package.class-name</filter-class>

<init-param>

<param-name>param-name</param-name>

<param-value>param-value</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>filter-name</filter-name>

<url-pattern>/*</url-pattern>

<dispatcher>dispatcher-type</dispatcher>

</filter-mapping>

Filter例子:

 

package package-name;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SessionChecker implements Filter{
    
private ServletContext context;
    
private String targetURI;
    
public void init(FilterConfig config) throws ServletException{
    context
=config.getServletContext();
    targetURI
=config.getInitParameter("targetURI");
    }

    
    
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException{
    HttpServletRequest httpRequest
=(HttpServletRequest)request;
    HttpServletResponse httpResponse
=(HttpServletResponse)response;
    HttpSession session
=httpRequest.getSession(false);
    
    
if(session!=null){
    String passed
=(String)session.getAttribute("passed");
    
if(passed.equals("true")){
    chain.doFilter(httpRequest,httpResponse);
    
return;
    }

    
else if(passed.equals("passing")){
    
if(new String(httpRequest.getRequestURI()).equals("/hello/LoginChecker")){
    chain.doFilter(httpRequest,httpResponse);
    
return;
    }

    }

    
else{}
    session.removeAttribute(
"passed");
    }

    StringBuffer requestURL
=httpRequest.getRequestURL();
    String query
=httpRequest.getQueryString();
    
if(query!=null)
    requestURL.append(query);
    httpRequest.setAttribute(
"originalURI",new String(requestURL));
    
    httpRequest.getRequestDispatcher(targetURI).forward(httpRequest,httpResponse);
    }

    
    
public void destroy(){}
}