KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > caucho > server > dispatch > SingleThreadServletFilterChain


1 /*
2  * Copyright (c) 1998-2006 Caucho Technology -- all rights reserved
3  *
4  * This file is part of Resin(R) Open Source
5  *
6  * Each copy or derived work must preserve the copyright notice and this
7  * notice unmodified.
8  *
9  * Resin Open Source is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * Resin Open Source is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
17  * of NON-INFRINGEMENT. See the GNU General Public License for more
18  * details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with Resin Open Source; if not, write to the
22  * Free SoftwareFoundation, Inc.
23  * 59 Temple Place, Suite 330
24  * Boston, MA 02111-1307 USA
25  *
26  * @author Scott Ferguson
27  */

28
29 package com.caucho.server.dispatch;
30
31 import javax.servlet.FilterChain JavaDoc;
32 import javax.servlet.Servlet JavaDoc;
33 import javax.servlet.ServletException JavaDoc;
34 import javax.servlet.ServletRequest JavaDoc;
35 import javax.servlet.ServletResponse JavaDoc;
36 import javax.servlet.UnavailableException JavaDoc;
37 import java.io.IOException JavaDoc;
38
39 /**
40  * Represents the final servlet in a filter chain.
41  */

42 public class SingleThreadServletFilterChain implements FilterChain JavaDoc {
43   // servlet config
44
private ServletConfigImpl _config;
45   // servlet
46
private Servlet JavaDoc _servlet;
47
48   /**
49    * Create the filter chain servlet.
50    *
51    * @param servlet the underlying servlet
52    */

53   public SingleThreadServletFilterChain(ServletConfigImpl config)
54   {
55     if (config == null)
56       throw new NullPointerException JavaDoc();
57     
58     _config = config;
59   }
60   
61   /**
62    * Invokes the final servlet at the end of the chain.
63    *
64    * @param request the servlet request
65    * @param response the servlet response
66    *
67    * @since Servlet 2.3
68    */

69   public void doFilter(ServletRequest JavaDoc request,
70                        ServletResponse JavaDoc response)
71     throws ServletException JavaDoc, IOException JavaDoc
72   {
73     Servlet JavaDoc servlet = null;
74
75     synchronized (this) {
76       servlet = _servlet;
77       _servlet = null;
78     }
79     
80     if (servlet == null) {
81       try {
82         servlet = (Servlet JavaDoc) _config.createServlet(true);
83       } catch (ServletException JavaDoc e) {
84         throw e;
85       } catch (Exception JavaDoc e) {
86         throw new ServletException JavaDoc(e);
87       }
88     }
89     
90     try {
91       servlet.service(request, response);
92     } catch (UnavailableException JavaDoc e) {
93       _config.setInitException(e);
94       // application.killServlet(servlet, config);
95

96       throw e;
97     }
98
99     synchronized (this) {
100       if (_servlet == null) {
101         _servlet = servlet;
102         servlet = null;
103       }
104     }
105
106     if (servlet != null)
107       servlet.destroy();
108   }
109 }
110
Popular Tags