日期:2014-05-17  浏览次数:20731 次

如何在Response到达浏览器之前拦截404错误,并修改其值为200
1. 项目中采用了dojo框架, dojo.requre 加载时会加载一些不存在的资源文件
2. 在firebug中可以看到很多404错误
3. 这个404错误对其它组件有影响,必须修改它

现在要做的就是在Response到达浏览器之前拦截404,如果404,就修改其值为200, 

 但我发现我添加的代码不生效, 在firebug中任然能看到404

下面是我的代码,请大家看一下哪里有问题

Java code


package com.cisco.My.server.admin.filter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.apache.log4j.Logger;


public class My404Filter implements Filter {
    
    public static Logger log=Logger.getLogger("My404Filter.class");

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain chain) throws IOException, ServletException {
        
        HttpServletRequest request=(HttpServletRequest) req;
        
        String urlStr=request.getRequestURI().toString();
        
        log.info("urlStr="+urlStr);
        
        MyHttpServletResponseWrapper response = new MyHttpServletResponseWrapper(
                (HttpServletResponse) resp);
        
        chain.doFilter(request, response);
        
        int status=response.getStatus();
        
        log.info("status="+status);
        
        if(status==404 ){
            
          log.info("find 404");
          response.setStatus(HttpServletResponse.SC_OK);
          response.getWriter().println("<html><body><p></p></body></html>");
          
          
        }

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        

    }
    
    

}





------解决方案--------------------
跟你是什么框架无关,404是http协议,在web服务器或者web容器中返回,要拦截404可以去web服务器或容器里面配置。
------解决方案--------------------
自己配置404错误页面就行

<error-page>
<error-code>400</error-code>
<location>/error.jsp</location>
</error-page>

如果是静态文件404,那就不是项目的问题了

看下服务器配置相关的
------解决方案--------------------
楼上这种方法可以采用,先设个<%@ page language="java" import="java.util.*" pageEncoding="gbk" errorPage="errors.jsp"%>页面,然后再写个errors.jsp页面用于跳转的,开头这么写<%@page pageEncoding="gbk" isErrorPage="true" %>

最后在body里面随便你写,想写200就写200