0 0

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);
    }
DWR 
2011年4月27日 09:33

3个答案 按时间排序 按投票排序

0 0

采纳的答案

这两个js是确实存在的,你浏览器输入的地址只是网络映射地址,而这两个js实际是放在dwr.jar包里面的,是通过org.directwebremoting.servlet.DwrServlet解析的,因为这个servlet拦截的就是/dwr/*的地址。

2011年4月27日 10:22
0 0

补充一点,楼主可以参照官方发布的一个简单例子,如果可以阅读简单英文的话,那就更容易入门了!!!
http://directwebremoting.org/dwr/introduction/getting-started.html

2011年4月27日 13:42
0 0

引用
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文件

    在这个场景中,提到的"2个js文件"是DWR框架的核心组件,用于实现AJAX功能。下面将详细解释这两个文件的作用以及它们在DWR中的角色。 1. **engine.js**: 这是DWR的核心引擎文件,它提供了与服务器进行通信的主要...

    dwr和简单的文件上传

    最后,关于错误处理,DWR提供了回调函数,如上面JavaScript代码所示的`onUploadSuccess`和`onUploadError`。这些函数可以在客户端捕获服务器返回的任何异常信息,为用户提供适当的反馈。 总结起来,使用DWR进行文件...

    dwr 自动完成生成表格的例子

    虽然描述为空,但从博文链接()我们可以推测,这个例子可能是作者分享的一个关于如何使用DWR实现在网页上创建一个表格,并且这个表格具备自动完成搜索功能的教程或示例代码。通常,这样的示例会涉及前端JavaScript...

    DWR(包括engine.js+util.js).rar

    `engine.js`是DWR的核心脚本,它实现了JavaScript和Java之间的远程调用(Remote Procedure Calls, RPC)。这个文件处理了请求的发送、响应的接收以及结果的处理。通过`engine.js`,前端开发者可以轻松地创建Java对象...

    DWR生成目录树

    - **生成JavaScript接口**: DWR会自动生成对应的JavaScript接口,使得客户端可以直接调用这些服务器端方法。 - **编写HTML和JavaScript**: 在HTML页面中,使用JavaScript来创建和维护目录树的DOM结构。每当需要更新...

    Dwr+进度条上传文件(支持多文件)

    标题 "Dwr+进度条上传文件(支持多文件)" 指的是使用Direct Web Remoting (DWR) 技术实现的文件上传功能,并且具备显示进度条以及支持同时上传多个文件的能力。DWR是一种在浏览器和服务器之间进行异步通信的...

    DWR所需js文件及jar包以及配置说明

    - 在客户端,引入DWR的JS文件,然后就可以直接在JavaScript中调用Java方法,如`MyService.someMethod()`。 - 跨域问题:DWR默认开启跨域,但如果服务器不在同一域下,可能需要在服务器端和客户端都进行相应的配置...

    dwr ajax 下拉框自动搜索

    `dwr.tmp`可能是在运行过程中生成的临时文件,`jboa`可能是另一个相关库或组件。 6. **实现流程**: - 用户在搜索框输入字符。 - JavaScript监听输入事件,触发AJAX请求。 - DWR接收到请求,将它转发给服务器端...

    dwr实例,从后台取数据显示

    - **生成JavaScript接口**:使用DWR工具生成对应的JavaScript接口文件,供前端使用。 - **在JavaScript中调用**:在HTML或JavaScript文件中引入生成的JavaScript接口,即可像调用本地函数一样调用服务器端的方法。...

    DWR相关文件

    4. **生成JavaScript接口**:DWR会自动生成对应的JavaScript接口,使得客户端可以直接调用服务器端的方法。 5. **在HTML/JavaScript中使用DWR**:在客户端页面中引入DWR生成的JavaScript文件,并在JavaScript代码中...

    利用DWR实现文件上传进度条

    `UploadMonitor.js` 是DWR生成的自动接口文件,它定义了前端可以调用的服务器端方法。`engine.js` 是DWR引擎的核心文件,处理实际的远程调用。 总的来说,通过DWR,我们可以轻松地实现在Web应用中展示文件上传的...

    springboot整合dwr实现js调用java方法

    4. **配置DWR映射**:在`dwr.xml`配置文件中,声明你想要暴露给JavaScript的Java类和方法。这个文件通常放在`src/main/resources`目录下。 ```xml &lt;create creator="new" javascript="MyService"&gt; ``` ...

    dwr操作文件上传下载

    `demo.rar`可能包含了DWR文件上传下载的基本示例代码,可能包括前端JavaScript调用DWR的方法,以及后端Java处理文件的Servlet或Controller。 7. **DWRExcel和excel.rar** 这两个文件可能提供了使用DWR处理Excel...

    dwr20.dtd约束文件

    dwr20.dtd约束文件。 &lt;!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd" &gt;

    dwr推送及js访问java代码

    2. **JavaScript接口**:在客户端,DWR会自动生成对应的JavaScript接口。例如,如果服务器有`executeTask`方法,那么在JavaScript中可以直接调用`MyService.executeTask(param1, param2)`。 3. **DWR推送(Push)**...

    dwr.jar engine.js util.js,Dwr相关

    "engine.js"是DWR的客户端引擎文件,它包含了一组JavaScript库,使得在浏览器中可以轻松地调用服务器端的Java方法。这个文件应该被包含在Web页面中,以便Web应用能够利用DWR的功能。`engine.js`提供了诸如对象转换、...

    dwr3实现的无刷新文件上传

    - **DWR调用**:JavaScript代码调用DWR生成的接口,传递文件数据到后台。 - **后台处理**:服务器接收到文件数据后,将其保存到指定位置,并可能执行一些验证(如文件类型、大小限制)。 - **反馈结果**:服务器...

    DWR3 文件上传显示进度条

    此外,`js`目录中的文件可能是DWR的相关JavaScript库,如`dwr.jar`、`engine.js`、`util.js`等,它们包含了实现DWR功能的核心代码和辅助工具。`images`目录可能包含了一些用于美化进度条的图片资源,比如加载图标、...

    dwr util.js engine.js

    总结来说,DWR提供了一个强大的工具,使得Web开发者可以通过JavaScript轻松地调用服务器端的Java方法,而`util.js` 和 `engine.js` 分别作为工具库和核心引擎,是实现这一功能的关键组件。在实际开发中,理解和掌握...

Global site tag (gtag.js) - Google Analytics