1 16 17 package org.springframework.web.context.request; 18 19 import javax.servlet.ServletRequestEvent ; 20 import javax.servlet.ServletRequestListener ; 21 import javax.servlet.http.HttpServletRequest ; 22 23 import org.apache.commons.logging.Log; 24 import org.apache.commons.logging.LogFactory; 25 26 import org.springframework.context.i18n.LocaleContextHolder; 27 28 49 public class RequestContextListener implements ServletRequestListener { 50 51 private static final String REQUEST_ATTRIBUTES_ATTRIBUTE = 52 RequestContextListener.class.getName() + ".REQUEST_ATTRIBUTES"; 53 54 55 protected final Log logger = LogFactory.getLog(getClass()); 56 57 58 public void requestInitialized(ServletRequestEvent requestEvent) { 59 if (!(requestEvent.getServletRequest() instanceof HttpServletRequest )) { 60 throw new IllegalArgumentException ( 61 "Request is not an HttpServletRequest: " + requestEvent.getServletRequest()); 62 } 63 HttpServletRequest request = (HttpServletRequest ) requestEvent.getServletRequest(); 64 ServletRequestAttributes attributes = new ServletRequestAttributes(request); 65 request.setAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE, attributes); 66 LocaleContextHolder.setLocale(request.getLocale()); 67 RequestContextHolder.setRequestAttributes(attributes); 68 if (logger.isDebugEnabled()) { 69 logger.debug("Bound request context to thread: " + request); 70 } 71 } 72 73 public void requestDestroyed(ServletRequestEvent requestEvent) { 74 ServletRequestAttributes attributes = 75 (ServletRequestAttributes) requestEvent.getServletRequest().getAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE); 76 ServletRequestAttributes threadAttributes = 77 (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); 78 if (threadAttributes != null) { 79 if (attributes == null) { 81 attributes = threadAttributes; 82 } 83 RequestContextHolder.setRequestAttributes(null); 84 LocaleContextHolder.setLocale(null); 85 } 86 if (attributes != null) { 87 attributes.requestCompleted(); 88 if (logger.isDebugEnabled()) { 89 logger.debug("Cleared thread-bound request context: " + requestEvent.getServletRequest()); 90 } 91 } 92 } 93 94 } 95 | Popular Tags |