【问题标题】:JSP not detecting the javascript fileJSP 未检测到 javascript 文件
【发布时间】:2011-04-19 08:49:01
【问题描述】:

从一个 servlet,我将请求转发 到呈现 FusionChart 的 JSP 页面。 但是我在加载图表时遇到了问题。 JSP 文件未检测到 JavaScript 文件。文件夹结构为:

axis
 |
 WebContent
      |
     WEB-INF
        |
       classes
         |_ com 
         |_FusionCharts.js
         |_MyChartJsp.jsp
         |_Line.swf

以及JSP代码:

<html>
<head>
<script language="text/javascript" src="/WEB-INF/classes/FusionCharts.js"></script>
</head>
<body bgcolor="#ffffff">
<div id="chartdiv" align="left">The chart will appear within
this DIV. This text will be replaced by the chart.</div>
<script type="text/javascript">

var foo = //value fetched from DAO
var myChart = new FusionCharts("/WEB-INF/classes/Line.swf",
            "myChartId", "1000", "500");

    myChart
            .setDataXML("<graph caption='aCaption' xAxisName='xAxis' yAxisName='yAxis' showNames='1' decimalPrecision='0' formatNumberScale='0'>"+foo+"</graph>");
    myChart.render("chartdiv");
</script>

</body>
</html>

转发请求的Servlet代码:

final RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/classes/MyChartJsp.jsp");
requestDispatcher.forward(request, response);

请求被转发到 JSP。但是图表没有显示出来,因为它无法弄清楚FusionCharts 在该行中是什么

var myChart = new FusionCharts("/WEB-INF/classes/Line.swf",
                "myChartId", "1000", "500");

我试过了

src="/FusionCharts.js"

src="FusionCharts.js"

但没有运气。

与转发的请求有关系吗??

【问题讨论】:

    标签: java javascript jsp fusioncharts


    【解决方案1】:

    WEB-INF 中不能有 .js(或 .swf、.jpg 等)文件 - 它们不能公开访问。
    移至/js/

    没有理由在WEB-INF 中隐藏静态资源(如脚本和 css)。如果您坚持这样做,您应该制作一个 servlet,给定 js/css 的名称,从其位置读取它并将其作为响应。这是您访问静态资源时默认 servlet 所做的事情。

    页面加载的流程如下:浏览器向servlet发送请求; servlet 在内部转发给 JSP,并将 JSP 呈现为响应;然后浏览器解析&lt;script&gt; 标记并向脚本发出另一个请求。如果脚本无法通过 URL 访问,则不会加载。

    然后,要将脚本 url 固定到 servlet 上下文根目录,请使用

    src="<c:url value="/js/script.js" />"
    

    无论当前网址是什么,这都会起作用

    【讨论】:

    • 还应注意 Line.swf 文件也将不可访问。与 javascript 文件一样,它应该从 WEB-INF 文件夹下移出。
    • 我已将 .js 文件移出 WEB-INF。但仍然没有运气。当我将 JSP 文件也移出 WEB-INF 时,它确实有效。我放置“WebContent/FusionCharts/”的所有三个(.js、.jsp、.swf)文件都有效。如果我将 JSP 文件放在 WEB-INF 之外可以吗?
    【解决方案2】:

    不是您的问题的原因,但还要注意您的 &lt;script&gt; 元素不正确。应该是&lt;script type="text/javascript"...

    (我试图将其作为评论发布,但由于某种原因它不允许我。)

    【讨论】:

    • 在 HTML5 中,type 属性默认text/javascript。因此,如果您使用的是 HTML5 文档类型,您可以放心地忽略它(即使那样,在 HTML4 中,w3c 验证器将是唯一一个会抽搐的人;它会在 IE6 及更高版本的所有浏览器中工作 )。
    【解决方案3】:

    我遇到了同样的问题。在我的情况下,当我直接调用 myFile.jsp 时,它会读取 myFile.js;

    但是当通过 login-> myFile.jsp 调用时,它没有读取 myFile.js;

    通过开发者工具:=>控制台分析路径后,发现是插入了uri,所以最终路径不正确。

    最终解决方案:

    我对所有 .js 和 .css 都使用了绝对路径。现在它无处不在。

    我的项目结构是:

    在我的 servlet-context.xml 中

    i) <context:component-scan base-package="com.SBP.SHWeb" />
    
    ii) <resources mapping="/resources/**" location="/resources/" />
    

    我包含 .js 的旧路径是:/resources/MyJs/myfile.js ===> 它有时不会被调用。

    从所有地方调用的

    我的绝对路径是这样的:

    /SHweb/resources/MyJs/myfile.js ==> 它被从任何地方调用。

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-08-22
      • 2021-07-09
      • 1970-01-01
      • 2017-04-27
      • 2021-11-24
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多