当前位置: 代码迷 >> Web前端 >> gwt spring调整
  详细解决方案

gwt spring调整

热度:237   发布时间:2012-10-10 13:58:11.0
gwt spring整合

gwt+spring整合

?

目的:让gwt与spring整合

思路:建立一个实现了RemoteServiceServlet的servlet,根据传递的参数调用spring?WebApplicationContext容器里注册的服务,返回结果!

?

实现:

1.建立一个实现了RemoteServiceServlet的servlet

?

public class GwtSpring extends RemoteServiceServlet{

	/**
	 * spring容器上下文
	 */
	private WebApplicationContext springContext;

	/**
	 * 覆盖servlet.init方法 
	 * 获取spring WebApplicationContext容器上下文
	 */
	@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);
		springContext = (WebApplicationContext) config.getServletContext().getAttribute( 
		WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); 

		if (springContext == null) { 
			throw new RuntimeException("Check Your Web.Xml Setting, No Spring Context Configured"); 
		} 
	}
	
	/**
	 * 覆盖RemoteServiceServlet方法
	 * 获取调用参数,取得容器里的服务对象进行处理,返回处理结果
	 */
	@Override
	public String processCall(String payload) throws SerializationException {
		//获取HttpServletRequest对象
		HttpServletRequest req = getThreadLocalRequest();
		//获取服务对象,此处采用url比对,与servlet url-pattern配合
		//url样式:/gwtcrud/spring/*
		//*号代表容器里服务对象ID
		String requestURI = req.getRequestURI();
		String beanname = requestURI.substring(requestURI.lastIndexOf("/")+1);
		RemoteService service = (RemoteService) springContext.getBean(beanname);
		
		//调用服务对象,返回结果,参考:RemoteServiceServlet.processCall
		try {
			RPCRequest rpcRequest = RPC.decodeRequest(payload, service.getClass(),
					this);
			return RPC.invokeAndEncodeResponse(service, rpcRequest.getMethod(),
					rpcRequest.getParameters(), rpcRequest
							.getSerializationPolicy());
		} catch (IncompatibleRemoteServiceException ex) {
			getServletContext()
				.log("An IncompatibleRemoteServiceException was thrown while processing this call.",ex);
			return RPC.encodeResponseForFailure(null, ex);
		}
	}
	
	
}

?

?

2.配置web.xml

?

<servlet>
		<servlet-name>GwtSpring</servlet-name>
		<servlet-class>com.gwtcrud.server.GwtSpring</servlet-class>
</servlet>

<servlet-mapping>
		<servlet-name>GwtSpring</servlet-name>
		<url-pattern>/gwtcrud/spring/*</url-pattern>
</servlet-mapping>
?

?

3.写远程接口

?

/**
 * 调用spring容器中id为carService的对象
 * @author Administrator
 *
 */
@RemoteServiceRelativePath("spring/carService")
public interface CarService extends RemoteService{
	public Car getCar();
	public Car saveCar(Car car);
	public List<Car> getAllCars();
}
?

?

  相关解决方案