1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.filter;
17
18 import java.io.IOException;
19
20 import javax.servlet.Filter;
21 import javax.servlet.FilterChain;
22 import javax.servlet.FilterConfig;
23 import javax.servlet.ServletException;
24 import javax.servlet.ServletRequest;
25 import javax.servlet.ServletResponse;
26 import javax.servlet.http.HttpServletRequest;
27 import javax.servlet.http.HttpServletResponse;
28
29 import org.seasar.cubby.controller.ActionProcessor;
30 import org.seasar.cubby.controller.ActionResultWrapper;
31 import org.seasar.cubby.controller.ThreadContext;
32 import org.seasar.framework.container.S2Container;
33 import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
34 import org.seasar.framework.log.Logger;
35
36
37
38
39
40
41
42
43
44
45
46 public class CubbyFilter implements Filter {
47
48
49 private static final Logger logger = Logger.getLogger(CubbyFilter.class);
50
51
52
53
54 public void init(final FilterConfig config) throws ServletException {
55 }
56
57
58
59
60 public void destroy() {
61 }
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 public void doFilter(final ServletRequest req, final ServletResponse res,
81 final FilterChain chain) throws IOException, ServletException {
82 final HttpServletRequest request = new CubbyHttpServletRequestWrapper(
83 (HttpServletRequest) req);
84 final HttpServletResponse response = (HttpServletResponse) res;
85 ThreadContext.setRequest(request);
86 try {
87 final S2Container container = SingletonS2ContainerFactory
88 .getContainer();
89 final ActionProcessor processor = (ActionProcessor) container
90 .getComponent(ActionProcessor.class);
91 final ActionResultWrapper actionResultWrapper = processor.process(
92 request, response);
93 if (actionResultWrapper != null) {
94 actionResultWrapper.execute(request, response);
95 } else {
96 chain.doFilter(request, response);
97 }
98 } catch (final Exception e) {
99 if (e instanceof IOException) {
100 throw (IOException) e;
101 } else if (e instanceof ServletException) {
102 throw (ServletException) e;
103 } else {
104 logger.log(e);
105 throw new ServletException(e);
106 }
107 } finally {
108 ThreadContext.remove();
109 }
110 }
111
112 }