dwr和ssh整合

     最近在学习web方面的各种应用,学习到dwr时,我想将它整合到我的ssh框架上,将dwr和spring整合很容易,将dwr.xml中create的属性creator设置为spring就行了。
整合步骤如下:
1.在web.xml中配置dwr的控制器
    <!-- 配置dwr的控制器-->
    <servlet>
        <servlet-name>dwr</servlet-name>
        <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dwr</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>


2.在WEB_INF下添加dwr.xml文件,写了一个简单方法调用,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr>
  <allow>
         <!-- -->
        <create creator="spring" javascript="check">
            <param name="beanName" value="userService"></param>
            <include method="login"/>
        </create>
  </allow>

</dwr>


这里的userService是在spring的配置文件里定义的。在我的applicationConext.xml中如下:
    <bean
        id="userService"
        class="zwh.struts.maven.service.impl.UserServiceImpl">
        <property name="userDao">
            <ref bean="userDao"/>
        </property>
    </bean>


这样dwr与spring整合就完成了。但我的项目是ssh项目,在web.xml定义的struts2的过滤器拦截了dwr请求,所以请求dwr时总是报错。经过搜索找到了解决答案:
在struts.xml中添加一个常量,即为struts标签添加constant子标签,内容如下:
<constant name="struts.action.excludePattern" value="/dwr/.*,/dwr/test/.*"></constant>

这里一定要注意/dwr/.*和dwr/test/.*在星号的前面是有一个点的。我原以为没有点的,在我没加点时请求../project/dwr/是成功的,但点击页面的方法进入../project/dwr/test/..中就出问题了,报出找不到action。具体是什么原因不明白,等待高人来解答。

你可能感兴趣的:(struts2,ssh,DWR)