DWR(DirectWebRemoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。
以下模拟一个简单的dwr入门案例,重点理解dwr是如何跟java后台服务器打交道的
模拟效果如下
模拟从服务器加载下拉列表数据
模拟保存功能
接下来为dwr+spring集成步骤:
1、新建一个web工程,导入dwr+spring所需jar,如下图
目录结构图
修改web.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appversion="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>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:resource/apP*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--配置DWR前端控制器-->
<servlet>
<servlet-name>dwrServlet</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<!--指定配置文件-->
<init-param>
<param-name>config</param-name>
<!--如果有多个用","分开-->
<param-value>
/WEB-INF/classes/config/dwr.xml
</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-name>dwrServlet</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</web-app>
新建实体类Dept
packageentity;
publicclassDept{
privateLongid;
privateStringname;
publicDept(){
}
publicDept(Longid,Stringname){
this.id=id;
this.name=name;
}
publicLonggetId(){
returnid;
}
publicvoidsetId(Longid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
}
新建业务逻辑类
DeptServices类
packageservices;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importentity.Dept;
@SuppressWarnings("unchecked")
publicclassDeptServices{
publicListfindDept(){
thrownewRuntimeException("查找失败!");
}
publicvoiddeleteDept(Longid){
System.out.println("Deletedept"+id);
}
publicListgetDeptsForPo(){
Listdepts=newArrayList();
depts.add(newDept(1l,"教质部"));
depts.add(newDept(2l,"学术部"));
depts.add(newDept(3l,"就业部"));
depts.add(newDept(4l,"咨询部"));
returndepts;
}
publicvoidsaveDept(List<Dept>depts){
//System.out.println(dept.getId()+":"+dept.getName());
System.out.println(depts);
}
publicListgetDepts(){
Listdepts=newArrayList();
Mapmap=newHashMap();
map.put("id","01");
map.put("name","教质部");
depts.add(map);
map=newHashMap();
map.put("id","02");
map.put("name","学术部");
depts.add(map);
map=newHashMap();
map.put("id","03");
map.put("name","就业部");
depts.add(map);
map=newHashMap();
map.put("id","04");
map.put("name","咨询部");
depts.add(map);
try{
Thread.sleep(1000);
}catch(InterruptedExceptione){
e.printstacktrace();
}
returndepts;
}
}
HelloServices类
packageservices;
/**
*@authordlwu
*
*/
publicclassHelloServices{
publicStringsayHello(Stringname){
System.out.println("HelloNow!");
return"Hello"+name+"!";
}
}
LoginService类
packageservices;
importorg.directwebremoting.WebContext;
importorg.directwebremoting.WebContextFactory;
publicclassLoginService{
publicvoidcheckUserLogin(Stringuserid,Stringpwd){
WebContextctx=WebContextFactory.get();
ctx.getSession().setAttribute("userid",userid);
}
publicStringgetLoginUser(){
WebContextctx=WebContextFactory.get();
return(String)ctx.getSession().getAttribute("userid");
}
}
配置applicationContext.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<!--
配置系统基础环境
-->
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
>
<beanid="deptServices"class="services.DeptServices"></bean>
<beanid="loginSrv"class="services.LoginService"></bean>
</beans>
配置dwr.xml,dwr.xml是前台js跟java服务器沟通的桥梁
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEdwrPUBLIC"-//GetAheadLimited//DTDDirectWebRemoting2.0//EN""http://getahead.org/dwr/dwr20.dtd">
<!--通用dwr配置-->
<dwr>
<allow>
<!--建立JS对象,将目标对象的方法转换成JS对象的方法-->
<createjavascript="helloSrv"creator="new">
<paramname="class"value="services.HelloServices"></param>
</create>
<!--从Spring中获取Java对象-->
<createjavascript="deptSrv"creator="spring">
<paramname="beanName"value="deptServices"></param>
<!--禁止执行-->
<excludemethod="deleteDept"/>
</create>
<createjavascript="loginSrv"creator="spring">
<paramname="beanName"value="loginSrv"></param>
</create>
<!--指定针对于特定对象的转换器-->
<convertmatch="entity.*"converter="bean"></convert>
<convertmatch="java.lang.Throwable"converter="bean">
<paramname="include"value="message"></param>
</convert>
</allow>
</dwr>
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<%
Stringpath=request.getcontextpath();
StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">
<title>MyJSP'hello.jsp'startingpage</title>
<Metahttp-equiv="pragma"content="no-cache">
<Metahttp-equiv="cache-control"content="no-cache">
<Metahttp-equiv="expires"content="0">
<Metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
<Metahttp-equiv="description"content="Thisismypage">
</head>
<!--记得引入js,测试地址:http://localhost:8083/dwrweb/dwr/-->
<scripttype="text/javascript"src="dwr/engine.js"></script>
<scripttype="text/javascript"src="dwr/interface/helloSrv.js"></script>
<scripttype="text/javascript"src="dwr/util.js"></script>
<scripttype="text/javascript">
functionhello(){
//方法一
//返回处理后的结果信息
/*varfn=function(result){
$("msg").innerHTML=result;
}
helloSrv.sayHello($("name").value,fn);*/
//方法二
helloSrv.sayHello($("name").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,fn);
}
</script>
<body>
<divid="msg"></div>
<inputtype="text"id="name"/>
<inputtype="button"value="Hello"onclick="hello();"/>
</body>
</html>
dept.jsp页面
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<%
Stringpath=request.getcontextpath();
StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">
<title>MyJSP'hello.jsp'startingpage</title>
<Metahttp-equiv="pragma"content="no-cache">
<Metahttp-equiv="cache-control"content="no-cache">
<Metahttp-equiv="expires"content="0">
<Metahttp-equiv="keywords"content="keyword1,keyword3">
<Metahttp-equiv="description"content="Thisismypage">
</head>
<!--记得引入js,测试地址:http://localhost:8083/dwrweb/dwr/-->
<scripttype="text/javascript"src="dwr/engine.js"></script>
<scripttype="text/javascript"src="dwr/interface/helloSrv.js"></script>
<scripttype="text/javascript"src="dwr/util.js"></script>
<scripttype="text/javascript">
functionloadDept(){
//说明已经加载,不必重新加载
if($('depts').options.length>0){
return;
}
DWRUtil.addOptions('depts',[{id:'',name:'正在下载...'}],'id','name');
dwr.engine._execute("dwr",'deptSrv','getDepts',function(depts){
DWRUtil.removeAllOptions('depts');
DWRUtil.addOptions('depts',depts,'name');
});
}
functionloadDept2(){
if($('depts2').options.length>0){
return;
}
DWRUtil.addOptions('depts2','getDeptsForPo',function(depts){
DWRUtil.removeAllOptions('depts2');
DWRUtil.addOptions('depts2','name');
});
}
functionsaveDept(){
//声明dept对象
vardept={
id:$("deptid").value,
name:$("deptname").value
};
dwr.engine._execute("dwr",'saveDept',[dept],function(){
alert('保存成功!');
});
}
functionfind(){
dwr.engine._execute("dwr",'findDept',{
callback:function(results){
alert('查询成功!');
},
errorHandler:function(e){
alert("查询失败:"+e);
}
});
}
</script>
<body>
<selectid="depts"onclick="loadDept();"></select>
<selectid="depts2"onclick="loadDept2();"></select>
<hr/>
ID:<inputid="deptid"type="text"size="8"/>
Name:<inputid="deptname"type="text"size="8"/>
<inputvalue="保存部门"type="button"onclick="saveDept();"/>
<inputvalue="查找"type="button"onclick="find();"/>
</body>
</html>
访问路径:
测试路径:http://localhost:8083/dwrweb/dwr/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。