⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 invokerservlet.java

📁 用jbuilder写的源程序
💻 JAVA
字号:
/**
 * Copyright 2003-2006 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */

package com.jdon.bussinessproxy.remote.http;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.jdon.bussinessproxy.TargetMetaDef;
import com.jdon.bussinessproxy.meta.MethodMetaArgs;
import com.jdon.container.ContainerWrapper;
import com.jdon.container.config.app.AppConfigureCollection;
import com.jdon.container.finder.ComponentKeys;
import com.jdon.container.finder.ServletContainerFinder;
import com.jdon.container.startup.ContainerSetupScript;
import com.jdon.controller.service.Service;
import com.jdon.controller.service.ServiceFacade;
import com.jdon.controller.service.ServiceFactory;

import com.jdon.util.Debug;
import com.jdon.util.StringUtil;

/**
 * <p>Title: </p>
 * <p>Description:
 * 本类是服务器端处理远程客户端发送的调用EJB请求。
 *
 * 本类功能也可以使用Struts的Action实现。
 * 权限验证是使用J2EE的基于Http的Basic Auth.
 *
 * 使用本类可以作为一个单独的EJB网关服务器。
 *
 * @author banq
 */
public class InvokerServlet extends HttpServlet {

  public final static String module = InvokerServlet.class.getName();
  private ContainerSetupScript css = new ContainerSetupScript();
  private final static ServletContainerFinder scf = new ServletContainerFinder();  
  /**
   * 使用Picocontainer
   * 将jdonframework.xml配置在web.xml中即可
   *
   * @throws ServletException
   */
  public void init() throws ServletException {
	 ServletContext sc = this.getServletContext();
     String configList = this.getServletConfig().getInitParameter("configList");
     String[] configs = StringUtil.split(configList, ",");
     for(int i = 0 ; i < configs.length; i ++){
       Debug.logVerbose("[JdonFramework] locate a configuration in web.xml :" + configs[i], module);
       css.prepare(configs[i], sc);       
     }    
  }

  public void destroy() {
    css.destroyed(this.getServletContext());
  }

  protected void doGet(HttpServletRequest request,
                       HttpServletResponse response) throws ServletException,
      IOException {
    response.setContentType("text/html");
    PrintWriter out = new PrintWriter(response.getOutputStream());
    out.println("<html>");
    out.println("<head><title>InvokerServlet</title></head>");
    out.println("<body> ");
    out.println(request.getRemoteUser());
    out.println(" Welcome to login in !!</body></html>");
    out.close();
  }

  protected void doPost(HttpServletRequest request,
                        HttpServletResponse response) throws ServletException,
      IOException {
    if (request.getParameter("login") != null) {
      //如果是login 显示欢迎信息或其它更新通知等信息
      doGet(request, response);
      return;
    }
    //从HttpServletRequest中获得传送的对象
    HttpRequest httpRequest = getHttpServiceRequest(request);
    if (httpRequest == null) return; 
    HttpResponse httpResponse = null;
    try {
      TargetMetaDef targetMetaDef = httpRequest.getTargetMetaDef();
      String p_methodName = httpRequest.getMethodName();
      Class[] paramTypes = httpRequest.getParamTypes();
      Object[] p_args = httpRequest.getArgs();
      
      ServiceFacade serviceFacade = new ServiceFacade();
      Service service = serviceFacade.getService(request);
    
      //将上述参数打包到eJBMetaDef中
      MethodMetaArgs methodMetaArgs = new MethodMetaArgs(p_methodName,
          paramTypes, p_args);
      Object object = service.execute(targetMetaDef,
                                      methodMetaArgs,
                                      request);      
      httpResponse = new HttpResponse(object);
    } catch (Exception e) {
      Debug.logError(e, module);
      httpResponse = new HttpResponse(new Throwable(e));
    } catch (Throwable te) {
      Debug.logError(te, module);
      httpResponse = new HttpResponse(te);
    }

    //Write the result in the http stream
    HttpSession session = request.getSession(true);
    response.addHeader("jsessionid", session.getId());
    writeHttpServiceResponse(response, httpResponse);
  }

  /**
   * 序列化处理结果
   */
  private void writeHttpServiceResponse(HttpServletResponse response,
                                        HttpResponse httpResponse) throws
      IOException {
    OutputStream outputStream = response.getOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(outputStream);
    oos.writeObject(httpResponse);
    oos.close();
  }

  /**
   * 从请求信息中反序列化
   */
  private HttpRequest getHttpServiceRequest(HttpServletRequest request) throws
      IOException {
    HttpRequest httpServiceRequest = null;
    ObjectInputStream ois = null;
    try {
        ois = new ObjectInputStream(request.getInputStream());        
        httpServiceRequest = (HttpRequest) ois.readObject();
    } catch (Exception e) {
      Debug.logError(e, module);
    }finally{
        if (ois != null)
           ois.close();
    }
    return httpServiceRequest;
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -