DWR提供了两个js文件:engine.js和util.js,通常来说我们都是动态来引用这两个js文件,在官方的例子中也是这样做的(其中dwr是mapping时的路径):
- < script type = “ text/javascript “ src = “ /dwr/engine.js “ ></ script >
- < script type = “ text/javascript “ src = “ /dwr/util.js “ ></ script >
但是根据页面优化原则,我们如果将所有的js文件进行压缩整合在一起 的话将会极大的减少页面加载的时间。但是当我们将上面的两个js文件下载下来然后跟其他js文件整合压缩之后,访问页面的时候会出现一个“例外被抛出且未被接住”的脚本错误。
用百度搜索了一下基本只搜到一篇名为《dwr应用时请注意(初学者)》 的文章,文章中建议使用他在附件中所提供的dwr.jar包。但是作者所提供的dwr版本有些低,另外作者并没有在文章中说明造成问题的原因。
后来将异常转换为英文 Exception thrown and not caught 在google中搜索了一下,得知是因为没有在页面中动态引用engine.js,因为dwr在运行的时候需要动态控制这个文件。
但是这样的话就达不到压缩engine.js文件的目的了,我无意中在官方看到一篇专门讲解怎样缓存engine.js文件的文章 ,下面我就将作者建议的做法说明如下:
首 先使用动态加载engine.js文件,然后将该文件下载下来。打开下载下来的engine.js文件,然后将第226到242行之间的文字剪切下来,然 后将dwr.jar包中的org/directwebremoting/engine.js文件内容删除,然后粘贴到该文件中并替换dwr.jar包中原 来的engine.js文件,内容大致如下:
- dwr . engine . _origScriptSessionId = “ ${scriptSessionId} “ ;
- dwr . engine . _sessionCookieName = “ ${sessionCookieName} “ ;
- dwr . engine . _allowGetForSafariButMakeForgeryEasier = “ ${allowGetForSafariButMakeForgeryEasier} “ ;
- dwr . engine . _scriptTagProtection = “ ${scriptTagProtection} “ ;
- dwr . engine . _defaultPath = “ ${defaultPath} “ ;
- dwr . engine . _pollWithXhr = “ ${pollWithXhr} “ ;
这样就可以将下载下来的engin.js文件同其他文件进行压缩合并了,但是在页面中还必须动态引用engine.js:
- < script type = “ text/javascript “ src = “ /dwr/engine.js “ ></ script >
这样一来即压缩了engine.js文件中静态的部分,又使用了engine.js中的动态部分,并且最重要的是“例外被抛出且未被接住”异常也不会再出现了。
参考资料:
Caching engine.js
今天的文章使用DWR出现“例外被抛出且未被接住”错误的原因和解决办法分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/23981.html