之前只是单独接触了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框架整合教程
(1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开 发人员开发包含AJ ...
- 【DWR系列04】- DWR配置详解
table { margin-left: 30px; width: 90%; border: 1px; border-collapse: collapse } img { border: 1px so ...
- 【DWR系列03】- DWR主要类详解
img { border: 1px solid black } 一.简介 首先应该了解这个jar包主要的类,了解了类,就了解了DWR.DWR的在线javadoc:http://directwebrem ...
- 【DWR系列02】-DWR逆向Ajax即服务器推送
.literal { background-color: #f2f2f2; border: 1px solid #cccccc; padding: 1px 3px 0; white-space: no ...
- 【DWR系列01】-DWR简介及入门例子
.literal { background-color: #f2f2f2; border: 1px solid #cccccc; padding: 1px 3px 0; white-space: no ...
- Flex与SSH集成
Flex与SSH集成 -- ::| 分类: flex |举报|字号 订阅 Flex与SSH集成 ,下载blazeds_bin_3---.zip 包,将其解压 取下blazeds.war包 更改为bla ...
- java:Spring框架3(AOP,SSH集成Demo)
1.AOP: Spring提供了4种实现AOP的方式: 1.经典的基于代理的AOP 2.@AspectJ注解驱动的切面 3.纯POJO切面 4.注入式AspectJ切面 aop.xml: <?x ...
- 【DWR系列06】- DWR日志及js压缩
img { border: solid 1px } 一.日志 DWR依赖 Apache Commons Logging,可以使用log4j实现日志记录功能. 1.1 日志简介 和其他日志框架一样,当设 ...
- SSH集成log4j日志环境[转]
第一步:在web.xml初始化log4j <context-param> <param-name>log4jConfigLocation</param-name> ...
随机推荐
- linux作业--第十二周
1.主从复制及主主复制的实现 2.xtrabackup实现全量+增量+binlog恢复库 3.MyCAT实现MySQL读写分离 4.ansible常用模块介绍
- Centos8 Yum 安装Nginx指定版本
查看系统和EPEL的nginx版本 dnf info nginx 通过官方 yum 源安装nginx vi /etc/yum.repos.d/nginx.repo 列出所有版本 ...
- XSHELL的坑
今天使用XSHELL连接虚拟机上的CENTOS7 ,刚开始还可以正常连接,后来再就连接不上. 检查了半天SSH服务都检查过了运行正常, 重启,检查配置文件. 都OK没问题就是连接不上,折腾半天还是不行 ...
- go1.18泛型的简单尝试
今天golang终于发布了1.18版本,这个版本最大的一个改变就是加入了泛型.虽然没有在beta版本的时候尝试泛型,但是由于在其他语言的泛型经验,入手泛型不是件难事~ 官方示例 Tutorial: G ...
- AT2300题解
两种做法都说一说吧... 题意很明确. 1.数论分块 对于一个 \(d\) 和给定的 \((l,r)\),\((l,r)\) 对其造成贡献的条件很明显是 \(\lfloor \frac {l-1} d ...
- vue学习过程总结(05) - vue的重要插件vue-router
vue-router的中文文档:https://router.vuejs.org/zh/installation.html(基于文档的摘抄) 1.vue中的组件与插件 转载:https://blog. ...
- vue学习过程总结(04) - 菜鸟教程归纳
1.组件 组件(component)是vue.js最强大的功能之一.组件可以扩展html元素,封装可重用的代码.组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象 ...
- WindowsServer域用户批量创建方法
@font-face { font-family: "Times New Roman" } @font-face { font-family: "宋体" } @ ...
- KestrelServer详解[1]:注册监听终结点(Endpoint)
具有跨平台能力的KestrelServer是最重要的服务器类型.针对KestrelServer的设置均体现在KestrelServerOptions配置选项上,注册的终结点是它承载的最重要的配置选项. ...
- 记录NLTK安装使用全过程--python
前言 之前做实验用到了情感分析,就下载了一下,这篇博客记录使用过程. 下载安装到实战详细步骤 NLTK下载安装 先使用pip install nltk 安装包 然后运行下面两行代码会弹出如图得GUI界 ...