`
Merlin_T
  • 浏览: 1839 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

RemoteServiceServlet 随便看看

阅读更多

其实一直对gwt servlet 如何与 spring frame work结合有点疑惑,今天瞄了两眼RemoteServiceServlet 的代码, 大概有点思路了,GWT RPC service client端提交数据,应该用的仍然是post方法,所以servlet处理客户端的Request调用的是doPost方法

 

RemoteServiceServlet 的基类 AbstractRemoteServiceServlet 里定义了doPost 方法如下:

 

 

@Override
public final void doPost(HttpServletRequest request,
      HttpServletResponse response) {
    ......
    processPost(request, response);
    ......
}

 省略了一些check,try,catch,就剩 processPost 方法了. 该方法定义在 RemoteServiceServlet 中

 

@Override
  public final void processPost(HttpServletRequest request,
      HttpServletResponse response) throws IOException, ServletException,
      SerializationException {
    // Read the request fully.
    //
    String requestPayload = readContent(request);

    // Let subclasses see the serialized request.
    //
    onBeforeRequestDeserialized(requestPayload);

    // Invoke the core dispatching logic, which returns the serialized
    // result.
    //
    String responsePayload = processCall(requestPayload);

    // Let subclasses see the serialized response.
    //
    onAfterResponseSerialized(responsePayload);

    // Write the response.
    //
    writeResponse(request, response, responsePayload);
  }

 接着是这里调用的processCall方法

 

public String processCall(String payload) throws SerializationException {
    // First, check for possible XSRF situation
    checkPermutationStrongName();

    try {
      RPCRequest rpcRequest = RPC.decodeRequest(payload, delegate.getClass(), this);
      onAfterRequestDeserialized(rpcRequest);
      return RPC.invokeAndEncodeResponse(delegate, rpcRequest.getMethod(),
          rpcRequest.getParameters(), rpcRequest.getSerializationPolicy(),
          rpcRequest.getFlags());
    } catch (IncompatibleRemoteServiceException ex) {
      log(
          "An IncompatibleRemoteServiceException was thrown while processing this call.",
          ex);
      return RPC.encodeResponseForFailure(null, ex);
    } catch (RpcTokenException tokenException) {
      log("An RpcTokenException was thrown while processing this call.",
          tokenException);
      return RPC.encodeResponseForFailure(null, tokenException);
    }
  }

 看到这里已经大致有点想法了,其实 RPC.invokeAndEncodeResponse 的调用已经完成了 调用server端方法,将结果组织成为String(serizable, 不知道这个词用的对不对,用错了见笑,请指正哈)的过程 ,该方法的第一个参数就是包含要调用的server端的方法(第二个参数)的实例,因此我们若想将spring框架和 GWT的 Servlet 结合起来 其实是要将第一个参数替换为通过spring的 beanfactory得到的各种bean实例.

分享到:
评论

相关推荐

    GWT学习笔记,个人学习心得

    1. 在服务器端,需要创建一个Servlet来处理RPC请求,如`HelloServiceImpl`继承`RemoteServiceServlet`,实现同步接口`HelloService`。 2. 在Module配置文件(如`Sumator.gwt.xml`)中,配置Servlet路径。 3. 修改`...

    spring-gwtrpc:GWT RPC服务的Spring集成

    < artifactId>spring-gwtrpc</ artifactId> < version>1.0.0</ version></ dependency>特征派遣到Spring BeanSpring GWT-RPC提供了一个简单的Servlet,它扩展了RemoteServiceServlet以将RPC请求分派到所需的Spring ...

    gwt-spring

    通过研究这个项目,开发者可以学习到如何在 GWT 中调用 Spring 服务,了解 GWT 与 Spring 之间的通信机制,如使用 RemoteServiceServlet 和 GWT-RPC。此外,还能了解到如何组织一个混合前端和后端的项目结构,以及...

    GWT通信机制初探

    标签中的“源码”意味着文章可能深入到GWT的内部工作机制,分析其核心类库,如com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException和com.google.gwt.user.server.rpc.RemoteServiceServlet,理解...

    GWTPHP-开源

    它是GWT服务器(RemoteServiceServlet)PHP端口。 使用GWTPHP,您可以将GWT应用程序与PHP连接。 它使用GWT本机数据交换格式对GWT请求/响应进行解码/编码。 无需JSON或XMLRPC。 项目网站:http://gwtphp.sf.net

    GWT整合Spring

    这个组件允许GWT应用与Spring服务无缝交互,它基于Spring的DispatcherServlet,通过AOP(面向切面编程)和动态代理技术(如cglib或javassist)来实现GWT的RemoteServiceServlet的扩展。这样,我们可以把业务逻辑和...

    gwt+struts2 使用 struts2gwtplugin 例子

    4. **GWT客户端**:在GWT的客户端代码中,你可以创建GWT服务接口(继承自`RemoteServiceServlet`),并使用GWT的`GWT.create()`方法实例化它。这样,你就可以在客户端代码中调用Struts2 Action的方法,就像调用本地...

    gwt-servlet-2.3.0.jar

    3. **服务端入口点**:在`gwt-servlet-2.3.0.jar`中,`com.google.gwt.user.server.rpc.RemoteServiceServlet`是主要的入口点,它继承自`javax.servlet.http.HttpServlet`,实现了对GWT RPC请求的处理。 4. **安全...

    GWT中的xmlHttpRequest

    public class MyServiceImpl extends RemoteServiceServlet implements MyService { @Override public String getData() { return "这是从服务器返回的数据"; } } ``` 在客户端,你可以像这样调用服务: ```...

    struts2与gwt的整合

    - **Action类**:创建一个继承自`com.google.gwt.user.server.rpc.RemoteServiceServlet`的Action类,实现GWT的RPC服务接口。 - **客户端服务接口**:在GWT客户端,定义一个继承自`...

    GWT发送HTTP请求简明教程

    - **Content-Type头**:如果你使用`RemoteServiceServlet`或`RPCServletUtils`处理POST请求,必须设置`Content-Type`头为`"text/x-gwt-rpc; charset=utf-8"`。通常,应在`setRequestData()`之前设置。 对于乱码问题...

    gwt服务端及部署学习

    - 实现服务端逻辑`org.jmg.server.GetTimeServiceImpl`,继承自`RemoteServiceServlet`。 在服务接口`GetTimeService`中添加`String getTime()`方法,用于获取服务器时间。在异步服务接口`GetTimeServiceAsync`中...

    Ajax经典实例大全

    public class MyService extends RemoteServiceServlet implements MyServiceAsync { public String getData(String input) { return "Processed " + input; } } ``` 综上所述,Ajax技术在各种编程环境下都有...

    gwt 3.2.0 crud 操作

    public class ContactServiceImpl extends RemoteServiceServlet implements ContactService { @Override public List<Contact> getAllContacts() { // 实现从数据库获取所有联系人的逻辑 } @Override public...

    drunken-avenger

    这通常涉及到 GWT 的 RemoteServiceServlet 和 Spring 的 Service Locator。 - **Spring 与 Hibernate 整合**:如何在 Spring 容器中配置 Hibernate SessionFactory,以及如何通过 Spring 的 DAO 支持进行数据库...

Global site tag (gtag.js) - Google Analytics