-
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
相关推荐
在这个场景中,提到的"2个js文件"是DWR框架的核心组件,用于实现AJAX功能。下面将详细解释这两个文件的作用以及它们在DWR中的角色。 1. **engine.js**: 这是DWR的核心引擎文件,它提供了与服务器进行通信的主要...
最后,关于错误处理,DWR提供了回调函数,如上面JavaScript代码所示的`onUploadSuccess`和`onUploadError`。这些函数可以在客户端捕获服务器返回的任何异常信息,为用户提供适当的反馈。 总结起来,使用DWR进行文件...
虽然描述为空,但从博文链接()我们可以推测,这个例子可能是作者分享的一个关于如何使用DWR实现在网页上创建一个表格,并且这个表格具备自动完成搜索功能的教程或示例代码。通常,这样的示例会涉及前端JavaScript...
`engine.js`是DWR的核心脚本,它实现了JavaScript和Java之间的远程调用(Remote Procedure Calls, RPC)。这个文件处理了请求的发送、响应的接收以及结果的处理。通过`engine.js`,前端开发者可以轻松地创建Java对象...
- **生成JavaScript接口**: DWR会自动生成对应的JavaScript接口,使得客户端可以直接调用这些服务器端方法。 - **编写HTML和JavaScript**: 在HTML页面中,使用JavaScript来创建和维护目录树的DOM结构。每当需要更新...
标题 "Dwr+进度条上传文件(支持多文件)" 指的是使用Direct Web Remoting (DWR) 技术实现的文件上传功能,并且具备显示进度条以及支持同时上传多个文件的能力。DWR是一种在浏览器和服务器之间进行异步通信的...
- 在客户端,引入DWR的JS文件,然后就可以直接在JavaScript中调用Java方法,如`MyService.someMethod()`。 - 跨域问题:DWR默认开启跨域,但如果服务器不在同一域下,可能需要在服务器端和客户端都进行相应的配置...
`dwr.tmp`可能是在运行过程中生成的临时文件,`jboa`可能是另一个相关库或组件。 6. **实现流程**: - 用户在搜索框输入字符。 - JavaScript监听输入事件,触发AJAX请求。 - DWR接收到请求,将它转发给服务器端...
- **生成JavaScript接口**:使用DWR工具生成对应的JavaScript接口文件,供前端使用。 - **在JavaScript中调用**:在HTML或JavaScript文件中引入生成的JavaScript接口,即可像调用本地函数一样调用服务器端的方法。...
4. **生成JavaScript接口**:DWR会自动生成对应的JavaScript接口,使得客户端可以直接调用服务器端的方法。 5. **在HTML/JavaScript中使用DWR**:在客户端页面中引入DWR生成的JavaScript文件,并在JavaScript代码中...
`UploadMonitor.js` 是DWR生成的自动接口文件,它定义了前端可以调用的服务器端方法。`engine.js` 是DWR引擎的核心文件,处理实际的远程调用。 总的来说,通过DWR,我们可以轻松地实现在Web应用中展示文件上传的...
4. **配置DWR映射**:在`dwr.xml`配置文件中,声明你想要暴露给JavaScript的Java类和方法。这个文件通常放在`src/main/resources`目录下。 ```xml <create creator="new" javascript="MyService"> ``` ...
`demo.rar`可能包含了DWR文件上传下载的基本示例代码,可能包括前端JavaScript调用DWR的方法,以及后端Java处理文件的Servlet或Controller。 7. **DWRExcel和excel.rar** 这两个文件可能提供了使用DWR处理Excel...
dwr20.dtd约束文件。 <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd" >
2. **JavaScript接口**:在客户端,DWR会自动生成对应的JavaScript接口。例如,如果服务器有`executeTask`方法,那么在JavaScript中可以直接调用`MyService.executeTask(param1, param2)`。 3. **DWR推送(Push)**...
"engine.js"是DWR的客户端引擎文件,它包含了一组JavaScript库,使得在浏览器中可以轻松地调用服务器端的Java方法。这个文件应该被包含在Web页面中,以便Web应用能够利用DWR的功能。`engine.js`提供了诸如对象转换、...
- **DWR调用**:JavaScript代码调用DWR生成的接口,传递文件数据到后台。 - **后台处理**:服务器接收到文件数据后,将其保存到指定位置,并可能执行一些验证(如文件类型、大小限制)。 - **反馈结果**:服务器...
此外,`js`目录中的文件可能是DWR的相关JavaScript库,如`dwr.jar`、`engine.js`、`util.js`等,它们包含了实现DWR功能的核心代码和辅助工具。`images`目录可能包含了一些用于美化进度条的图片资源,比如加载图标、...
总结来说,DWR提供了一个强大的工具,使得Web开发者可以通过JavaScript轻松地调用服务器端的Java方法,而`util.js` 和 `engine.js` 分别作为工具库和核心引擎,是实现这一功能的关键组件。在实际开发中,理解和掌握...