#副標=AJAX開發工具(8) #大標=整合GWT與Spring #作者=文/沈炳宏 ============= 程式1 GWTSpringDemo1 spring org.springframework.web.servlet.DispatcherServlet 1 spring /com.runpc.GWTSpringDemo1/services/* org.springframework.web.context. ContextLoaderListener ================ ============= 程式2 ================ ============= 程式3 package com.runpc.server; import … public class ServletWrappingController extends AbstractController implements BeanNameAware, InitializingBean,DisposableBean { private Class servletClass; private String servletName; private Properties initParameters = new Properties(); private String beanName; private Servlet servletInstance; public void setServletClass(Class servletClass) { this.servletClass = servletClass; } public void setServletName(String servletName) { this.servletName = servletName; } public void setInitParameters( Properties initParameters) { this.initParameters = initParameters; } public void setBeanName(String name) { this.beanName = name; } public void setServletInstance( Servlet servletInstance) { this.servletInstance = servletInstance; } public void afterPropertiesSet() throws Exception { if (this.servletInstance == null) { throw new IllegalArgumentException("需要servlet執行個體"); } if (!Servlet.class.isAssignableFrom( servletInstance.getClass())) { throw new IllegalArgumentException( "servlet執行個體[" + this.servletClass.getName() + "] 需要實作[javax.servlet.Servlet]介面"); } if (this.servletName == null) { this.servletName = this.beanName; } this.servletInstance.init( new DelegatingServletConfig()); } protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { this.servletInstance.service(request, response); return null; } public void destroy() { this.servletInstance.destroy(); } private class DelegatingServletConfig implements ServletConfig { public String getServletName() { return servletName; } public ServletContext getServletContext() { return getWebApplicationContext().getServletContext(); } public String getInitParameter( String paramName) { return initParameters. getProperty(paramName); } public Enumeration getInitParameterNames() { return initParameters.keys(); } } } ================ ============= 程式4 ================ ============= 程式5 spring org.springframework.web.servlet.DispatcherServlet 1 spring /myservice.srv ================    ============= 程式6 MyServiceImpl ================ ============= 程式7 MyServiceAsync svc = (MyServiceAsync) GWT.create(MyService.class); ServiceDefTarget endpoint = (ServiceDefTarget) svc; endpoint.setServiceEntryPoint("../../myservice.srv"); ================ ============= 程式8 ================ ============= 程式9 public void myServiceMethod(...){ ... HttpServlerRequest request = GWTSpringController.getRequest(); ... } ================ ============= 程式10 requestSetter ================ ============= 程式11 ================    ============= 程式12 ================ ============= 程式13 ================ ============= 程式14 ================ ============= 程式15 ================ ============= 程式16 public class GWTSpringDemo2 implements EntryPoint { public void onModuleLoad() { RootPanel slot = RootPanel.get("portal"); if (slot != null) { try { CoreGwtBeanFactoryCreator beanFactoryCreator = new CoreGwtBeanFactoryCreator(); GwtBeanFactory beanFactory = beanFactoryCreator.createGwtBeanFactory(); RoundedPanel widgetRepository = (RoundedPanel)beanFactory.getBean("roundedPanel"); slot.add((Widget) RoundedPanel; } catch (RuntimeException re) { re.printStackTrace(); throw re; }}}} ================      =========box作者簡介==========   沈炳宏   台灣微軟3-1/4-1/5-1/6-1MVP,長庚資管所畢業,致力於各軟體開發技術的研究,現職為軟體工程師。   =============end===============