JSP не обнаруживает файл JavaScript - PullRequest
2 голосов
/ 30 сентября 2010

Из сервлета я пересылаю запрос на страницу JSP, которая отображает FusionChart. Но у меня проблема с загрузкой графика. Файл 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"

но не повезло.

Это как-то связано с отправкой запроса ??

Ответы [ 3 ]

8 голосов
/ 30 сентября 2010

Вы не можете иметь .js (или .swf, .jpg и т. Д.) Файлы в WEB-INF - они не являются общедоступными.
Переместить его в /js/

Нетпричина скрывать статические ресурсы (например, скрипты и CSS) в WEB-INF.Если вы настаиваете на этом, вы должны создать сервлет, который, учитывая имя js / css, будет читать его из его местоположения и будет служить ответом.Это то, что делает сервлет по умолчанию при доступе к статическим ресурсам.

Процесс загрузки страницы выглядит следующим образом: браузер отправляет запрос сервлету;сервлет направляется внутри JSP, а JSP представляется как ответ;затем браузер анализирует тег <script> и запускает другой запрос к сценарию.Если скрипт не доступен через URL, он не загружается.

Затем, чтобы привязать URL скрипта к корню контекста сервлета, используйте

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

Это будет работать независимо от того, чтотекущий URL

0 голосов
/ 01 марта 2016

Я столкнулся с той же проблемой. В моем случае, когда я вызываю myFile.jsp напрямую, он читает myFile.js;

Но при вызове через login-> myFile.jsp не читается myFile.js;

Проанализировав путь через консоль Инструменты разработчика : =>, я обнаружил, что она вставляет uri, поэтому окончательный путь был неверным.

Окончательное решение:

Я бы использовал абсолютный путь для всех .js и .css. Теперь его зовут отовсюду.

Моя структура проекта:

В моем сервлете-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 ==> Его вызывают везде.

Надеюсь, это поможет вам.

0 голосов
/ 30 сентября 2010

Не причина вашей проблемы, но также обратите внимание, что ваш элемент <script> неверен. Это должно быть <script type="text/javascript"....

(Я пытался опубликовать это как комментарий, но по какой-то причине он не позволил мне.)

...