1publicclassRequestContextListenerimplementsServletRequestListener{2privatestatic final StringREQUEST_ATTRIBUTES_ATTRIBUTE=RequestContextListener.class3.getName()+".REQUEST_ATTRIBUTES";45publicvoidrequestInitialized(ServletRequestEvent requestEvent){6if(!(requestEvent.getServletRequest()instanceofHttpServletRequest)){7thrownewIllegalArgumentException(8"Request is not an HttpServletRequest: "9+ requestEvent.getServletRequest());10}1112HttpServletRequest request =(HttpServletRequest) requestEvent
13.getServletRequest();14ServletRequestAttributes attributes =newServletRequestAttributes(15 request);16 request.setAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE, attributes);17LocaleContextHolder.setLocale(request.getLocale());18RequestContextHolder.setRequestAttributes(attributes);19}2021publicvoidrequestDestroyed(ServletRequestEvent requestEvent){22ServletRequestAttributes attributes =null;23Object reqAttr = requestEvent.getServletRequest().getAttribute(24REQUEST_ATTRIBUTES_ATTRIBUTE);25if(reqAttr instanceofServletRequestAttributes){26 attributes =(ServletRequestAttributes) reqAttr;27}28RequestAttributes threadAttributes =RequestContextHolder29.getRequestAttributes();30if(threadAttributes !=null){31LocaleContextHolder.resetLocaleContext();32RequestContextHolder.resetRequestAttributes();33if((attributes ==null)34&&(threadAttributes instanceofServletRequestAttributes)){35 attributes =(ServletRequestAttributes) threadAttributes;36}37}38if(attributes !=null)39 attributes.requestCompleted();40}41}4243public abstract interfaceServletRequestListenerextendsEventListener{44public abstract voidrequestDestroyed(45ServletRequestEvent paramServletRequestEvent);4647public abstract voidrequestInitialized(48ServletRequestEvent paramServletRequestEvent);49}5051publicinterfaceEventListener{52}53545556publicclassServletRequestEventextendsEventObject{57privatestatic final long serialVersionUID = 1L;58private final transient ServletRequest request;5960publicServletRequestEvent(ServletContext sc,ServletRequest request){61super(sc);62this.request= request;63}6465publicServletRequestgetServletRequest(){66returnthis.request;67}6869publicServletContextgetServletContext(){70return((ServletContext)super.getSource());71}72}73747576publicclassEventObjectimplementsjava.io.Serializable{7778privatestatic final long serialVersionUID = 5516075349620653480L;7980/**
81 * The object on which the Event initially occurred.
82 */83protected transient Object source;8485/**
86 * Constructs a prototypical Event.
87 *
88 * @paramsource The object on which the Event initially occurred.
89 * @exception IllegalArgumentException if source is null.
90 */91publicEventObject(Object source){92if(source ==null)93thrownewIllegalArgumentException("null source");9495this.source= source;96}9798/**
99 * The object on which the Event initially occurred.
100 *
101 * @return The object on which the Event initially occurred.
102 */103publicObjectgetSource(){104return source;105}106107/**
108 * Returns a String representation of this EventObject.
109 *
110 * @return A a String representation of this EventObject.
111 */112publicStringtoString(){113returngetClass().getName()+"[source="+ source +"]";114}115}