KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jdon > bussinessproxy > remote > http > InvokerServlet


1 /**
2  * Copyright 2003-2006 the original author or authors.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6
7        http://www.apache.org/licenses/LICENSE-2.0
8
9   * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */

15
16 package com.jdon.bussinessproxy.remote.http;
17
18 import java.io.IOException JavaDoc;
19 import java.io.ObjectInputStream JavaDoc;
20 import java.io.ObjectOutputStream JavaDoc;
21 import java.io.OutputStream JavaDoc;
22 import java.io.PrintWriter JavaDoc;
23 import java.util.ArrayList JavaDoc;
24 import java.util.Collection JavaDoc;
25
26 import javax.servlet.ServletContext JavaDoc;
27 import javax.servlet.ServletException JavaDoc;
28 import javax.servlet.http.HttpServlet JavaDoc;
29 import javax.servlet.http.HttpServletRequest JavaDoc;
30 import javax.servlet.http.HttpServletResponse JavaDoc;
31 import javax.servlet.http.HttpSession JavaDoc;
32
33 import com.jdon.bussinessproxy.TargetMetaDef;
34 import com.jdon.bussinessproxy.meta.MethodMetaArgs;
35 import com.jdon.container.ContainerWrapper;
36 import com.jdon.container.config.app.AppConfigureCollection;
37 import com.jdon.container.finder.ComponentKeys;
38 import com.jdon.container.finder.ServletContainerFinder;
39 import com.jdon.container.startup.ContainerSetupScript;
40 import com.jdon.controller.service.Service;
41 import com.jdon.controller.service.ServiceFacade;
42 import com.jdon.controller.service.ServiceFactory;
43
44 import com.jdon.util.Debug;
45 import com.jdon.util.StringUtil;
46
47 /**
48  * <p>Title: </p>
49  * <p>Description:
50  * 本类是æœ?务器端处ç?†è¿œç¨‹å®¢æˆ·ç«¯å?‘é€?的调用EJB请求。
51  *
52  * 本类功能也å?¯ä»¥ä½¿ç”¨Strutsçš„Action实现。
53  * æ?ƒé™?验è¯?是使用J2EE的基于Httpçš„Basic Auth.
54  *
55  * 使用本类å?¯ä»¥ä½œä¸ºä¸€ä¸ªå?•独的EJB网关æœ?务器。
56  *
57  * @author banq
58  */

59 public class InvokerServlet extends HttpServlet JavaDoc {
60
61   public final static String JavaDoc module = InvokerServlet.class.getName();
62   private ContainerSetupScript css = new ContainerSetupScript();
63   private final static ServletContainerFinder scf = new ServletContainerFinder();
64   /**
65    * 使用Picocontainer
66    * å°†jdonframework.xmlé…?置在web.xml中å?³å?¯
67    *
68    * @throws ServletException
69    */

70   public void init() throws ServletException JavaDoc {
71      ServletContext JavaDoc sc = this.getServletContext();
72      String JavaDoc configList = this.getServletConfig().getInitParameter("configList");
73      String JavaDoc[] configs = StringUtil.split(configList, ",");
74      for(int i = 0 ; i < configs.length; i ++){
75        Debug.logVerbose("[JdonFramework] locate a configuration in web.xml :" + configs[i], module);
76        css.prepare(configs[i], sc);
77      }
78   }
79
80   public void destroy() {
81     css.destroyed(this.getServletContext());
82   }
83
84   protected void doGet(HttpServletRequest JavaDoc request,
85                        HttpServletResponse JavaDoc response) throws ServletException JavaDoc,
86       IOException JavaDoc {
87     response.setContentType("text/html");
88     PrintWriter JavaDoc out = new PrintWriter JavaDoc(response.getOutputStream());
89     out.println("<html>");
90     out.println("<head><title>InvokerServlet</title></head>");
91     out.println("<body> ");
92     out.println(request.getRemoteUser());
93     out.println(" Welcome to login in !!</body></html>");
94     out.close();
95   }
96
97   protected void doPost(HttpServletRequest JavaDoc request,
98                         HttpServletResponse JavaDoc response) throws ServletException JavaDoc,
99       IOException JavaDoc {
100     if (request.getParameter("login") != null) {
101       //如果是login 显示欢迎信æ?¯æˆ–其它更新通知等信æ?¯
102
doGet(request, response);
103       return;
104     }
105     //从HttpServletRequest中获得传é€?的对象
106
HttpRequest httpRequest = getHttpServiceRequest(request);
107     if (httpRequest == null) return;
108     HttpResponse httpResponse = null;
109     try {
110       TargetMetaDef targetMetaDef = httpRequest.getTargetMetaDef();
111       String JavaDoc p_methodName = httpRequest.getMethodName();
112       Class JavaDoc[] paramTypes = httpRequest.getParamTypes();
113       Object JavaDoc[] p_args = httpRequest.getArgs();
114       
115       ServiceFacade serviceFacade = new ServiceFacade();
116       Service service = serviceFacade.getService(request);
117     
118       //将上述å?‚数打包到eJBMetaDef中
119
MethodMetaArgs methodMetaArgs = new MethodMetaArgs(p_methodName,
120           paramTypes, p_args);
121       Object JavaDoc object = service.execute(targetMetaDef,
122                                       methodMetaArgs,
123                                       request);
124       httpResponse = new HttpResponse(object);
125     } catch (Exception JavaDoc e) {
126       Debug.logError(e, module);
127       httpResponse = new HttpResponse(new Throwable JavaDoc(e));
128     } catch (Throwable JavaDoc te) {
129       Debug.logError(te, module);
130       httpResponse = new HttpResponse(te);
131     }
132
133     //Write the result in the http stream
134
HttpSession JavaDoc session = request.getSession(true);
135     response.addHeader("jsessionid", session.getId());
136     writeHttpServiceResponse(response, httpResponse);
137   }
138
139   /**
140    * åº?列化处ç?†ç»“æžœ
141    */

142   private void writeHttpServiceResponse(HttpServletResponse JavaDoc response,
143                                         HttpResponse httpResponse) throws
144       IOException JavaDoc {
145     OutputStream JavaDoc outputStream = response.getOutputStream();
146     ObjectOutputStream JavaDoc oos = new ObjectOutputStream JavaDoc(outputStream);
147     oos.writeObject(httpResponse);
148     oos.close();
149   }
150
151   /**
152    * 从请求信æ?¯ä¸­å??åº?列化
153    */

154   private HttpRequest getHttpServiceRequest(HttpServletRequest JavaDoc request) throws
155       IOException JavaDoc {
156     HttpRequest httpServiceRequest = null;
157     ObjectInputStream JavaDoc ois = null;
158     try {
159         ois = new ObjectInputStream JavaDoc(request.getInputStream());
160         httpServiceRequest = (HttpRequest) ois.readObject();
161     } catch (Exception JavaDoc e) {
162       Debug.logError(e, module);
163     }finally{
164         if (ois != null)
165            ois.close();
166     }
167     return httpServiceRequest;
168   }
169
170 }
171
Popular Tags