DWR 关于 自动生成的 js文件的疑惑。

问题描述

本人今天开始学习DWR,按照参考书上做了一个Hello Name的例子,有三点不明白的地方。1.我在jsp页面引用<script type="text/javascript" src="dwr/interface/service.js"></script>这个service.js是哪里来的(当然了,我知道是自动生成的,但是这个东西放在哪里?)2.我按照书上的说明将engine.js和util.js两个js文件放置在工程目录下的jscript文件夹里,并在jsp页面引用<script type="text/javascript" src="jscript/engine.js"></script><script type="text/javascript" src="jscript/util.js"></script>结果报错:A request has been denied as a potential CSRF attack.3.我通过网上的方法,网上提供两种方法, 我只用第二种简单的,就是将jscript/engine.js和jscript/util.js改为:dwr/engine.js和dwr/util.js(也就是更改了js文件存放的目录),结果可以运行,但是我就郁闷了,dwr这个目录以及里面的js文件根本不存在啊,并且我在浏览器里输入:http://10.81.66.173/dwr_1/dwr/engine.js它又弹出engine.js的文件下载框,说明存在该文件,但是明明我找不到啊,自动生成的也应该至少存在把。怎么隐身了啊。在这里跟大家交个朋友,请大家帮我看看是什么原因。 问题补充:恩,谢谢大家,我找到原因了,我把源码拿过来看了一下,果然是从自带的包里面把js读出来。。。 public void handle(HttpServletRequest request, HttpServletResponse response) throws IOException { if (dynamic) { response.setHeader("pragma", "public"); response.setHeader("Expires", "0"); response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); } if (!dynamic && isUpToDate(request)) { response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); return; } String output; synchronized (scriptCache) { output = (String) scriptCache.get(filePath); if (output == null) { StringBuffer buffer = new StringBuffer(); String resource = DwrConstants.PACKAGE + filePath; InputStream raw = getClass().getResourceAsStream(resource); if (raw == null) { throw new IOException("Failed to find resource: " + resource); } BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(raw)); while (true) { String line = in.readLine(); if (line == null) { break; } if (dynamic) { if (line.indexOf(PARAM_SCRIPT_COOKIENAME) != -1) { line = LocalUtil.replace(line, PARAM_SCRIPT_COOKIENAME, sessionCookieName); } if (line.indexOf(PARAM_SCRIPT_POLLXHR) != -1) { line = LocalUtil.replace(line, PARAM_SCRIPT_POLLXHR, pollWithXhr); } if (line.indexOf(PARAM_SCRIPT_SESSIONID) != -1) { line = LocalUtil.replace(line, PARAM_SCRIPT_SESSIONID, generator.generateId(pageIdLength)); } if (line.indexOf(PARAM_SCRIPT_ALLOWGET) != -1) { line = LocalUtil.replace(line, PARAM_SCRIPT_ALLOWGET, String.valueOf(allowGetForSafariButMakeForgeryEasier)); } if (line.indexOf(PARAM_SCRIPT_TAG_PROTECTION) != -1) { line = LocalUtil.replace(line, PARAM_SCRIPT_TAG_PROTECTION, scriptTagProtection); } if (line.indexOf(PARAM_DEFAULT_PATH) != -1) { String path = request.getContextPath() + request.getServletPath(); if (overridePath != null) { path = overridePath; } line = LocalUtil.replace(line, PARAM_DEFAULT_PATH, path); } } buffer.append(line); buffer.append('n'); } } finally { LocalUtil.close(in); } output = buffer.toString(); if (mimeType.equals(MimeConstants.MIME_JS) && scriptCompressed) { output = JavascriptUtil.compress(output, compressionLevel); } if (!dynamic) { scriptCache.put(filePath, output); } } } response.setContentType(mimeType); response.setDateHeader(HttpConstants.HEADER_LAST_MODIFIED, servletContainerStartTime); response.setHeader(HttpConstants.HEADER_ETAG, etag); PrintWriter out = response.getWriter(); out.println(output); }

解决方案

