dwr+spring集成
DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。
以下模拟一个简单的dwr入门案例,重点理解dwr是如何跟java后台服务器打交道的
模拟效果如下
模拟从服务器加载下拉列表数据
模拟保存功能
接下来为dwr+spring集成步骤:
1、新建一个web工程,导入dwr+spring所需jar,如下图
目录结构图
修改web.xml
<? xml version = " 1.0 encoding UTF-8 ?> < web - app version 2.4 xmlns http://java.sun.com/xml/ns/j2ee xmlns:xsi http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation http://java.sun.com/xml/ns/j2ee http: // java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- Spring上下文 --> context param > name contextConfigLocation </ value classpath:resource / app * .xml listener class org.springframework.web.context.ContextLoaderListener 配置DWR前端控制器 servlet dwrServlet org.directwebremoting.servlet.DwrServlet 指定@R_403_382@ init config 如果有多个用 , 分开 WEB INF classes dwr.xml debug true mapping url pattern >/ dwr /* </url-pattern> </servlet-mapping> </web-app>
新建实体类Dept
package entity; public Dept { private Long id; String name; Dept() { } Dept(Long id,String name) { this .id id; .name name; } Long getId() { return id; } void setId(Long id) { String getName() { setName(String name) { name; } }
新建业务逻辑类
DeptServices类
services; import java.util.ArrayList; java.util.HashMap; java.util.List; java.util.Map; entity.Dept; @SuppressWarnings( unchecked ) DeptServices { List findDept() { throw new RuntimeException( 查找失败! ); } deleteDept(Long id) { System.out.println( Delete dept + id); } List getDeptsForPo() { List depts ArrayList(); depts.add( Dept( 1l 教质部 )); depts.add( 2l 学术部 3l 就业部 4l 咨询部 )); depts; } saveDept(List Dept depts) { System.out.println(dept.getId() + ":" + dept.getName()); System.out.println(depts); } List getDepts() { List depts ArrayList(); Map map HashMap(); map.put( id 01 ); map.put( ); depts.add(map); map 02 03 04 ); depts.add(map); try { Thread.sleep( 1000 catch (InterruptedException e) { e.printStackTrace(); } depts; } }
HelloServices类
/** * @author dlwu * */ HelloServices { String sayHello(String name){ System.out.println( Hello now! ); Hello name ! ; } }
LoginService类
org.directwebremoting.WebContext; org.directwebremoting.WebContextFactory; LoginService { checkUserLogin(String userid,String pwd){ WebContext ctx WebContextFactory.get(); ctx.getSession().setAttribute( userid String getLoginUser(){ WebContext ctx WebContextFactory.get(); (String)ctx.getSession().getAttribute( ); } }
配置applicationContext.xml
配置系统基础环境 beans xmlns http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd bean id deptServices services.DeptServices ></ bean loginSrv services.LoginService beans >
配置dwr.xml,dwr.xml是前台js跟java服务器沟通的桥梁
<! DOCTYPE dwr PUBLIC -//GetAhead Limited//DTD Direct Web Remoting 2.0//EN http://getahead.org/dwr/dwr20.dtd 通用dwr配置 allow 建立JS对象,将目标对象的方法转换成JS对象的方法 create javascript helloSrv creator new param name class value services.HelloServices create 从Spring中获取Java对象 deptSrv spring beanName 禁止执行 exclude method deleteDept /> 指定针对于特定对象的转换器 convert match entity.* converter convert java.lang.Throwable include message >
hello.jsp页面
<% @ page language java java.util.* pageEncoding %> String path request.getContextPath(); String basePath request.getScheme() :// request.getServerName() : request.getServerPort() path ; DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN html head base href <%=basePath%> title My JSP ' hello.jsp starting page Meta http equiv pragma content no-cache cache-control expires 0 keywords keyword1,keyword2,keyword3 description This is my page 记得引入js,测试地址: http: localhost:8083/dwrweb/dwr/ --> script type text/javascript src dwr/engine.js script dwr/interface/helloSrv.js dwr/util.js function hello(){ 方法一 返回处理后的结果信息 var fn = function(result){ $("msg").innerHTML = result; } helloSrv.sayHello($("name").value,fn); 方法二 helloSrv.sayHello($( ).value,function(result){ $( msg ).innerHTML result; }); 方法三 使用如下的好处为:不用导入如上三个js 第一个参数: dwr访问路径,在web.xml中配置,如: <url-pattern>/dwr/*</url-pattern> 第二个参数: dwr与java服务器通信变量,在dwr.xml中声明 第三个参数: 服务器方法名 第四个参数: 页面请求参数,即服务器方法名得参数 第五个参数: 回调函数 dwr.engine._execute("dwr",'helloSrv','sayHello',$("name").value,0)"> } body div id div input type text id button Hello onclick hello(); >
dept.jsp页面
function loadDept(){ 说明已经加载,不必重新加载 if ($( depts ).options.length ){ ; } DWRUtil.addOptions( '' 正在下载... }],0)">); dwr.engine._execute( getDepts ); DWRUtil.addOptions( ); }); } function loadDept2(){ depts2 getDeptsForPo ); }); } function saveDept(){ 声明dept对象 var dept { id:$( deptid deptname ).value }; dwr.engine._execute( saveDept 保存成功! ); }); } function find(){ dwr.engine._execute( findDept 查询成功! ); },errorHandler:function(e){ alert( 查询失败: e); } }); } select id loadDept(); select loadDept2(); hr ID: input id type size 8 Name: input value 保存部门 saveDept(); 查找 find(); >