- 浏览: 66457 次
- 性别:
- 来自: 成都
文章分类
最新评论
在开发gwt时,有时需要同spring进行结合使用
下面是我根据spring4gwt上给出的相关信息做出来的一个demo
1、使用maven对jar包进行管理
2、自己写一个继承于RemoteServiceServlet的java文件
下面就将spring和gwt结合起来的代码:
主要思想就是
1、将请求解析为spring支持的bean
2、获取请求的方法和参数
3、调用方法和参数,并将结果返回
写道
package org.spring4gwt.server;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.server.rpc.RPC;
import com.google.gwt.user.server.rpc.RPCRequest;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
@SuppressWarnings("serial")
public class SpringGwtRemoteServiceServlet extends RemoteServiceServlet {
private static final Logger LOG = Logger.getLogger(SpringGwtRemoteServiceServlet.class);
// servlet的初始化方法
@Override
public void init() {
if (LOG.isDebugEnabled()) {
LOG.debug("Spring GWT service exporter deployed");
}
}
/**
* RemoteServiceServlet 中调用的方法,处理给定的request信息
*/
@Override
public String processCall(String payload) throws SerializationException {
try {
// 取出要被调用的bean实例
Object handler = getBean(getThreadLocalRequest());
// 对请求进行解码, 获取所有的请求信息, 主要是方法和参数
RPCRequest rpcRequest = RPC.decodeRequest(payload, handler.getClass(), this);
onAfterRequestDeserialized(rpcRequest);
if (LOG.isDebugEnabled()) {
LOG.debug("Invoking " + handler.getClass().getName() + "." + rpcRequest.getMethod().getName());
}
// 使用反射方式调用实例对象的方法, 返回调用结果
return RPC.invokeAndEncodeResponse(handler, rpcRequest.getMethod(), rpcRequest.getParameters(), rpcRequest
.getSerializationPolicy());
} catch (IncompatibleRemoteServiceException ex) {
log("An IncompatibleRemoteServiceException was thrown while processing this call.", ex);
return RPC.encodeResponseForFailure(null, ex);
}
}
/**
* 基于request URL进行的获取实例bean的操作
* 比如说:请求结尾时/myService,那么我们就会将spring中的bean实例为myService
*
* @param request
* @return handler bean
*/
protected Object getBean(HttpServletRequest request) {
String service = getService(request);
// 从spring中的applicationContext中取出bean
Object bean = getBean(service);
if (!(bean instanceof RemoteService)) {
throw new IllegalArgumentException("Spring bean is not a GWT RemoteService: " + service + " (" + bean + ")");
}
if (LOG.isDebugEnabled()) {
LOG.debug("Bean for service " + service + " is " + bean);
}
return bean;
}
/**
* 解析bean的名称,通过request来解析
* 如/spring 会被解析为 spring
* @param request
* @return bean name
*/
protected String getService(HttpServletRequest request) {
// 获得url
String url = request.getRequestURI();
// 对取最后一个"/"后面的内容
String service = url.substring(url.lastIndexOf("/") + 1);
if (LOG.isDebugEnabled()) {
LOG.debug("Service for URL " + url + " is " + service);
}
return service;
}
/**
* 在当前webApplicationContext中取出bean的实例
*
* @param name
* bean name
* @return the bean
*/
protected Object getBean(String name) {
// 调用spring自带的utils
WebApplicationContext applicationContext = WebApplicationContextUtils
.getWebApplicationContext(getServletContext());
if (applicationContext == null) {
throw new IllegalStateException("No Spring web application context found");
}
if (!applicationContext.containsBean(name)) {
{
throw new IllegalArgumentException("Spring bean not found: " + name);
}
}
// 获取bean实例
return applicationContext.getBean(name);
}
}
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.server.rpc.RPC;
import com.google.gwt.user.server.rpc.RPCRequest;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
@SuppressWarnings("serial")
public class SpringGwtRemoteServiceServlet extends RemoteServiceServlet {
private static final Logger LOG = Logger.getLogger(SpringGwtRemoteServiceServlet.class);
// servlet的初始化方法
@Override
public void init() {
if (LOG.isDebugEnabled()) {
LOG.debug("Spring GWT service exporter deployed");
}
}
/**
* RemoteServiceServlet 中调用的方法,处理给定的request信息
*/
@Override
public String processCall(String payload) throws SerializationException {
try {
// 取出要被调用的bean实例
Object handler = getBean(getThreadLocalRequest());
// 对请求进行解码, 获取所有的请求信息, 主要是方法和参数
RPCRequest rpcRequest = RPC.decodeRequest(payload, handler.getClass(), this);
onAfterRequestDeserialized(rpcRequest);
if (LOG.isDebugEnabled()) {
LOG.debug("Invoking " + handler.getClass().getName() + "." + rpcRequest.getMethod().getName());
}
// 使用反射方式调用实例对象的方法, 返回调用结果
return RPC.invokeAndEncodeResponse(handler, rpcRequest.getMethod(), rpcRequest.getParameters(), rpcRequest
.getSerializationPolicy());
} catch (IncompatibleRemoteServiceException ex) {
log("An IncompatibleRemoteServiceException was thrown while processing this call.", ex);
return RPC.encodeResponseForFailure(null, ex);
}
}
/**
* 基于request URL进行的获取实例bean的操作
* 比如说:请求结尾时/myService,那么我们就会将spring中的bean实例为myService
*
* @param request
* @return handler bean
*/
protected Object getBean(HttpServletRequest request) {
String service = getService(request);
// 从spring中的applicationContext中取出bean
Object bean = getBean(service);
if (!(bean instanceof RemoteService)) {
throw new IllegalArgumentException("Spring bean is not a GWT RemoteService: " + service + " (" + bean + ")");
}
if (LOG.isDebugEnabled()) {
LOG.debug("Bean for service " + service + " is " + bean);
}
return bean;
}
/**
* 解析bean的名称,通过request来解析
* 如/spring 会被解析为 spring
* @param request
* @return bean name
*/
protected String getService(HttpServletRequest request) {
// 获得url
String url = request.getRequestURI();
// 对取最后一个"/"后面的内容
String service = url.substring(url.lastIndexOf("/") + 1);
if (LOG.isDebugEnabled()) {
LOG.debug("Service for URL " + url + " is " + service);
}
return service;
}
/**
* 在当前webApplicationContext中取出bean的实例
*
* @param name
* bean name
* @return the bean
*/
protected Object getBean(String name) {
// 调用spring自带的utils
WebApplicationContext applicationContext = WebApplicationContextUtils
.getWebApplicationContext(getServletContext());
if (applicationContext == null) {
throw new IllegalStateException("No Spring web application context found");
}
if (!applicationContext.containsBean(name)) {
{
throw new IllegalArgumentException("Spring bean not found: " + name);
}
}
// 获取bean实例
return applicationContext.getBean(name);
}
}
- simplerpc.rar (11.2 KB)
- 下载次数: 13
发表评论
-
FastJSON使用
2015-06-30 10:25 747fastJSON基本使用: public static S ... -
堆排序
2014-06-07 22:23 734堆排序有以下需要注意的: parent=n/2 l ... -
java
2014-03-20 21:44 728Caused by: org.springframework ... -
guava测试例子,取值和定时重新装载
2014-02-21 17:54 1145package com.taobao.saleengine. ... -
java大顶堆排序
2013-09-11 23:59 1292public class Heap{ // 构造 ... -
java树结构简单实现
2013-09-10 23:46 6332import java.util.Scanner; ... -
java
2012-12-13 16:52 0zookeeper基础:http://www.ibm.com/ ... -
插入排序的实现
2012-05-27 13:54 872插入排序是最简单的排序算法 : 看了看书按照书上说的对插入排 ... -
在web中直接调用Nutch执行JOB
2012-05-27 01:15 4652看了http://zha-zi.iteye.com/blog/ ... -
gxt 主题
2012-01-04 13:15 1585在使用gxt的时候,我们会注意到页面的主题, 如果我们想改变 ... -
gxt 中文
2012-01-03 13:30 5140在使用gxt的时候 发现默认使用的是English 这样的话 ... -
JDBC连接mysql
2011-10-29 17:13 1675个人开发时主要还是使用mysql,所以就顺便把连接mysql的 ... -
java 反射调用类的方法
2011-10-29 00:29 8935最近遇到一个问题,重复的写一些方法,这些方法基本除了调用对象的 ... -
java多线程学习网址
2011-08-15 08:54 0http://lavasoft.blog.51cto.com/ ...
相关推荐
GWT(Google Web Toolkit) 是 Google 最近推出的一个开发 Ajax 应用的框架,它支持用 Java 开发和调试 Ajax 应用,本文主要介绍如何利用 GWT 进行 Ajax 的开发。 GWT特性简介 1.动态,可重用的UI组件 GWT提供的...
Google Web Toolkit(GWT)是一个用于开发和优化复杂浏览器端应用的开源工具集,它允许开发者使用Java语言编写前端代码,然后通过编译器将Java代码转换成兼容各主流浏览器的JavaScript、HTML和CSS。《Google Web工具...
Google Web Toolkit(GWT)是Google推出的一款开源的、基于Java的Web开发框架,它允许开发者使用Java语言来编写前端应用程序。GWT-2.8.2是该SDK的一个版本,提供了最新的特性和改进,旨在简化Web应用的开发流程,...
通过使用Google Web Toolkit (GWT),开发者能够轻松地使用Java语言开发高质量的Ajax应用,不仅简化了开发流程,还提高了开发效率。GWT的强大之处在于其不仅解决了Ajax开发中的常见难题,还提供了一系列高级功能,...
**GWT (Google Web Toolkit)** 是一款由Google开发的开源工具包,专为Java开发者设计,使得他们能够使用Java语言创建高效、动态且交互性强的Ajax应用。GWT通过将Java代码编译成浏览器可执行的JavaScript和HTML,解决...
《Google Web Toolkit Applications》这本书是针对Google Web Toolkit(GWT)这一强大开发工具的深入指南。GWT是一款由Google开发的开源JavaScript框架,它允许开发者使用Java语言来编写Web应用程序,然后自动编译成...
"利用 Google Web Toolkit 在 Java 框架中开发 Ajax 应用程序" 这个标题提到了两个关键技术和一个目的。Google Web Toolkit(GWT)是主要工具,它允许开发者使用 Java 语言来编写前端的 AJAX 应用程序。Ajax,即异步...
谷歌Web工具包(Google Web Toolkit,简称GWT)是一种开源的Java框架,它允许开发者使用Java语言编写客户端的Web应用程序,然后自动编译为优化过的JavaScript代码。GWT的核心理念是利用Java的强类型、面向对象的特性...
**GWT**(Google Web Toolkit)是Google推出的一款用于构建和优化复杂Web前端应用的开发工具包。它通过提供一系列强大的特性,极大地简化了开发流程,使得开发者能够更加高效地构建现代化的Web应用程序。 ##### 1. ...
《加速GWT:构建企业级Google Web Toolkit应用》是一本深度探讨如何利用Google Web Toolkit(GWT)构建高性能Ajax应用程序的专业书籍。本书作者Vipul Gupta深入解析了GWT的核心功能,以及如何通过GWT生成优化的...
谷歌Web工具包(Google Web Toolkit,简称GWT)是一个开源的Java SDK,它允许开发者使用Java语言来编写客户端的Web应用程序。GWT API帮助手册是开发者理解和使用GWT的关键资源,通常以CHM(Compiled HTML Help)格式...
Google Web Toolkit(GWT)是一款由Google开发的强大工具包,它不仅提供了一种简单的方法来构建和优化复杂的Web应用程序,还允许开发者使用Java语言进行前端开发,并在部署时自动将其编译成高效的JavaScript代码。...
Google Web Toolkit(GWT)是Google推出的一款开源的JavaScript开发框架,它允许开发者使用Java语言来编写前端Web应用。GWT API文档是开发者理解和使用GWT进行开发的重要参考资料,提供了全面的技术指南和API参考。 ...
Google Web Toolkit(GWT)1.5.3是一款由Google开发的开源JavaScript开发框架,它允许Java开发者使用Java语言来构建高性能、跨浏览器的Web应用程序。这个版本是GWT的一个重要里程碑,带来了许多改进和新特性,使得...
GWT(Google Web Toolkit)和Spring是两个在Java开发领域广泛应用的框架。GWT是一个用于构建富互联网应用程序(RIA)的开源工具包,它允许开发者使用Java语言编写客户端代码,然后由GWT编译器转换成优化过的...
Google Web Toolkit(GWT)是一款由Google推出的开源框架,专为Java开发者设计,旨在简化和加速Web应用程序的开发过程。它允许开发者使用Java语言编写前端代码,并将其编译成高性能的JavaScript,从而在浏览器上运行...
标题 "gwt+spring+hibernate" 涉及的是一个使用Google Web Toolkit (GWT)、Spring框架和Hibernate ORM技术的集成示例。这是一个常见的Web应用开发组合,用于构建高效、可扩展且功能丰富的Java web应用程序。下面将...
【标题】"GWT+Spring demo- springgwt_sudoku" 涉及的主要知识点是Google Web Toolkit (GWT) 和Spring框架的整合应用。这是一个实际的项目示例,展示了如何将GWT的客户端能力与Spring的服务器端功能相结合,以创建一...