- 浏览: 196763 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
atgoingguoat:
Spring Cloud 现状目前,国内使用 Spring C ...
SpringCloud2 从入门 -
zssapple:
taskList.jsp 中的问题解决:if(${sessio ...
JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子 -
793059909:
很详细
Jquery+Spring3+Struts2+Ibatis3框架源代码工程(含权限) -
aa00aa00:
一个中国移动的系统,呵呵,报错来的,现在调试好了
Jquery+Spring3+Struts2+Ibatis3框架源代码工程(含权限) -
小fi(FD):
楼主有考虑过用非关系型数据库实现吗?如果用非关系型数据库,对于 ...
动态表单分析
Dwr+ibatis+oracle9i入门例子(附源代码下载-JBuilder2006工程)
Dwr:用来应用处理事件,可以把JAVA类映射到JS中,由JS直接调用。
ibatis:SQL映射数据处理层,写好SQL,数据库,映射得到数据库中的数据。
oracle:那就是数据库了。
从哪里开始写呢?乱写吧。
先搞个效果图吧:
再介绍下LIB包:
classes12.jar 数据驱动包
commons-beanutils.jar
commons-logging.jar
apache库,我只用了数据类转换时用它。
log4j-1.2.14.jar 日志打印包
ibatis-sqlmap-2.jar,ibatis-dao-2.jar,ibatis-common-2.jar
IBATIS2 必需包。
dwr.jar DWR 包。
以上包大家就不用到官方去下了,我在附件中上传了。
ibatis 部分,我就不多讲了。我其它的文章里面有。
这里主要讲下 DWR 配置吧。
工程代码结构如图:
先说下DWR 服务类吧》
ResourceServer
这跟写其它的JAVA类没有什么区别。
只是要抛出些异常。
然后,主要几个方法的返回值,这个好象是固定的, map,boolean, VO 数据类。
接下来就说下DWR 配置文件吧。
这里定义DWR 服务类及方法,它可以让你的JAVA类在JS中使用;
定义你的数据类,让它可以在JS 使用。
WEB.xml 配置也比较简单
主要是加载 DWR
再说JS中的调用吧:
再说下JSP的展现吧:
其它的,你们自己看代码吧。。
Dwr:用来应用处理事件,可以把JAVA类映射到JS中,由JS直接调用。
ibatis:SQL映射数据处理层,写好SQL,数据库,映射得到数据库中的数据。
oracle:那就是数据库了。
从哪里开始写呢?乱写吧。
先搞个效果图吧:
再介绍下LIB包:
classes12.jar 数据驱动包
commons-beanutils.jar
commons-logging.jar
apache库,我只用了数据类转换时用它。
log4j-1.2.14.jar 日志打印包
ibatis-sqlmap-2.jar,ibatis-dao-2.jar,ibatis-common-2.jar
IBATIS2 必需包。
dwr.jar DWR 包。
以上包大家就不用到官方去下了,我在附件中上传了。
ibatis 部分,我就不多讲了。我其它的文章里面有。
这里主要讲下 DWR 配置吧。
工程代码结构如图:
先说下DWR 服务类吧》
ResourceServer
package cn.permissions.info.dwr.server; import cn.permissions.info.vo.*; import cn.permissions.info.service.*; import java.util.*; import cn.permissions.info.domain.*; import org.apache.commons.beanutils.*; public class ResourceServer { public ResourceServer(){ } public static void main(String[] args) { ResourceServer service = new ResourceServer(); try { java.util.Map map = service.getPageResourceInfoByMap("", "", "", 0, 0 ); System.out.println("count = "+map.get("count")); //service.delete("47"); // service.deleteOjb("328"); //Object obj = service.updateOjb("328","namepp",1,"depict","operid","resid"); // boolean oxxbj = service.saveObj("",1,"namepxxxxp","depict","operid"); } catch (Exception ex) { } } /** * 分面查询权限资源数据列表 * @param privilesge_name String 权限名称 * @param oper_id String 操作类型 * @param compID String 公司ID * @param empID String 操作员ID * @param deptID String 操作员所属部门 * @param startRow int 分面参数 * @param pageSize int 分面参数 * @return List * @throws Exception */ public Map getPageResourceInfoByMap(String resName,String resDepict,String moduleID, int startRow, int pageSize) throws Exception { Map map = new HashMap(); // int count = 0; Map map_param = new HashMap(); map_param.put("resName", resName); map_param.put("resDepict", resDepict); map_param.put("moduleID", moduleID); count = ResourceService.getInstance().getPageResourceInfoCount(map_param); map_param.put("startRow", startRow); map_param.put("pageSize", pageSize); List list = (java.util.List) ResourceService.getInstance().getPageResourceInfoByMap(map_param); List voList = new ArrayList(); Resource info = new Resource(); ResourceVO objvo = null; if (count > 0) { for (int i = 0; i < list.size(); i++) { info = (Resource) list.get(i); objvo = new ResourceVO(); BeanUtils.copyProperties(objvo, info); //System.out.println("@@###"+objvo.getModuleID()); voList.add(objvo); } } map.put("voList", voList); map.put("count", count); return map; } /** * 新增权限资源信息 * pri_name,pri_depict,oper_id,res_id,module_id * @return boolean */ public boolean saveInfo(String resName,int moduleID,String resDepict, String resStandBy1,String resStandBy2) { boolean bool = false; Resource obj = new Resource(); obj.setResName(resName); obj.setModuleID(moduleID); obj.setResDepict(resDepict); obj.setResStandBy1(resStandBy1); obj.setResStandBy2(resStandBy2); obj = ResourceService.getInstance().insertResource(obj); if (obj != null) { bool= true; } else { bool= false; } return bool; } /** * 修改权限资源信息 * **/ public ResourceVO updateInfo(String resID,String resName,int moduleID,String resDepict, String resStandBy1,String resStandBy2) { ResourceVO objVo = new ResourceVO(); Resource obj = new Resource(); obj.setResId(resID); obj.setResName(resName); obj.setModuleID(moduleID); obj.setResDepict(resDepict); obj.setResStandBy1(resStandBy1); obj.setResStandBy2(resStandBy2); try { BeanUtils.copyProperties(objVo, obj); } catch (Exception ex) { ex.printStackTrace(); } int result = ResourceService.getInstance().updateResource(obj); if (result > -1) { //setNameFromeID(objVo); return objVo; } else { return null; } } /** * 删除权限资源信息 * @param priID String * @return boolean */ public boolean deleteInfo(String priId) { /**删除权限资源信息*/ int result = ResourceService.getInstance().deleteResource(priId); if(result > -1) { return true; } else{ return false; } } }
这跟写其它的JAVA类没有什么区别。
只是要抛出些异常。
然后,主要几个方法的返回值,这个好象是固定的, map,boolean, VO 数据类。
接下来就说下DWR 配置文件吧。
<?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="new" javascript="ResourceServer"> <param name="class" value="cn.permissions.info.dwr.server.ResourceServer" /> </create> <convert converter="bean" match="cn.permissions.info.vo.ResourceVO"/> </allow> <signatures> <![CDATA[ import java.util.*; import cn.permissions.info.vo.*; ResourceServer.getPageResourceInfoByMap(String,String,String,int,int); ResourceServer.saveInfo(String,int,String,String,String); ResourceServer.updateInfo(String,String,int,String,String,String); ResourceServer.deleteInfo(String); ]]> </signatures> </dwr>
这里定义DWR 服务类及方法,它可以让你的JAVA类在JS中使用;
定义你的数据类,让它可以在JS 使用。
WEB.xml 配置也比较简单
主要是加载 DWR
<?xml version="1.0" encoding="UTF-8"?> <web-app 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" version="2.4"> <display-name>permissions</display-name> <filter> <filter-name>encodingFilter</filter-name> <filter-class>cn.permissions.info.filter.EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> <init-param> <param-name>contentType</param-name> <param-value>text/html; charset=GBK</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.directwebremoting.servlet.EfficientShutdownServletContextAttributeListener</listener-class> </listener> <listener> <listener-class>org.directwebremoting.servlet.EfficientShutdownServletContextListener</listener-class> </listener> <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>crossDomainSessionSecurity</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>maxWaitAfterWrite</param-name> <param-value>-1</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app>
再说JS中的调用吧:
var ResourcesInfoCache = {};//缓存对象 var opreatorStauts = 1;//操作标识,主要是区分新增与修改操作;1.新增;2.修改 var currIndex = -1;//当前索引 var id_del = "";//删除时辅助字段 var id_update = "";//修改时的辅助字段 var res_name; var module_id; //var compid = $("compId").value; /**资源管理JS*/ function init() { //alert("fillTable"); currentPage = 1; ResourceServer.getPageResourceInfoByMap('','','',(currentPage-1)*pageSize,pageSize,fillTable); dwr.util.useLoadingMessage("正在加载部门信息......"); } //刷新缓存 function flushCache(data) { ResourcesInfoCache = data; } //填充表格方法 function fillTable(data) { dwr.util.removeAllRows("ResourcesInfoBody"); var ResourcesInfo = data.voList; totalRows = data.count; var cellFuncs = [ function(ResourcesInfo) {return ResourcesInfo.resId; }, function(ResourcesInfo) {return ResourcesInfo.resName; }, function(ResourcesInfo) {return ResourcesInfo.resDepict; }, function(ResourcesInfo) {return ResourcesInfo.moduleName; }, function(ResourcesInfo) {} ]; dwr.util.addRows( "ResourcesInfoBody", ResourcesInfo , cellFuncs,{ rowCreator:function(options) { var row = document.createElement("tr"); if((options.rowIndex%2)==0) { row.className = "line2"; } else { row.className = "line3"; } return row; }, cellCreator:function(options) { if(options.cellNum==4){ var td = document.createElement("td"); td.setAttribute("align","center"); var thtml = "<a href=\"javascript:deleteInfo('" + options.rowIndex +"','"+ options.rowData.resId + "','" + options.rowData.resName + "');\" class=\"cz\">删除</a>"; thtml += " | <a href=\"javascript:updateInfo('" + options.rowIndex +"','"+ options.rowData.resId + "','"+ options.rowData.moduleID + "')\" class=\"cz\">修改</a>"; td.innerHTML = thtml; return td; } else { return document.createElement("td"); } } }); if(totalRows == 0) { currentPage = totalRows; } turnPage(); flushCache(ResourcesInfo); } /** * 查询资源 queryResourcesInfos var res_name; var module_id; **/ function queryInfo() { res_name = $("res_name_query").value; module_id = $("module_id_query").value; ResourceServer.getPageResourceInfoByMap(res_name,'',module_id,(currentPage-1)*pageSize,pageSize,fillTable); } /** * 此方法用途: * 分页跳转后填充表格数据 **/ function goPage() { res_name = $("res_name_query").value; module_id = $("module_id_query").value; ResourceServer.getPageResourceInfoByMap(res_name,'',module_id,(currentPage-1)*pageSize,pageSize,fillTable); } /** * 新增资源信息 **/ function addInfo(){ opreatorStauts = 1; showDialog("新增资源信息",addhtmlStr,'success'); } function saveInfo(){ if(!checkData()) { return ; } //pri_name,pri_depict,oper_id,res_id,module_id var res_name = $("res_name").value; var res_depict = $("res_depict").value; var module_id = $("module_id").value; //保存数据 alert("module_id = "+module_id); hideDialog(); // if(opreatorStauts == 1) { ResourceServer.saveInfo(res_name,module_id,res_depict,'','',callback); } else if(opreatorStauts == 2) { ResourceServer.updateInfo(id_update,res_name,module_id,res_depict,'','',updateCallback); } } function callback(msg) { var type = "success"; var value = "新增资源信息成功!"; if(!msg) { value = "新增资源信息失败!"; type = "error" } showDialog("新增资源信息",value,type,3); init(); } function updateCallback(msg) { var type = "success"; var value = "修改资源信息成功!"; if(!msg) { value = "修改资源信息失败!"; type = "error" } else { if(currIndex > -1) { ResourcesInfoCache[currIndex] = msg; updateFlush(currIndex); } } showDialog("修改资源信息",value,type,2); init(); } function updateInfo(index,id,modleId) { opreatorStauts = 2; id_update = id; var module_id=""; var ResourcesInfo = ResourcesInfoCache[index];//从缓存中按索引取数据 var res_name = ResourcesInfo.resName; var res_depict = ResourcesInfo.resDepict; var res_id = ResourcesInfo.resId; module_id = ResourcesInfo.moduleID; module_id = modleId; showDialog("修改资源信息",addhtmlStr,'success'); dwr.util.setValue("res_name",res_name); dwr.util.setValue("res_depict",res_depict); dwr.util.setValue("module_id",module_id); currIndex = index; } function updateFlush(index) { var rowObj = $("ResourcesInfoBody").rows[index];//获得修改行的数据 var ResourcesInfo = ResourcesInfoCache[index]; rowObj.cells[0].innerHTML = ResourcesInfo.ip; rowObj.cells[1].innerHTML = ResourcesInfo.companyname; rowObj.cells[2].innerHTML = ResourcesInfo.companystatic; } /** * 删除部门信息 **/ function deleteInfo(index,id,companyname) { id_del = id; var valueStr = '<font color="red">"确定要删除 "'+companyname+'",该资源信息吗?"</font>'; valueStr += '<table><tr><td align="center"><div id="dosubmit" style="height:30px;width:60px;background:url(../../images/dilog_ok.gif) no-repeat;cursor:pointer;" onclick="deleteGo();"></div></td><td align="center"><div id="dosubmit" style="height:30px;width:60px;background:url(../../images/dilog_cancel.gif) no-repeat;cursor:pointer;" onclick="hideDialog();"></div></td></tr></table>'; showDialog("删除资源信息",valueStr,'success'); } function deleteGo() { ResourceServer.deleteInfo(id_del,deleteCallback); } function deleteCallback(msg) { var type = "success"; var value = "删除资源信息成功!"; if(!msg) { value = "删除资源信息失败!"; type = "error" } showDialog("删除资源信息",value,type,2); init(); } /** * 校验方法 **/ function checkData() { if(!isNull(document.getElementById("res_name"))) { alert("请输入资源信息名称!"); document.getElementById("res_name").focus(); return false; } return true; }
再说下JSP的展现吧:
<%@page contentType="text/html; charset=GBK"%> <%@page import="java.util.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <link href="../../css/comm.css" type="text/css" rel="stylesheet"/> <link href="../../css/tablecss.css" type="text/css" rel="stylesheet"/> <link href="../../css/dialog_box.css" type="text/css" rel="stylesheet"/> <title>资源管理</title> </head> <body onload="init();"> <input type="hidden" name="compID" value=""> <input type="hidden" name="priID" value=""> <input type="hidden" name="empID" value=""> <input type="hidden" name="deptID" value=""> <center> <div id="tableValue" style="display:none"> <form id="form" method="post"> <table class="tableData" id="tableData" align="center" border="0" cellspacing="1" cellpadding="0"> <tr> <td width="30%" align="right">权限资源名称</td> <td align="left"> <input maxlength="18" size="18" name="res_name" type="text" value=""/> </td> </tr> <tr> <td width="30%" align="right">权限资源描述:</td> <td align="left"> <input type="text" name="res_depict" maxlength="18" size="18" value="" /> </td> </tr> <tr> <td width="30%" align="right">模块选择</td> <td align="left"> <select id="module_id"> <option value="">--请选择模块--</option> <option value="1">测试</option> </select> </td> </tr> <tr> <td width="30%"></td> <td align="left"> <br/> <div id="dosubmit" style="height:30px;width:60px;background:url(../../images/dilog_ok.gif) no-repeat;cursor:pointer;" onclick="saveInfo();"></div> <div id="dosubmit" style="height:30px;width:60px;background:url(../../images/dilog_cancel.gif) no-repeat;cursor:pointer;" onclick="hideDialog();"></div> </td> </tr> </table> </form> </div> <table width="100%" border="0" cellpadding="0" cellspacing="1" class="TableStyle"> <thead> <tr class="tools" align="left"> <td colspan="8"> <div id="navigator">资源管理-->资源数据列表</div> <div id="btngroup"> <ul> <li class="btn-add"><a href="javascript:addInfo();" class="btn-right">新增</a></li> <li class="btn-search"><a href="javascript:queryInfo();" class="btn-right">查询</a></li> </ul> <div style="float:right;font-size:12px;color:#000"> 资源名称: <input class="globalStyle" name="res_name_query" type="text"> 模块选择: <select id="module_id_query"> <option value="">--请选择模块--</option> <option value="1">测试</option> </select> </div> </div> </td> </tr> <tr class="line1"> <td>序列</td> <td>资源名称</td> <td>资源说明</td> <td>模块名称</td> <td align="center">操作</td> </tr> </thead> <tbody id="ResourcesInfoBody"></tbody> </table> <div id="turn" class="turnpage"> </div> </center> <script src="../../js/function.js" type="text/javascript"></script> <script type='text/javascript' src='<%=request.getContextPath()%>/dwr/interface/ResourceServer.js'></script> <script type='text/javascript' src='<%=request.getContextPath()%>/dwr/engine.js'></script> <script type='text/javascript' src='<%=request.getContextPath()%>/dwr/util.js'></script> <script type='text/javascript' src='<%=request.getContextPath()%>/js/permission_resource.js'></script> <script type='text/javascript' src='<%=request.getContextPath()%>/js/common.js'></script> </body> </html>
其它的,你们自己看代码吧。。
发表评论
-
SpringCloud2 从入门
2019-03-30 09:46 844首先初步认识下它: ... -
JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子
2017-09-22 14:58 933JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的 ... -
Maven3的POM.xml元素说明详解
2017-09-20 16:53 987Maven3的POM.xml元素说明 POM代表项目对象 ... -
MyBatis的foreach语句详解
2014-02-10 09:55 898foreach的主要用在构建in ... -
JSP获取所有参数并追加写入文件
2013-12-20 14:53 1145JSP获取所有参数并追加写入文件 <% ... -
Jquery+Spring3+Struts2+Ibatis3框架源代码工程(含权限)
2012-07-19 15:02 3762开发框架选择 Jquery1.6 + strust2.1 ... -
java开源-项目管理工具-java源代码
2012-03-17 15:11 3309因工作需要,想找些项目管理工具,找了一些,都觉得不 ... -
java 常用工具包(自己拓展)
2010-11-16 23:05 2901做了六七年的程序员,突然间发现自己常常去网上找工具类.怎么不自 ... -
请管理员删除此贴
2010-05-18 22:38 200rapid-framework一般的人应该不会陌生,国产的, ... -
java5, java6 的新特性
2010-05-09 22:36 1369下面简单的列出Java5和Ja ... -
Rapid-framework代码自动生成器
2010-05-08 22:36 1615rapid-framework是一个以spring为核心的we ... -
ibatis3 简单示例
2010-05-06 14:36 3177ibatis3 已经发布了。跟ib ... -
dwr+ibatis+mysql +jsp 权限管理平台源代码
2010-04-15 11:49 2019JBuilder开发的一个权限管理平台源代码,适用于常见的 ... -
Hibernate入门示例(架构图)
2010-04-09 08:55 2479在 Java Web 开发应用中,Hibernate可以作为 ... -
java cms MyEclipse6.0 工程代码
2010-04-07 14:46 2435JEECMS是国内Java版开源网站内容管理系统(java c ... -
ibatis MyEclipse 代码 源代码 分解
2010-01-28 17:03 1599前面,已经发个工程。现在讲下里面代码的具体功能和作用。 我也 ... -
java读取文件及文件流
2010-01-28 16:10 2712package cn.xx.io.util; imp ...
相关推荐
在这个"入门例子(eclipse 工程)"中,你将找到一个演示如何在Eclipse环境中配置和使用DWR的实例,特别关注的是如何实现图片的无刷新显示。 1. **DWR的基本概念**: - **Web Remoting**:DWR的核心是提供了一种...
在这个"DWR入门例子"中,我们将深入探讨如何使用DWR进行服务器和客户端之间的数据交换。 1. **DWR基本概念** - **反向AJAX**: DWR的核心理念是反向AJAX,即由服务器主动向客户端推送数据,而不仅仅是响应客户端的...
这可能是一个重复的文件,或者包含了与dwr.jar和dwr-2.0.5-src.zip不同的内容,比如可能是DWR的配置文件、文档或者特定环境的构建版本。通常,这样的zip文件会包含部署所需的全部资源,包括Web应用的结构和配置文件...
NULL 博文链接:https://atgoingguoat.iteye.com/blog/620103
《深入解析DWR 2.0.3源代码》 DWR(Direct Web Remoting)是一种JavaScript库,它使得在Web浏览器与Java服务器之间进行实时通信成为可能,从而实现了Ajax应用的强大功能。DWR 2.0.3是其一个重要的版本,提供了更...
JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源...
本教程“DWR入门教程及实例(含源代码)”旨在帮助初学者快速掌握DWR的基本概念和使用方法。教程内容可能包括以下几个核心知识点: 1. **DWR概述**:讲解DWR的基本理念,如何通过HTTP协议实现JavaScript与Java之间...
标题 "dwr入门 -- 03 -- 结合Spring" 指向的是一个关于Direct Web Remoting (DWR)框架如何与Spring框架整合的教程。DWR是一个Java库,允许在浏览器和服务器之间进行实时、双向通信,使得JavaScript可以直接调用Java...
<servlet-name>dwr-invoker</servlet-name> <display-name>DWR Servlet</display-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param...
在“dwr入门例子 返回list”这个主题中,我们将深入探讨如何使用DWR从服务器返回列表数据到客户端。列表通常包含多个项目,如数据库查询结果,这些数据可以在网页上以表格或其他形式展示给用户。DWR提供了方便的方法...
本入门例子旨在帮助初学者快速理解并掌握DWR的基本用法和功能。 1. **DWR的基本概念** DWR的核心理念是通过XMLHttpRequest对象实现在客户端与服务器之间的异步数据交换,这使得用户可以在不刷新整个页面的情况下...
这个例子可以帮助初学者理解DWR的工作原理和如何实际使用它。 通过学习和实践DWR,你可以快速构建交互性更强、响应更快的Web应用,提升用户的交互体验。DWR的易用性和强大的功能使其成为开发AJAX应用的理想选择。
- **准备环境**:首先,需要下载DWR的jar包,如dwrc.jar,将其放入项目的lib目录下。 - **创建Web项目**:创建一个新的Web项目,例如名为sayHello。 - **编写Java类**:创建一个名为SayHello的Java类,包含要暴露...
**DWR(Direct Web Remoting)入门教程 -- Hello World** DWR(Direct Web Remoting)是一种JavaScript库,它允许在浏览器和服务器之间进行实时、安全的双向通信,从而实现Web应用中的Ajax功能。通过DWR,开发者...
- `dwr-generate.js`:自动生成的JavaScript接口文件,包含了服务器端Java类的映射。 - `index.html`:展示用户界面的HTML文件,包含JavaScript代码来调用DWR方法。 - `Calculator.java`:服务器端的Java类,实现...
- 在Web工程中,需要配置`dwr.xml`文件,定义哪些Java类和方法可以被JavaScript访问。 - 配置包括:设置安全策略、映射类和方法、设置转换器等。 3. **DWR的使用步骤**: - 创建Java类并暴露需要调用的方法。 -...
**标题:“一个简单的DWR入门例子”** **概述:** Direct Web Remoting (DWR) 是一种开源JavaScript库,它允许在Web浏览器和Java服务器之间进行实时、双向通信,简化了Ajax应用程序的开发。这个入门例子将帮助我们...
【标题】"Dwr入门例子(初学者用的)"是一个针对初学者的教程,主要讲解了Direct Web Remoting (DWR)的基本概念和使用方法。DWR是一个Java库,允许在浏览器和服务器之间进行实时的JavaScript到Java的通信,简化了AJAX...