JSP未检测到javascript文件
通过servlet,我将请求转发到呈现FusionChart的JSP页面。 但我在加载图表时遇到了一个问题。JSP文件未检测到JavaScript文件。文件夹结构为:JSP未检测到javascript文件,java,javascript,jsp,fusioncharts,Java,Javascript,Jsp,Fusioncharts,通过servlet,我将请求转发到呈现FusionChart的JSP页面。 但我在加载图表时遇到了一个问题。JSP文件未检测到JavaScript文件。文件夹结构为: axis | WebContent | WEB-INF | classes |_ com |_FusionCharts.js |_MyChartJsp.jsp |_Line.swf 和JSP代码: &
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>
请求被转发到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发送请求;servlet在内部转发给JSP,JSP作为响应呈现;然后浏览器解析
标记并向脚本发出另一个请求。如果无法通过URL访问脚本,则不会加载脚本
然后,要将脚本url固定到servlet上下文根,请使用
src="<c:url value="/js/script.js" />"
src=“”
无论当前url是什么,这都会起作用。这不是问题的原因,但请注意,
元素不正确。应该是我也面临同样的问题。在我的例子中,当我直接调用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/" />
i)
(ii)
include.js的旧路径是:/resources/MyJs/myfile.js===>它有时不会被调用
我的绝对路径,从所有地方调用的路径如下:
/SHweb/resources/MyJs/myfile.js==>它可以从任何地方调用
希望它能帮助您。还应注意,Line.swf文件也将无法访问。像javascript文件一样,它应该从WEB-INF文件夹下移出。我已经从WEB-INF中移出了.js文件。但仍然没有成功。当我将JSP文件从WEB-INF中移出时,它确实起作用了。我放置的所有三个(.js、.JSP、.swf)文件“WebContent/FusionCharts/”都起作用了。如果我将JSP文件放在WEB-INF之外可以吗?在HTML5中,类型
属性默认为text/javascript
。因此,如果您使用的是HTML5 doctype,您可以安全地忽略它(即使如此,在HTML4中,w3c验证器将是唯一一个会出错的验证器;它可以在IE6及更高版本的所有浏览器中工作)。
i) <context:component-scan base-package="com.SBP.SHWeb" />
ii) <resources mapping="/resources/**" location="/resources/" />