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

📄 invokerservlet.java

📁 《JAVA实用系统开发指南》随书光盘源代码
💻 JAVA
字号:
package com.jdon.bussinessproxy.remote.http;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;

import com.jdon.bussinessproxy.ServiceServerFactory;
import com.jdon.bussinessproxy.EJBDefinition;
import com.jdon.bussinessproxy.web.session.HttpSessionProxy;

import com.jdon.util.Debug;

/**
* 本类是服务器端处理远程客户端发送的调用EJB请求。
* 本类功能也可以使用Struts的Action实现。
 * 权限验证是使用J2EE的基于Http的Basic Auth.
 * 使用本类可以作为一个单独的EJB网关服务器。
 * <p>Copyright: Jdon.com Copyright (c) 2003</p>
 * <p>Company: 上海解道计算机技术有限公司</p>
 * @author banq
 * @version 1.0
 */
public class InvokerServlet extends HttpServlet {
  public final static String module = InvokerServlet.class.getName();
  // doGet主要是用于浏览器测试时使用
  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);
    HttpResponse httpResponse = null;

    try {
      EJBDefinition eJBDefinition = httpRequest.getEJBDefinition();
      String p_methodName = httpRequest.getMethodName();
      Class[] paramTypes = httpRequest.getParamTypes();
      Object[] p_args = httpRequest.getArgs();

      HttpSession session = request.getSession(true);
      //通过HttpSessionProxy调用EJB
      Object object = HttpSessionProxy.handleInvoker (eJBDefinition, session,
                                                  p_methodName,
                                                  paramTypes, p_args);
     //将结果序列化进入Http响应信号
      httpResponse = new HttpResponse(object);
      writeHttpServiceResponse(response, httpResponse);
    } catch (Exception e) {
Debug.logError(e, module);
    }
  }

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

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

⌨️ 快捷键说明

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