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

相关推荐

Global site tag (gtag.js) - Google Analytics