JSP没有检测到javascript文件

时间:2010-09-30 13:42:41

标签: java javascript jsp fusioncharts

从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"

但没有运气。

它与转发的请求有关吗?

3 个答案:

答案 0 :(得分:8)

您无法在.js中拥有WEB-INF(或.swf,.jpg等)文件 - 这些文件无法公开访问。
将其移至/js/

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

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

然后,要使脚本URL固定到servlet上下文根,请使用

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

无论当前网址是什么

,这都会有效

答案 1 :(得分:0)

不是您的问题的原因,但请注意您的<script>元素不正确。它应该是<script type="text/javascript"...

(我试图将此作为评论发布,但由于某种原因,它不会让我。)

答案 2 :(得分:0)

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

但是当通过login-&gt;进行呼叫时myFile.jsp,它没有读取myFile.js;

通过开发者工具分析路径后:=&gt;控制台,我发现它插入了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 ===&gt;它有时不被称为。

从所有地方调用的

我的绝对路径是这样的:

/SHweb/resources/MyJs/myfile.js ==&gt;它从各地被召唤。

希望对你有所帮助。