2

サーブレットから、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>

リクエストを転送するサーブレットコード:

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"

しかし、運はありません。

転送されるリクエストと関係がありますか?

4

3 に答える 3

8

.js(または.swf、.jpgなど)ファイルを含めることはできませWEB-INFん-それらは公的にアクセス可能ではありません。
に移動します/js/

で静的リソース(スクリプトやcssなど)を非表示にする理由はありませんWEB-INF。それを主張する場合は、js / cssの名前を指定して、その場所から読み取り、応答として機能するサーブレットを作成する必要があります。これは、静的リソースにアクセスするときにデフォルトのサーブレットが行うことです。

ページ読み込みのフローは次のとおりです。ブラウザがサーブレットにリクエストを送信します。サーブレットは内部でJSPに転送し、JSPは応答としてレンダリングされます。次に、ブラウザはタグを解析し<script>、スクリプトに対して別のリクエストを発行します。スクリプトにURL経由でアクセスできない場合、スクリプトはロードされません。

次に、スクリプトURLをサーブレットコンテキストルートに固定するには、次を使用します。

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

これは、現在のURLに関係なく機能します

于 2010-09-30T13:46:37.233 に答える
0

<script>問題の原因ではありませんが、要素が正しくないことにも注意してください。である必要があります<script type="text/javascript"...

(これをコメントとして投稿しようとしましたが、何らかの理由で許可されませんでした。)

于 2010-09-30T14:13:34.630 に答える