-
DWR 关于 自动生成的 js文件的疑惑。5
本人今天开始学习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); }
2011年4月27日 09:33
3个答案 按时间排序 按投票排序
-
采纳的答案
这两个js是确实存在的,你浏览器输入的地址只是网络映射地址,而这两个js实际是放在dwr.jar包里面的,是通过org.directwebremoting.servlet.DwrServlet解析的,因为这个servlet拦截的就是/dwr/*的地址。
2011年4月27日 10:22
-
补充一点,楼主可以参照官方发布的一个简单例子,如果可以阅读简单英文的话,那就更容易入门了!!!
http://directwebremoting.org/dwr/introduction/getting-started.html2011年4月27日 13:42
-
引用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”
2011年4月27日 13:40
相关推荐
dwr用到的2个js文件
dwr和简单的文件上传 说明都在附件里面的 index.jsp里面
DWR_3.0_上传文件 。
利用这个框架可以让AJAX变得很简单,通过DWR可以在客户端通过JavaScript直接调用服务器的Java方法并返回值给JavaScript,整个过程就好像通过本地客户端调用一样,DWR通过Java类动态生成JavaScript代码,它的最新版本...
此包包含DWR所需的三个JS文件,一个JAR包以及XML文件的配置说明
利用这个框架可以让AJAX变得很简单,通过DWR可以在客户端通过JavaScript直接调用服务器的Java方法并返回值给JavaScript,整个过程就好像通过本地客户端调用一样,DWR通过Java类动态生成JavaScript代码。
DWR(包括engine.js+util.js).rar
DWR配置文件详解 DWR配置 DWR配置文件
dwr包.rar dwr.jar engine.js util.js dwr-noncla.jar readme.txt JAR File: dwr.jar (1.08Mb) To DWR enable your web-app WAR File: dwr.war (4.62Mb) Demos/Examples of what DWR can do Sources: dwr-...
dwr配置文件详解 dwr.xml配置文件说明,非常详细的配置手册
因为没有办法完全自动进行转换,我们可以应用dwr.xml文件的special signatures syntax配置部分设置类型的转换处理过程. 2.5 DOM Objects DWR 自动将DOM、DOM4J、JDOM和XOM转换成DOM树,前面这几种类型都仅仅返回...
dwr3.0的web.xml的配置文件,该文件是从dwr.jar文件中拷贝出来的
dwr20.dtd约束文件。 <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd" >
利用DWR实现文件上传进度条 利用DWR实现文件上传进度条 利用DWR实现文件上传进度条
DWR开发步骤与配置文件详解,DWR零基础学起到熟练实用。
dwr javascript util.js engind.js 工具库 原js文件在dwr.jar中,不想找的同学就下载吧。
这是一个用dwr 框架实现类像百度输入关键字后自动填充下拉框,并点击搜索显示数据库中对应的数据的一个项目
DWR + Servlet 实现文件上传功能 进度条
Spring 集成 Dwr 文件上传和文件下载
dwr1.0 dwr2.0 js包 DwrEngine.js+DwrUtil.js