1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.mortbay.jetty.servlet;
16
17 import java.util.Enumeration;
18
19 import javax.servlet.Filter;
20 import javax.servlet.FilterConfig;
21 import javax.servlet.ServletContext;
22
23 import org.mortbay.jetty.Handler;
24 import org.mortbay.log.Log;
25
26
27
28
29
30 public class FilterHolder
31 extends Holder
32 {
33
34
35
36
37 public static int dispatch(String type)
38 {
39 if ("request".equalsIgnoreCase(type))
40 return Handler.REQUEST;
41 if ("forward".equalsIgnoreCase(type))
42 return Handler.FORWARD;
43 if ("include".equalsIgnoreCase(type))
44 return Handler.INCLUDE;
45 if ("error".equalsIgnoreCase(type))
46 return Handler.ERROR;
47 throw new IllegalArgumentException(type);
48 }
49
50
51 private transient Filter _filter;
52 private transient Config _config;
53
54
55
56
57 public FilterHolder()
58 {
59 }
60
61
62
63
64 public FilterHolder(Class filter)
65 {
66 super (filter);
67 }
68
69
70
71
72 public FilterHolder(Filter filter)
73 {
74 setFilter(filter);
75 }
76
77
78 public void doStart()
79 throws Exception
80 {
81 super.doStart();
82
83 if (!javax.servlet.Filter.class
84 .isAssignableFrom(_class))
85 {
86 String msg = _class+" is not a javax.servlet.Filter";
87 super.stop();
88 throw new IllegalStateException(msg);
89 }
90
91 if (_filter==null)
92 _filter=(Filter)newInstance();
93
94 _filter = getServletHandler().customizeFilter(_filter);
95
96 _config=new Config();
97 _filter.init(_config);
98 }
99
100
101 public void doStop()
102 {
103 if (_filter!=null)
104 {
105 try
106 {
107 destroyInstance(_filter);
108 }
109 catch (Exception e)
110 {
111 Log.warn(e);
112 }
113 }
114 if (!_extInstance)
115 _filter=null;
116
117 _config=null;
118 super.doStop();
119 }
120
121 public void destroyInstance (Object o)
122 throws Exception
123 {
124 if (o==null)
125 return;
126 Filter f = (Filter)o;
127 f.destroy();
128 getServletHandler().customizeFilterDestroy(f);
129 }
130
131
132 public synchronized void setFilter(Filter filter)
133 {
134 _filter=filter;
135 _extInstance=true;
136 setHeldClass(filter.getClass());
137 if (getName()==null)
138 setName(filter.getClass().getName());
139 }
140
141
142 public Filter getFilter()
143 {
144 return _filter;
145 }
146
147
148 public String toString()
149 {
150 return getName();
151 }
152
153
154
155
156 class Config implements FilterConfig
157 {
158
159 public String getFilterName()
160 {
161 return _name;
162 }
163
164
165 public ServletContext getServletContext()
166 {
167 return _servletHandler.getServletContext();
168 }
169
170
171 public String getInitParameter(String param)
172 {
173 return FilterHolder.this.getInitParameter(param);
174 }
175
176
177 public Enumeration getInitParameterNames()
178 {
179 return FilterHolder.this.getInitParameterNames();
180 }
181 }
182
183
184
185 }
186
187
188
189
190