Spring MVC 4 获取 Request 和 Reponse 对象方法

这里主要说一下在非Controller层中如何获取Response对象的方法,以前在项目开发过程当中,第三方类库须要用到Response对象,因而度娘寻找如何获取该对象,有如下几种方式都不行,没有去查源码,应该是reponse对象没有再被暴露出来,顺道贴一下网上的方法。java

1. 经过spring提供的RequestContextHolder在非contrller层获取request和response对象spring

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

HttpServletResponse response = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();

HttpServletResponse response = ((ServletWebRequest)RequestContextHolder.getRequestAttributes()).getResponse();

ServletContext context = ContextLoader.getCurrentWebApplicationContext().getServletContext();

    该方法不必定有效,根据Spring版本自行寻找问题,如今要说的是另一种通用的方法。ide

2.经过拦截器加载线程的方式线程

这个文件用于加载线程,同时建立、获取、设置、移除HttpServletRequest和HttpServletResponse对象。code

/**
 * 根据拦截器进行加载当前线程的HttpResponse 和 HttpRequest 对象
 * 在非Controller层获取Http对象信息
 */
public class RequestResponseContext {
	
	private static ThreadLocal<HttpServletRequest> REQUEST_CHREADLOCAL = new ThreadLocal<HttpServletRequest>();
	private static ThreadLocal<HttpServletResponse> REPONSE_THREADLOCAL = new ThreadLocal<HttpServletResponse>();
	
	public static void setRquest(HttpServletRequest request){
		REQUEST_CHREADLOCAL.set(request);
	}
	
	public static HttpServletRequest getRequest(){
		return REQUEST_CHREADLOCAL.get();
	}
	
	public static void removeRequest(){
		REQUEST_CHREADLOCAL.remove();
	}
	
	public static void setResponse(HttpServletResponse response){
		REPONSE_THREADLOCAL.set(response);
	}
	
	public static HttpServletResponse getResponse(){
		return REPONSE_THREADLOCAL.get();
	}
	
	public static void removeResponse(){
		REPONSE_THREADLOCAL.remove();
	}
	
}

拦截器,继承HandlerInterceptorAdapter,在建立以前和结束后,要将对象存入和移除。对象

/**
 * Response和Request拦截器,主要用于获取Response
 * 经过拦截器保存当前的请求的对象信息进行处理
 */
public class HttpServletResponseInterceptor extends HandlerInterceptorAdapter{

	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		RequestResponseContext.removeRequest();
		RequestResponseContext.removeResponse();
	}

	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		RequestResponseContext.setRquest(request);
		RequestResponseContext.setResponse(response);
		return true;
	}
}

 

若有其余方法,望广大网友告知。继承

相关文章
相关标签/搜索