1. 程式人生 > >Web 專案工程中獲取全域性Request物件

Web 專案工程中獲取全域性Request物件

          日常開發過程中有很多資訊是存在於Session物件中的,而session物件的獲取需要request物件,但是在沒有請求的普通類中如何獲取request則成了很多問題的根源,我們通常的解決辦法是使用過濾器Filter通過Filter可以實現request物件全域性化。
package org.dbzy.analyse.utils;

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 RequestFilter implements Filter {
	public static ThreadLocal<HttpServletRequest> threadLocalRequest = new ThreadLocal<HttpServletRequest>();
	public static ThreadLocal<HttpServletResponse> threadLocalResponse = new ThreadLocal<HttpServletResponse>();

	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		threadLocalRequest.set((HttpServletRequest) arg0);
		threadLocalResponse.set((HttpServletResponse) arg1);
		arg2.doFilter(arg0, arg1);
	}

	public void destroy() {
	}

	public void init(FilterConfig arg0) throws ServletException {
	}
}

在程式碼中通過RequestFilter.threadLocalRequest.get(),即可取得對應的request物件。

同時在web.xml中配置Filter。

        <filter>
		<filter-name>RequestFilter</filter-name>
		<filter-class>Filter類全路徑</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>RequestFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>