1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts2.dispatcher.ng.filter;
22
23 import org.apache.struts2.StrutsStatics;
24 import org.apache.struts2.dispatcher.Dispatcher;
25 import org.apache.struts2.dispatcher.ng.PrepareOperations;
26 import org.apache.struts2.dispatcher.ng.ExecuteOperations;
27 import org.apache.struts2.dispatcher.ng.InitOperations;
28 import org.apache.struts2.dispatcher.mapper.ActionMapping;
29
30 import javax.servlet.*;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.servlet.http.HttpServletResponse;
33 import java.io.IOException;
34
35 /***
36 * Handles both the preparation and execution phases of the Struts dispatching process. This filter is better to use
37 * when you don't have another filter that needs access to action context information, such as Sitemesh.
38 */
39 public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter {
40 private PrepareOperations prepare;
41 private ExecuteOperations execute;
42
43 public void init(FilterConfig filterConfig) throws ServletException {
44 InitOperations init = new InitOperations();
45 try {
46 FilterHostConfig config = new FilterHostConfig(filterConfig);
47 init.initLogging(config);
48 Dispatcher dispatcher = init.initDispatcher(config);
49 init.initStaticContentLoader(config, dispatcher);
50
51 prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher);
52 execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);
53 } finally {
54 init.cleanup();
55 }
56
57 }
58
59 public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
60
61 HttpServletRequest request = (HttpServletRequest) req;
62 HttpServletResponse response = (HttpServletResponse) res;
63
64 try {
65 prepare.createActionContext(request, response);
66 prepare.assignDispatcherToThread();
67 prepare.setEncodingAndLocale(request, response);
68 request = prepare.wrapRequest(request);
69 ActionMapping mapping = prepare.findActionMapping(request, response);
70 if (mapping == null) {
71 boolean handled = execute.executeStaticResourceRequest(request, response);
72 if (!handled) {
73 chain.doFilter(request, response);
74 }
75 } else {
76 execute.executeAction(request, response, mapping);
77 }
78 } finally {
79 prepare.cleanupRequest(request);
80 }
81 }
82
83 public void destroy() {
84 prepare.cleanupDispatcher();
85 }
86 }