这两个js是确实存在的,你浏览器输入的地址只是网络映射地址,而这两个js实际是放在dwr.jar包里面的,是通过org.directwebremoting.servlet.DwrServlet解析的,因为这个servlet拦截的就是/dwr/*的地址。
解决方案二:
补充一点,楼主可以参照官方发布的一个简单例子,如果可以阅读简单英文的话,那就更容易入门了!!!http://directwebremoting.org/dwr/introduction/getting-started.html
解决方案三:
引用2.我按照书上的说明将engine.js和util.js两个js文件放置在工程目录下的jscript文件夹里,并在jsp页面引用-- 关于这点,我不理解!因为现在的DWR并不存在这两个js文件在web.xml中,我们作如下配置:<servlet-mapping><servlet-name>dwr-invoker</servlet-name><url-pattern>/dwr/*</url-pattern></servlet-mapping>这意味着,不管是dwr/interface/service.js,还是dwr/engine.js,其最终都是交给dwr-invoker(这里指org.directwebremoting.servlet.DwrServlet)处理。我觉得楼主是纠结于为什么请求路径中包含后缀名是*.js,而实际上不存在engine.js的javascript文件这一问题吧!!举个例子,我们创建一个Servlet(可以输出“hello”),然后在web.xml中作如下配置:<servlet-mapping><servlet-name>myServlet</servlet-name><url-pattern>/main.html</url-pattern></servlet-mapping><servlet-mapping><servlet-name>myServlet</servlet-name><url-pattern>/main.js</url-pattern></servlet-mapping>这样,不管你在浏览器中输入http://localhost/main.html,或是http://localhost/main.js,最终都是输出“hello”

时间: 2024-10-24 06:56:58

DWR 关于 自动生成的 js文件的疑惑。的相关文章

基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这样给我们扩展使用有很多的不方便.基于这个原因,我想如果能够独立一个模块,自动根据图标生成图标CSS样式文件,并存储相应的记录到数据库里面,方便我们查询显示,那样我们使用起来就很方便了,最后有了这些数据,只需要做一个通用的图标选择界面,并可以在很多地方重用了.本文正是基于这个思路,开发了一个图标管理模

java-大家来看看 为什么我的eclipse 没有自动生成web.xml文件呢。。。。。

问题描述 大家来看看 为什么我的eclipse 没有自动生成web.xml文件呢..... 解决方案 你在创建工程的时候,没有走到最后的那个可以选择是否要生成web.xml的界面,而你的eclipse又是默认未选中,所以就没有web.xml文件. 1.重新创建工程: 2.从其它工程中随便复制一个web.xml过来. 解决方案二: 创建过程中请仔细看一下. 解决方案三: n你创建工程的时候是不是直接finish了,可以点几次下一步,就会有选项提示自动创建web.xml文件了 解决方案四: web.

makefile问题-为何没有编译。c文件会自动生成。o文件,这是啥原理,求解答

问题描述 为何没有编译.c文件会自动生成.o文件,这是啥原理,求解答 解决方案 生成了.o文件那就是编译了,要想生成可执行文件用-o选项. 解决方案二: make肯之后会会生成o文件 解决方案三: o就是目标文件,你make肯定除触发了编译器编译.才会生成o文件

Eclipse下编写java程序突然不会自动生成R.java文件和包的解决办法_java

下面给大家介绍几种比较常见的解决办法,具体内容如下: 1.有时候eclipse不自动编译,把project clean一下,让R.java重新生成 2.选择菜单 Project >> Clean ,前提是勾选上 Bulid Automatically(自动构建部署) , 点Clean后会重新构建项目,因为一般情况下,R.java文件在这个时候会重新更新生成一边,如果工程有错,就不会自动生成. 3.选择工程,右键 Android Tools >> Fix Project Proper

彻底解决使用Doxygen 1.5.6自动生成的chm文件导航栏中文乱码问题

最近升级了一下doxygen到最新版1.5.6,结果发现生成的chm文件导航栏中文会出现乱码,折腾了一天,终于查明原因并解决,特此分享给大家. 原因: doxygen 1.5.6版(不知道从哪个版本开始的)内部一律使用UTF-8编码,生成的index.hhc文件也是使用UTF-8编码,然而微软的hhc编译工具不支持UTF-8编码,结果导致编译出的chm文件正文部分中文一切正常,但导航栏全是乱码.从网上搜了一圈,好像大家基本都遇到了这一情况,解决办法各异. 解决办法: 解决办法的核心就是将inde

为 Python 项目自动生成的依赖文件 Pigar

Pigar 详细介绍 Pigar 是为 Python 项目自动生成精确无误的依赖文件. 用 pip 安装: $ [sudo] pip install pigar pigar 能找区别不同 Python 版本之间的差异,非常精确,并找出依赖包在代码中的哪些位置引用了,这非常方便,可以发现某些无用却引用了的包: $ pigar # example/e1.py: 18 pkg_a == 3.3.3 # example/e2.py: 10 pkg_b == 1.1.1 如果你折腾别人的项目的时候遇到"I

javascript引用php生成的js文件例子

通过html写javascript引入一个php的链接,该php实际上是生成js的文件:  代码如下 复制代码 if (20 == $ad_type_id) { // 对联  ob_start ();  include TMPL_PATH . 'Code/duilian.js';  header("content-type: application/x-javascript");  $code = ob_get_clean ();  echo $code; } 在php里面includ

能自动生成excel格式文件吗

excel|生成excel 我是着处理的<?header("Content-type:application/vnd.ms-excel");header("Content-Disposition:filename=test.xls");echo "编 号\t";echo "公司名称\t";echo "房 间 号\t";echo "入驻日期\t";echo "联 系 人\t

MyEclipse自动生成hibernate映射文件

http://blog.csdn.net/blacklin520/article/details/6854163