01: /*
02: * Copyright 2002-2006 the original author or authors.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16:
17: package org.springframework.web.context.request;
18:
19: import org.springframework.ui.ModelMap;
20:
21: /**
22: * Interface for general web request interception. Allows for being applied
23: * to Servlet request as well as Portlet request environments, through
24: * building on the {@link WebRequest} abstraction.
25: *
26: * <p>This interface assumes MVC-style request processing: A handler gets executed,
27: * exposes a set of model objects, then a view gets rendered based on that model.
28: * Alternatively, a handler may also process the request completely, with no
29: * view to be rendered.
30: *
31: * <p>This interface is deliberatly minimalistic to keep the dependencies of
32: * generic request interceptors as minimal as feasible.
33: *
34: * <p><b>NOTE:</b> While this interceptor is applied to the entire request processing
35: * in a Servlet environment, it is by default only applied to the <i>render</i> phase
36: * in a Portlet environment, preparing and rendering a Portlet view. To apply
37: * WebRequestInterceptors to the <i>action</i> phase as well, set the HandlerMapping's
38: * "applyWebRequestInterceptorsToRenderPhaseOnly" flag to "false". Alternatively,
39: * consider using the Portlet-specific HandlerInterceptor mechanism for such needs.
40: *
41: * @author Juergen Hoeller
42: * @since 2.0
43: * @see ServletWebRequest
44: * @see org.springframework.web.servlet.DispatcherServlet
45: * @see org.springframework.web.servlet.handler.AbstractHandlerMapping#setInterceptors
46: * @see org.springframework.web.servlet.HandlerInterceptor
47: * @see org.springframework.web.portlet.context.PortletWebRequest
48: * @see org.springframework.web.portlet.DispatcherPortlet
49: * @see org.springframework.web.portlet.handler.AbstractHandlerMapping#setInterceptors
50: * @see org.springframework.web.portlet.handler.AbstractHandlerMapping#setApplyWebRequestInterceptorsToRenderPhaseOnly
51: * @see org.springframework.web.portlet.HandlerInterceptor
52: */
53: public interface WebRequestInterceptor {
54:
55: /**
56: * Intercept the execution of a request handler <i>before</i> its invocation.
57: * <p>Allows for preparing context resources (such as a Hibernate Session)
58: * and expose them as request attributes or as thread-local objects.
59: * @param request the current web request
60: * @throws Exception in case of errors
61: */
62: void preHandle(WebRequest request) throws Exception;
63:
64: /**
65: * Intercept the execution of a request handler <i>after</i> its successful
66: * invocation, right before view rendering (if any).
67: * <p>Allows for modifying context resources after successful handler
68: * execution (for example, flushing a Hibernate Session).
69: * @param request the current web request
70: * @param model the map of model objects that will be exposed to the view
71: * (may be <code>null</code>). Can be used to analyze the exposed model
72: * and/or to add further model attributes, if desired.
73: * @throws Exception in case of errors
74: */
75: void postHandle(WebRequest request, ModelMap model)
76: throws Exception;
77:
78: /**
79: * Callback after completion of request processing, that is, after rendering
80: * the view. Will be called on any outcome of handler execution, thus allows
81: * for proper resource cleanup.
82: * <p>Note: Will only be called if this interceptor's <code>preHandle</code>
83: * method has successfully completed!
84: * @param request the current web request
85: * @param ex exception thrown on handler execution, if any
86: * @throws Exception in case of errors
87: */
88: void afterCompletion(WebRequest request, Exception ex)
89: throws Exception;
90:
91: }
|