`
zengbo0710
  • 浏览: 418231 次
社区版块
存档分类
最新评论
阅读更多

同样的web.xml,dwr.xml在本机的resin3.0,Tomcat5下始终不能配置成功,而放到内网却可以。不管内网还是本机,始终提示那个js文件没有找到,没有生成。

以下摘录工作原理:

通过研究uk.ltd.getahead.dwr.DWRServlet这个servlet来研究下dwr到底是如何工作滴。

代码
  1. web.xml配置   
  2. <servlet>  
  3.     <servlet-name>dwr-invoker</servlet-name>  
  4.     <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>  
  5.   </servlet>  
  6.   <servlet-mapping>  
  7.     <servlet-name>dwr-invoker</servlet-name>  
  8.     <url-pattern>/dwr/*</url-pattern>  
  9. </servlet-mapping>  

 


这样所有的/dwr/*所有请求都由这个servlet来处理,它到底处理了些什么能。我们还以上面最简单的例子来看。
1、 web服务器启动,DWRServlet init()方法调用,init主要做了以下工作。
设置日志级别、实例化DWR用到的单例类(这些类在jvm中只有一个实例对象)、读去配置文件(包括dwr.jar包中的dwr.xml,WEB-INF/dwr.xml. config*.xml)。
2、请求处理
DWRServlet.doGet, doPost方法都调用processor.handle(req, resp)方法处理。Processor对象在init()方法中已经初始化了。

代码
  1. public void handle(HttpServletRequest req, HttpServletResponse resp)   
  2.         throws IOException   
  3.     {   
  4.         String pathinfo = req.getPathInfo();   
  5.         if(pathinfo == null || pathinfo.length() == 0 || pathinfo.equals("/"))   
  6.         {   
  7.             resp.sendRedirect(req.getContextPath() + req.getServletPath() + '/' + "index.html");   
  8.         } else  
  9.         if(pathinfo != null && pathinfo.equalsIgnoreCase("/index.html"))   
  10.         {   
  11.             doIndex(req, resp);   
  12.         } else  
  13.         if(pathinfo != null && pathinfo.startsWith("/test/"))   
  14.         {   
  15.             doTest(req, resp);   
  16.         } else  
  17.         if(pathinfo != null && pathinfo.equalsIgnoreCase("/engine.js"))   
  18.         {   
  19.             doFile(resp, "engine.js""text/javascript");   
  20.         } else  
  21.         if(pathinfo != null && pathinfo.equalsIgnoreCase("/util.js"))   
  22.         {   
  23.             doFile(resp, "util.js""text/javascript");   
  24.         } else  
  25.         if(pathinfo != null && pathinfo.equalsIgnoreCase("/deprecated.js"))   
  26.         {   
  27.             doFile(resp, "deprecated.js""text/javascript");   
  28.         } else  
  29.         if(pathinfo != null && pathinfo.startsWith("/interface/"))   
  30.         {   
  31.             doInterface(req, resp);   
  32.         } else  
  33.         if(pathinfo != null && pathinfo.startsWith("/exec"))   
  34.         {   
  35.             doExec(req, resp);   
  36.         } else  
  37.         {   
  38.             log.warn("Page not found. In debug/test mode try viewing /[WEB-APP]/dwr/");   
  39.             resp.sendError(404);   
  40.         }   
  41.     }  


哦。这些恍然大悟。dwr/*处理的请求也就这几种。
(1)dwr/index.html,dwr/test/这种只能在debug模式下使用,调试用。
dwr/engine.js,dwr/util.js,dwr/deprecated.js当这个请求到达,从dwr.jar包中读取文件流,响应回去。(重复请求有缓存)
(2)当dwr/interface/这种请求到来,(例如我们在index.html中的 <script type='text/javascript' src='dwr/interface/JDate.js'></script>)DWR做一件伟大的事。把我们在WEB-INF/dwr.xml中的
<create creator="new" javascript="JDate">
<param name="class" value="java.util.Date"/>
</create>
java.util.Date转化为javascript函数。
http://localhost:port/simpledwr/dwr/interface/JDate.js看看吧。
细节也比较简单,通过java反射,把方法都写成javascript特定的方法。(我觉得这些转换可以放到缓存里,下次调用没必要再生成一遍,不知道作者为什么没这样做)。
(3)dwr/exec
javascript调用方法时发送这种请求,可能是XMLHttpRequest或IFrame发送。
当然,javascript调用的方法签名与java代码一致,包括参数,还有javascript的回调方法也传到了服务器端,在服务器端很容易实现。回调方法的java的执行结果 返回类似 <script>callMethod(结果)<script>的javascript字符串,在浏览器执行。哈,一切就这么简单,巧妙。

dwr的设计构思很是巧妙。
第一、把java类转化为javascript类由dwr自动完成,只需简单的配置。
第二、应用起来极其简单。开发者不要该服务器代码就可以集成。
第三、容易测试。和webwork一样,隐藏的http协议。
第四、及强扩展性。例如与spring集成,只需修改一点代码。
第五、性能。就我与jason,等简单比较,dwr性能可能是最好的。
第六、自动把java对象转化为javascript对象,并且及易扩展

 

分享到:
评论

相关推荐

    springboot156基于SpringBoot+Vue的常规应急物资管理系统.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    scikitlearn Python中的机器学习.zip

    python

    通过验证的遗传优化BP神经网络程序-C程序.doc

    ===如资源质量问题,可半价退款,代下全网资源,价格公道==== 通过验证的遗传优化BP神经网络程序-C程序.doc 注:本程序是首先用遗传算法优化神经网络的权值和阈值,然后进行神经网络的学习运算。其中一些参数的值可以根据需要进行修改。神经网络结构是简单的三层结构,可以根据具体情况增加隐层,相应的更改程序。 遗传优化的BP神经网络是一种利用遗传算法改进反向传播(Backpropagation, BP)神经网络的学习效率和性能的方法。在该程序中,首先通过遗传算法对神经网络的权重和阈值进行优化,随后进行神经网络的学习计算。这种方法有助于神经网络在训练过程中避免陷入局部最优,提高整体的泛化能力。 在C语言实现的这个遗传优化BP神经网络程序中,我们可以看到以下几个关键部分: 1. **种群管理**:`POPSIZE` 定义了种群的大小,即有多少个神经网络的权重和阈值组合。在这个例子中,种群大小被设定为20。每个个体代表一个神经网络的配置,由`chromlength`定义的染色体长度表示。 2. **网络结构**:神经网络采用三层结构,包括输入层、隐藏层和输出层。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    2023-04-06-项目笔记 - 第三百七十五阶段 - 4.4.2.373全局变量的作用域-373 -2025.01.11

    2023-04-06-项目笔记-第三百七十五阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.373局变量的作用域_373- 2025-01-11

    MMC冷热冗余故障控制simulink仿真 0.295s SM1断路 0.3s SM1旁路开关闭合 0.5s SM2短路 0.505s SM2旁路开关闭合 0.7s 冷备用模块投入 0.995s SM

    MMC冷热冗余故障控制simulink仿真 0.295s SM1断路 0.3s SM1旁路开关闭合 0.5s SM2短路 0.505s SM2旁路开关闭合 0.7s 冷备用模块投入 0.995s SM3断路 1s SM3旁路开关闭合 1.2s SM4断路 1.205s SM4旁路开关闭合

    没有样板的Python类.zip

    python

    驾校管理系统 JAVA毕业设计 源码+数据库+论文+启动教程(SpringBoot+Vue.JS).zip

    ===如资源质量问题,可半价退款,代下全网资源,价格公道==== 驾校管理系统 JAVA毕业设计 源码+数据库+论文+启动教程(SpringBoot+Vue.JS) 项目启动教程:https://www.bilibili.com/video/BV11ktveuE2d。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    基于非下采样小波包分析的轴承故障诊断 代码运行环境为MATLAB r2021b,非下采样小波包变执行信号的等带宽精细滤波,而不是离散小波变中的较粗糙的倍频程滤,而且很好的缓解了小波包变中的时间分辨

    基于非下采样小波包分析的轴承故障诊断 代码运行环境为MATLAB r2021b,非下采样小波包变执行信号的等带宽精细滤波,而不是离散小波变中的较粗糙的倍频程滤,而且很好的缓解了小波包变中的时间分辨率损失,这使得非下采样小波包在许多应用中比小波包或离散小波变表现的更好。 ?以150 和 200 Hz 的两个间歇正弦波为例,看一下非下采样小波包的时频谱图和离散小波变的时频谱图,效果显而易见。 同时以某一轴承外圈故障故障振动信号为例,看一下其分解得到的子频带包络谱,可见第3个子带和第8个子带的包络谱故障特征频率较为明显,不妨重新看一下,故障特征频率非常清楚了 面包多代码下载

    App Inventor2 的离线环境包

    App Inventor2 的离线环境包

    ouc2024秋攻防先导作业

    ouc2024秋攻防先导作业

    springboot184基于springboot的校园网上店铺的设计与实现.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    Ansys maxwell 建立永磁同步电机模型静态仿真(手把手超详细)

    1.1 建立工程:这是建模的第一步,需要创建一个新的工程文件。 1.2 绘制几何模型 1.2.1 定子槽和定子槽中的导体 1) 定子槽:介绍如何绘制定子槽,并提到了Edit/Duplicate/Mirror的用法。 2) 定子槽中导体:介绍如何在定子槽中绘制导体。 1.2.2 绘制定子铁芯:介绍如何绘制定子铁芯。 1.2.3 绘制转子铁芯:介绍如何绘制转子铁芯。 1.2.4 绘制永磁体:介绍如何绘制永磁体。 1.2.5 绘制运动边界:介绍如何绘制运动边界。 1.2.6 设置各部件材料属性:介绍如何设置各个部件的材料属性。 1.2.7 设置绕组激励与边界条件:介绍如何设置绕组的激励和边界条件。 1.2.8 设置边界:介绍如何设置边界条件。 1.2.9 设置剖分参数与剖分操作:介绍如何设置剖分参数并进行剖分操作。 1.2.10 求解设置:介绍如何设置求解参数。

    Python中的模糊字符串匹配.zip

    python

    Python机器学习课程.zip

    python

    drone hacks 无人机刷机工具,2.0版本

    大疆无人机升级了mini3pro rom下载工具

    springboot130社团管理系统.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    更快的RCNN Python实现见.zip

    python

    深圳建筑工程公司生产管理制度.docx

    深圳建筑工程公司生产管理制度

    fluent UDF 中文介绍.zip

    ===如资源质量问题,可半价退款,代下全网资源,价格公道==== Fluent UDF(User Defined Functions)是Ansys Fluent软件中的一个关键特性,允许用户自定义流体动力学模型,以解决特定的复杂流动问题。这个压缩包“fluent UDF中文介绍.zip”包含了马世虎翻译的中文手册,为中文使用者提供了关于Fluent UDF的详细指导。 1. **UDF基础**: UDF是C语言编写的,用于扩展Fluent内置物理模型的功能。用户可以编写UDF来定义新的源项、边界条件、湍流模型、化学反应机制等。UDF由函数定义、数据结构和初始化部分组成。 2. **UDF编写过程**: - 函数定义:UDF的核心是用户定义的计算函数,如源项函数、速度函数等。 - 数据结构:了解并正确使用Fluent的数据结构是编写UDF的关键,这包括流场变量、数组、边界条件等。 - 初始化:在启动求解前,UDF需要进行初始化,例如设置初始条件或读取用户输入。 3. **UDF结构**: - `FUNCTION`声明:定义UDF的入口函数,如`void 。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    双闭环永磁同步电机调速系统(SVPWM) 主电路采用两电平逆变器,永磁同步电机参数已设定,采用空间矢量PWM控制,扇区选择、中间变量、矢量作用时间、切点等模块均搭建完成 控制系统采用双闭环控制系统

    双闭环永磁同步电机调速系统(SVPWM) 主电路采用两电平逆变器,永磁同步电机参数已设定,采用空间矢量PWM控制,扇区选择、中间变量、矢量作用时间、切点等模块均搭建完成。 控制系统采用双闭环控制系统,包括电流内环与转速外环两个控制环,均采用PI调节器,调节器参数已设定,其中电流内环采用内模控制,转速外环采用经典PI算法,从而得到仿真中PI调节器参数。 转速波形、电流波形、转矩波形均从仿真过程中得出。

Global site tag (gtag.js) - Google Analytics