After having played around with Spring's annotation driven model, I found it much easier than it's XML counterpart, and so I was determined to get DWR working in the same manner.
mvc-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.directwebremoting.org/schema/spring-dwr
http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd">
<!-- ================================== DWR configurations ===================================== -->
<dwr:configuration>
<dwr:convert type="bean" class="podd.apn.tab.FacsImportStatus" />
</dwr:configuration>
<dwr:annotation-config />
<dwr:url-mapping />
<dwr:controller id="dwrController" debug="true" />
<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />
<!-- Forwards requests to the "/" resource to the "welcome" view -->
<mvc:view-controller path="/" view-name="welcome"/>
<!--
<mvc:view-controller path="/*" />
-->
<!-- Configures Handler Interceptors -->
<mvc:interceptors>
<!-- Changes the locale when a 'locale' request parameter is sent; e.g. /?locale=de -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
<!-- Saves a locale change using a cookie -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
<!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
web.xml
<!-- =============
SERVLETS
============ -->
<servlet>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/app-config.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>uploadServlet</servlet-name>
<servlet-class>podd.apn.servlet.UploadServlet</servlet-class>
</servlet>
<!-- =================
SERVLET MAPPINGS
================ -->
<servlet-mapping>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<url-pattern>/spring/*</url-pattern>
</servlet-mapping>
<!-- DWR -->
<servlet-mapping>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
And then to verify that it DWR is integrated correctly you can visit:
http://localhost:8989/podd-apn/dwr/engine.js
Referneces:
http://www.codercorp.com/blog/spring/configuring-dwr-30-with-spring-using-annotations.html
It turns out one of the critical components to getting the two to play well together is the use of the mvc:view-controller tag. I've played around with a number of different combinations, including those recommended at http://www.butterdev.com/dwr/2010/10/dwr-spring-and-annotations/
ReplyDeleteI'm still trying to figure out what's really going on but there appear to be some curious interactions between the handlers required for the Spring MVC annotated controllers and the DWRController. One way to fix this as noted by David is to manually define the handler order. However I've run into issues if I want to use the mvc:resources tag.
Using the mvc:view-controller tag seems to define the handlers in the right order, allowing DWR and Spring @MVC to play well and allowing other tags to be used as well.
Anyway... thanks for the post. There's definatly a famine of good documentation on getting these two working together.
Hi Mary,
ReplyDeleteI'd rather not be contacted directly
What can I do for you?