Error404Filter
package com.version3.interceptor;
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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Error404Filter implements Filter {
@Override
public void destroy() {
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse rep,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) rep;
Error404ResponseWrapper responseWrapper = new Error404ResponseWrapper(this, response);
chain.doFilter(request, responseWrapper);
if (responseWrapper.isFound()) {
return;
}
//String uri = request.getRequestURI();
//System.out.println(uri);
response.sendRedirect("/public/err404.jsp");
}
}
Error404ResponseWrapper
package com.version3.interceptor;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
class Error404ResponseWrapper extends HttpServletResponseWrapper {
private int status = SC_OK;
public Error404ResponseWrapper(Error404Filter error404Filter,
HttpServletResponse response) {
super(response);
}
@Override
public void sendError(int sc) throws IOException {
this.status = sc;
if (isFound()) {
super.sendError(sc);
} else {
super.setStatus(SC_OK);
}
}
@Override
public void sendError(int sc, String msg) throws IOException {
this.status = sc;
if (isFound()) {
super.sendError(sc, msg);
} else {
super.setStatus(SC_OK);
}
}
public void setStatus(int status) {
this.status = status;
super.setStatus(status);
}
@Override
public void reset() {
this.status = SC_OK;
super.reset();
}
public boolean isFound() {
return status != SC_NOT_FOUND;
}
}
web.xml配置
<filter>
<filter-name>404</filter-name>
<filter-class>com.version3.interceptor.Error404Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>404</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
原文章http://www.th7.cn/Program/java/201604/797711.shtml