JSP没有检测到javascript文件

jai*_*jai 2 javascript java jsp fusioncharts

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

axis
 |
 WebContent
      |
     WEB-INF
        |
       classes
         |_ com 
         |_FusionCharts.js
         |_MyChartJsp.jsp
         |_Line.swf
Run Code Online (Sandbox Code Playgroud)

和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>
Run Code Online (Sandbox Code Playgroud)

用于转发请求的Servlet代码:

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

请求将转发到JSP.但是图表没有显示,因为它无法弄清楚FusionCharts该行中的内容

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

我试过了

src="/FusionCharts.js"

src="FusionCharts.js"
Run Code Online (Sandbox Code Playgroud)

但没有运气.

它与被转发的请求有关吗?

Boz*_*zho 8

您不能拥有.js(或.swf,.jpg等)文件WEB-INF- 它们不可公开访问.
移动到/js/

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

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

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

src="<c:url value="/js/script.js" />"
Run Code Online (Sandbox Code Playgroud)

无论当前的网址是什么,这都可以