之前只是单独接触了DWR,知道一个基本的开发流程。

web.xml配置文件:


<!-- 配置Dwr信息 -->
 <servlet>
  <servlet-name>DwrServlet</servlet-name>
  <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
  <!-- 是否允许调试,如果要在浏览器中调式则必须设置为true -->
  <init-param>
   <param-name>debug</param-name>
   <param-value>true</param-value>
  </init-param>
  <!-- 是否进行日志管理,如果是要在这设置参数,通常省略 -->
  <init-param>
   <param-name>logLevel</param-name>
   <param-value>WARN</param-value>
  </init-param>
  <!-- 是否允许跨域请求,如果是则必须设置为false,默认为true -->
  <init-param>
   <param-name>crossDemainSessionSecurity</param-name>
   <param-value>false</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>DwrServlet</servlet-name>
  <url-pattern>/dwr/*</url-pattern>
 </servlet-mapping>
 <!-- 配置Dwr信息 end-->
 
 
dwr.xml配置如下:

<dwr>
 <allow> 
  <create creator="new" javascript="ExceptionDemo">
   <param name="class" value="com.bluefox.dwr.exception.ExceptionDemo"/>
  </create>
  
  <create creator="new" javascript="CountryService">
   <param name="class" value="com.bluefox.dwr.service.impl.CountryServiceImpl"/>
  </create>
  
  <convert match="com.bluefox.dwr.domain.Country" converter="bean"/>
 </allow>
</dwr>
 
然后在JSP中:

<!DOCTYPE HTML><%@page language="java"
 contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>dwr_6</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type='text/javascript' src='/dwr_1/dwr/engine.js'></script>
<script type='text/javascript' src='/dwr_1/dwr/util.js'></script>
<script type='text/javascript' src='/dwr_1/dwr/interface/CountryService.js'></script>
<script type="text/javascript">
 window.onload = function() {
  CountryService.findAllCountrys(function(data) {
   //alert(data);
   dwr.util.addOptions("country",data,"id","name");
  });
 };
</script>
</head>
<body>
 <select id="country" size="1">
  <option value="">请选中国家</option>
 </select>
</body>
</html>
 
这样子,DWR就能够单独的使用了,首先我以为在SSH中DWR也是这样配置就行了,就能够发挥作用,没想到并不是这样。
首先是web.xml跟单独使用DWR时是一样的。
然后是dwr.xml,这里将会有所改变,因为此时的dwr对象不再是自己new,而是交给了spring进行管理的,具体如下:

<dwr>
 <allow>
  <!-- create中javascript为要生成的js文件名称和前台调用方法的主方法:-->
  <!-- create因为使用ssh框架,由spring代理,所以设置成spring,同时也是可以自己new的,scope表示存活周期-->
  <create creator="spring" javascript="userAction" scope="application">
   <!-- param中的name因为要调用bean中的方法,所以 使用beanName,当然还有其他配置方法(如class) ,-->
   <!-- value我这里是用的spring配置文件applicationContext.xml中的action的id  -->
   <param name="beanName" value="userAction"></param>
   <!--include是说明这个action中只有findAllTeachers这个方法可以被前台所访问 ,  -->  
   <!-- 不过我这样配置了,但是没有效果,dwr debug调试时,userAction中的方法全部都能访问 --> 
   <include method="findAllTeachers"/>
  </create>
  <!-- convert说明将match路径下的action换成bean,供beanName使用 -->
  <convert match="com.ymj.stuInfoColl.domain.User" converter="bean"/>
 </allow>
</dwr>
 
在网上找资料时,<param name="beanName" value="userAction"></param> ,有的是将此处的value设置成strust中path值,我试了,但是没有成功。如果哪个前辈知道的话,可以给我说说,感激不尽。
其他地方都没有什么要特别注意的,但是strust.xml配置文件中必须得加上下面这句话。
<constant name="struts.action.excludePattern" value="/dwr.*"></constant>
为什么呢?!原因很明显,strust的过滤器与dwr中的过滤器产生了冲突。
web.xml中
strust的过滤器:

 <filter>
  <filter-name>Struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 </filter>
 
 
 <filter-mapping>
  <filter-name>Struts2</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 
dwr的过滤器:


 <!-- 配置Dwr信息 -->
 <servlet>
  <servlet-name>DwrServlet</servlet-name>
  <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
  <!-- 是否允许调试,如果要在浏览器中调式则必须设置为true -->
  <init-param>
   <param-name>debug</param-name>
   <param-value>true</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>DwrServlet</servlet-name>
  <url-pattern>/dwr/*</url-pattern>
 </servlet-mapping>
 <!-- 配置Dwr信息 end-->
 

可以得出,strust过滤器中的url-pattern是*,而dwr则是/dwr/*,明显可以看出strust将拦截所有的路径,当然也就包括了原本给dwr的路径。
想到这里当然也就能够想到解决办法,那就是将本应该给dwr的路径,strust不再拦截,就好了,那是要怎样做呢?!确实上文早就给出了答案。
<constant name="struts.action.excludePattern" value="/dwr.*"></constant>
但是这句话是什么意思呢?!excludePattern表示这个将是strust不处理的路径,也就让/dwr.* 这个路径交个了DWR框架。
至此问题已经解决,从此以后,SSH与DWR集成不再成问题。
另外还将这个DWR动态生成下拉列表,并且选中特定项的JSP关键代码贴出来:
 

  <script type='text/javascript' src='/StudentInfoCollectionSys/dwr/engine.js'></script>
  <script type='text/javascript' src='/StudentInfoCollectionSys/dwr/interface/userAction.js'></script>
  <script type='text/javascript' src='/StudentInfoCollectionSys/dwr/util.js'></script>
 
  <script type="text/javascript">
  $(function(){
 
   var teacherId = $("input[name='teacherIdValue']").val();
   userAction.findAllTeachers(function(data)
   {
    dwr.util.addOptions("teacherId",data,"id","name"); 
    dwr.util.setValue("teacherId",teacherId);
   });
  });
 
  </script>

而在jsp的body里面则只需要:

<select id="teacherId" name="teacher"></select>

DWR以及SSH集成DWR的更多相关文章

  1. dwr与ssh框架整合教程

    (1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开 发人员开发包含AJ ...

  2. 【DWR系列04】- DWR配置详解

    table { margin-left: 30px; width: 90%; border: 1px; border-collapse: collapse } img { border: 1px so ...

  3. 【DWR系列03】- DWR主要类详解

    img { border: 1px solid black } 一.简介 首先应该了解这个jar包主要的类,了解了类,就了解了DWR.DWR的在线javadoc:http://directwebrem ...

  4. 【DWR系列02】-DWR逆向Ajax即服务器推送

    .literal { background-color: #f2f2f2; border: 1px solid #cccccc; padding: 1px 3px 0; white-space: no ...

  5. 【DWR系列01】-DWR简介及入门例子

    .literal { background-color: #f2f2f2; border: 1px solid #cccccc; padding: 1px 3px 0; white-space: no ...

  6. Flex与SSH集成

    Flex与SSH集成 -- ::| 分类: flex |举报|字号 订阅 Flex与SSH集成 ,下载blazeds_bin_3---.zip 包,将其解压 取下blazeds.war包 更改为bla ...

  7. java:Spring框架3(AOP,SSH集成Demo)

    1.AOP: Spring提供了4种实现AOP的方式: 1.经典的基于代理的AOP 2.@AspectJ注解驱动的切面 3.纯POJO切面 4.注入式AspectJ切面 aop.xml: <?x ...

  8. 【DWR系列06】- DWR日志及js压缩

    img { border: solid 1px } 一.日志 DWR依赖 Apache Commons Logging,可以使用log4j实现日志记录功能. 1.1 日志简介 和其他日志框架一样,当设 ...

  9. SSH集成log4j日志环境[转]

    第一步:在web.xml初始化log4j <context-param> <param-name>log4jConfigLocation</param-name> ...

随机推荐

  1. Spring Cloud Alibaba 2021.0.1.0 发布:版本号再也不迷糊了

    大家好,DD又来了! 3月9日,Spring官方博客发文:Spring Cloud Alibaba 2021.0.1.0发布了. 前段时间DD还在微信群里看到小伙伴吐槽Spring Cloud Ali ...

  2. Linux——vi命令详解

    转载 Linux--vi命令详解   原文链接:https://blog.csdn.net/cyl101816/article/details/82026678 vi编辑器是所有Unix及Linux系 ...

  3. 使用Xtrabackup 备份mysql数据库

    ##创建逻辑卷 [root@node1 ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully create ...

  4. 【ASP.NET Core】MVC模型绑定:非规范正文内容的处理

    本篇老周就和老伙伴们分享一下,对于客户端提交的不规范 Body 如何做模型绑定.不必多说,这种情况下,只能自定义 ModelBinder 了.而且最佳方案是不要注册为全局 Binder--毕竟这种特殊 ...

  5. [vmware to openstack] 安装virtio驱动

    描述   从vmware的虚拟机迁移到opensatck,由于vmware虚拟机磁盘类型采用的是scsi,要迁移到opensatck平台运行,发现虚拟机无法起来,原因是vmware虚拟机没有安装vir ...

  6. 程序语言与编程实践7-> Java实操4 | 第三周作业及思路讲解 | 异常处理考察

    第三周作业,可能是异常那一章当时没怎么听,此前也不怎么接触,感觉还挺陌生的. 00 第1题 00-1 题目 /* * To change this license header, choose Lic ...

  7. Redis集群节点扩容及其 Redis 哈希槽

    Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求 ...

  8. Spring cloud config 客户端连接RabbitMQ 报 socket closed

    java.net.SocketException: socket closed at java.net.SocketInputStream.socketRead0(Native Method)     ...

  9. ubuntu16 和ubuntu18安装及设置静态ip

    1.准备ubuntu16镜像2.安装:https://zhuanlan.zhihu.com/p/1447048653.安装ubuntu后,sudo passwd root这个命令建立root用户的密码 ...

  10. java中的ThreadLocal-learning

    为什么需要ThreadLocal 多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性. 而线程安全是指 当多个线程访问某个方法时 ...