接触dwr(参考链接http://www.java3z.com/cwbwebhome/article/article2/2848.html?id=1459)

DWR是一个开源库,使JavaScript能够调用服务器端的Java方法,从而简化AJAX开发。本文介绍DWR的工作原理及其实现机制,包括其两部分组件:JavaScript与Servlet的交互方式以及如何生成动态JavaScript代码。

刚开始看到js里面赤裸裸的直接调用java内容,很是不解,以为这里就是错误的根源,可是转念一想“存在即合理”,我还是百度几下吧。

作为一个java open source library,DWR可以帮助开发人员完成应用AJAX技术的web程序。它可以让浏览器上的javascript方法调用运行在web服务器上java方法。

DWR主要由两部分组成。javascript与web服务器通信并更新web页;运行在web服务器的Servlet处理请求并把响应发回浏览器。

DWR采用新颖的方法实现了AJAX(本来也没有确切的定义),在java代码基础上动态的生成javascript代码。web开发者可以直接调用这些javascript代码,然而真正的代码是运行在web服务器上的java code。出与安全考虑,开发者必须配置哪些java class暴露给DWR.(dwr.xml)

这种从(java到javascript)调用机制给用户一种感觉,好象常规的RPC机制,或RMI or SOAP.但是它运行在web上,不需要任何浏览器插件。

DWR不认为浏览器和web服务器之间协议重要,把系统界面放在首位。最大挑战是java method call的同步特征与ajax异步特性之间的矛盾。在异步模型里,结果只有在方法结束后才有效。DWR解决了这个问题,把回调函数当成参数传给方法,处理完成后,自动调用回调方法。

这个图表显示了,通过javascript事件,DWR能改变select的内容,当然这些内容由java代码返回。 javascript函数Data.getOptions(populateList)由DWR动态生成,这个函数会调用java class Data类的方法。DWR处理如何远程调用,包括转换所有的参数和返回的结果(javascript\java)。java方法执行完后,执行回调方法populateList。在整个过程中我们就想在用本地的方法一样。

2、Examples
http://www.aboutmyhealth.org/ 这不是Google Suggest吗!ok.

<think>好的,我现在需要解决用户提到的两个问题:一个是关于`xmlns:jsp`的命名空间报错,另一个是`dwr20.dtd` URL未注册的问题。首先,我得先理解这两个问题的具体原因。 对于`xmlns:jsp`的报错,用户可能是在XML配置文件中使用了类似`xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp"`的声明,但系统无法找到对应的schema或DTD。这可能是因为这个URL已经过时或者无法访问。我记得Java EE的命名空间现在可能由Jakarta EE维护,原来的Sun/Oracle的URL可能已经失效了。需要确认正确的命名空间URL,或者是否需要引入相关的XSD文件到本地。然后是`dwr20.dtd`的问题,用户之前已经提过,之前的回答建议使用本地DTD或升级到使用XSD的DWR版本。可能用户这次的问题是在配置DWR时同时遇到了这两个问题,需要综合解决。可能需要检查DWR配置文件中的DOCTYPE声明是否正确,以及是否处理了JSP命名空间的引用。接下来,我需要分步骤解决这两个问题。对于`xmlns:jsp`报错,可能需要更新命名空间的URL到正确的地址,或者配置实体解析器来本地解析。例如,Jakarta EE的命名空间可能使用新的URL,或者用户需要将XSD文件下载到本地项目中,然后在XML中引用本地路径,同时设置解析器从classpath加载。对于`dwr20.dtd`的问题,之前的解决方案仍然适用,即下载DTD文件到本地,修改DOCTYPE声明指向本地路径,并配置解析器使用本地文件。或者升级到DWR3.x版本,使用XSD代替DTD,这样可以避免DTD的问题。 用户可能同时使用DWR和JSP标签库,因此需要确保两者的命名空间都正确配置。可能需要检查XML文件的头部声明,确保所有命名空间的URL都是有效且可访问的,或者已被正确映射到本地资源。 另外,可能需要考虑XML解析器的配置,比如在Spring或应用服务器中设置EntityResolver,以处理这些外部资源的引用。例如,使用Spring的`ResourceEntityResolver`来从classpath中加载这些DTD或XSD文件。还需要验证用户是否在配置文件中正确混合了不同的命名空间,比如是否在DWR的配置文件中错误地引入了JSP的命名空间,导致解析错误。需要检查XML文件的结构,确保每个命名空间的使用都是正确且必要的。 最后,可能需要提供具体的配置示例,比如如何修改DWR的配置文件,如何引入本地的DTD和XSD,以及如何设置解析器。同时,提醒用户在升级DWR版本时注意兼容性问题,并测试配置更改后的应用是否正常运行。</think>### 解决`xmlns:jsp`命名空间与`dwr20.dtd`未注册问题 --- #### 一、`xmlns:jsp`命名空间报错分析 当XML配置文件中包含以下声明时: ```xml <beans xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"> ``` 若报错`无法定位命名空间http://java.sun.com/xml/ns/javaee/jsp`,原因可能是: 1. **过时命名空间URL** Java EE规范已迁移至Jakarta EE,原Sun/Oracle的命名空间URL失效[^1]。 2. **缺少本地Schema文件** 未配置XSD文件本地映射,导致XML解析器无法验证。 --- #### 二、综合解决方案 ##### 1. 更新命名空间声明 **针对JSP命名空间**: - 使用Jakarta EE的新URL: ```xml xmlns:jsp="https://jakarta.ee/xml/ns/jakartaee/jsp" ``` - 或直接引用本地XSD文件(需下载`web-jsptaglibrary_3_1.xsd`): ```xml xmlns:jsp="classpath:/schemas/jakartaee/web-jsptaglibrary_3_1.xsd" ``` **针对DWR命名空间**: - 升级到DWR 3.x并改用XSD: ```xml xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr" xsi:schemaLocation="http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd" ``` ##### 2. 配置本地DTD/XSD解析 **步骤**: 1. 下载资源文件: - `dwr20.dtd` → `src/main/resources/dtd/dwr20.dtd` - `web-jsptaglibrary_3_1.xsd` → `src/main/resources/schemas/jakartaee/web-jsptaglibrary_3_1.xsd` 2. 配置XML解析器实体解析: ```java SAXReader reader = new SAXReader(); reader.setEntityResolver((publicId, systemId) -> { if (systemId.contains("dwr20.dtd")) { return new InputSource(getClass().getResourceAsStream("/dtd/dwr20.dtd")); } else if (systemId.contains("web-jsptaglibrary")) { return new InputSource(getClass().getResourceAsStream("/schemas/jakartaee/web-jsptaglibrary_3_1.xsd")); } return null; }); ``` ##### 3. 完整配置示例 ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jsp="https://jakarta.ee/xml/ns/jakartaee/jsp" xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr" xsi:schemaLocation=" http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd"> <dwr:configuration> <dwr:init/> </dwr:configuration> </beans> ``` --- #### 三、验证方法 1. **IDE静态检查** 在IntelliJ/Eclipse中打开XML文件,应无红色错误提示。 2. **启动时日志监控** 检查应用启动日志中是否包含`XML validation skipped`或`Successfully loaded DTD/XSD`类信息。 3. **网络请求拦截** 使用Wireshark过滤`http://java.sun.com`和`dwr20.dtd`的请求,确认无404响应。 --- #### 四、关联配置参数 | 配置项 | 作用 | 示例值 | |--------|------|--------| | `xmlns:jsp` | JSP标签库命名空间 | `https://jakarta.ee/xml/ns/jakartaee/jsp` | | `EntityResolver` | 自定义实体解析策略 | 如上述Java代码示例 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值