当前位置: 代码迷 >> Java Web开发 >> 怎么在Response到达浏览器之前拦截404异常,并修改其值为200
  详细解决方案

怎么在Response到达浏览器之前拦截404异常,并修改其值为200

热度:4985   发布时间:2013-02-25 21:09:41.0
如何在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
  相关解决方案