JSP未检测到javascript文件
从一个servlet,我将转发请求到一个呈现FusionChart的JSP页面。 但我在加载图表时遇到问题。 JSP文件未检测到JavaScript文件。文件夹结构是: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"
,但没有运气。
它与请求被转发有关吗?
WEB-INF
中不能有.js
(或.swf,.jpg等)文件 - 它们不可公开访问。
将其移动到/js/
没有理由在WEB-INF
中隐藏静态资源(如脚本和css)。如果你坚持这样做,你应该制作一个servlet,它给出js/css的名称,从它的位置读取它并将其作为响应。这是默认servlet在访问静态资源时执行的操作。
页面加载流程如下:浏览器向servlet发送请求;该servlet内部转发到JSP,并将JSP呈现为响应;那么浏览器会解析<script>
标签并向脚本发出另一个请求。如果脚本无法通过URL访问,则不会加载。
然后,使固定在servlet上下文根脚本网址,使用
src="<c:url value="/js/script.js" />"
不管是什么当前URL
不是你的问题的原因这是可行的,还要注意您的<script>
元素不正确。它应该是<script type="text/javascript"...
。
(我试图张贴此作为一个评论,但由于某些原因,它不会让我。)
我已经纠正它。 – HanuAthena 2010-09-30 14:57:26
在HTML5中,'type'属性**默认**为'text/javascript'。因此,如果您使用的是HTML5文档类型,您可以放心地忽略它(即使如此,在HTML4中,w3c验证程序将是唯一一个抽搐的程序;它将在IE6的所有浏览器中工作*)。 – BalusC 2010-09-30 15:03:18
我面临同样的问题。在我的情况下,当我直接调用myFile.jsp时,它读取myFile.js;
但是,当通过login-> myFile.jsp进行调用时,它不会读取myFile.js;
在分析了通过开发人员工具:=> console的路径之后,我发现它插入了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 ==>其获得来自世界各地调用。
希望它能帮助你。
还应该注意的是Line.swf文件也不可访问。像JavaScript文件一样,它应该从WEB-INF文件夹下移出。 – 2010-09-30 13:51:16
我已将.js文件移出WEB-INF。但仍然没有运气。当我将JSP文件移出WEB-INF时,它确实有效。所有三个(.js,.jsp,.swf)文件我放在“WebContent/FusionCharts /”,它的工作。如果我将JSP文件放在WEB-INF之外,可以吗? – HanuAthena 2010-09-30 14:51:49
@HanuAthena查看更新 – Bozho 2010-09-30 15:01:49