使用过滤器,处理404错误

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

猜你喜欢

转载自blog.csdn.net/u012965203/article/details/53065939
今日推荐