Как обслуживать статические файлы в моем веб-приложении на Tomcat

У меня есть проект веб-приложения на основе сервлета в eclipse и вы хотите добавить некоторые теги html, например <script src="Chart.js">.

Структура папок:

  • C:/apache-tomcat-7.0.53/
  • мое рабочее пространство находится в D:/../../workplace/CpdApplication/src/cpd/MyServlet.java
  • cpd содержит: MyServlet.java, Chart.js и другие файлы.
  • CpdApplication/WebContent/META-INF/web.xml

У меня есть проблемы с контуром, и я не могу их разрешить, я снова и снова искал и до сих пор не работаю, получаю a 404 (не найдено) для http://localhost:8080/CpdApplication/Chart.js.

Проблема в том, что я хочу добавить <script src='Chart.js'></script>, Tomcat не может разрешить статический файл Chart.js.

Ответ 1

У меня есть некоторые проблемы с контуром, и я не могу их разрешить, я искал и снова и снова не работаю, я получаю 404 (не найден) для... /CpdApplication/Chart.js

В самом деле, при написании <script src="/Chart.js"/> вы сообщаете обозревателю сделать свой собственный отдельный HTTP-запрос для получения файла JavaScript. Для этого:

  • Контейнер сервлета должен иметь возможность обслуживать статические файлы.
  • Для этого вам необходимо иметь сервлет-отображение внутри вашего web.xml для обслуживания статических файлов (т.е. сервлет по умолчанию).

Это должно сделать:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/js/*</url-pattern>
</servlet-mapping>

Затем поместите ваш Chart.js в следующую папку: WebContent/js/ и он должен работать.

EDIT. Конечно, вам нужно обновить тег <script> в вашем HTML. Кроме того, убедитесь, что вы повторно развертываете свое веб-приложение для обновления web.xml в контейнере сервлета (предположим Tomcat I).

Ответ 2

Мне кажется, что Chart.js хранится в той же папке с вашим источником сервлета.

Обычно у вас должна быть такая структура (я упростил ее):

/css/your-css.css
/js/your-script.js
/src/your-package/YourServlet.java

Всякий раз, когда вы запускаете приложение, ваш компилятор создает набор файлов, которые будут скопированы в ваш веб-контейнер. Скопированные файлы не включают вашу папку src, а вместо этого копию ваших построенных (скомпилированных) классов. Все остальные файлы (за некоторыми исключениями, которые нам не нужны сейчас) должны быть вне вашей папки src, чтобы скопировать.

Попробуйте переместить JS внутри каталога js вне каталога src. Затем соедините его так:

<script src='/Your-Context-Path/js/Chart.js'>

Должна быть функция, чтобы автоматически получить свой контекстный путь, я думаю, что это

ServletContext.getContextPath()

Вы можете прочитать об этом здесь.

Это должно сделать трюк.

Ответ 3

Как ответил @Andy, вам нужно установить весь свой ресурс (JS, CSS, изображения и т.д.) в папку в вашем приложении, затем получить доступ к ним с помощью <context_path>/folder/to/your/resource/<resource_name>.<ext>. Вот пример того, как это сделать:

  • Создайте папку внутри корневой папки (обычно называемой веб-сайтом или веб-сайтом) вашего веб-приложения с именем res.
  • Внутри res создайте папку js, чтобы поместить туда все файлы JavaScript. Вы можете создать папку css для обработки всех ваших стилей CSS, img для изображений и.
  • По вашему мнению, это означает, что ваш JSP, вы должны получить доступ к своим ресурсам через контекстный путь.

Вот как выглядят ваши папки приложений:

- WebContent
  - res
    - js
      Chart.js

В вашем JSP:

<script src="${request.contextPath}/res/js/Chart.js"></script>

Поскольку вы создаете контент представления из своего сервлета (кстати, стрелять на ногу), используйте request#getContextPath(), чтобы прикрепить его:

"script src=\"" + request#getContextPath() + "/res/js/Chart.js\"></script>";

Ответ 4

Это работает для меня. Спасибо 沖 原 ハ ー ベ ス ト

welcome.jsp

  <head>
    <script src="resources/js/jsx/browser.min.js"></script>
    <script src="resources/js/react/react.min.js"></script>
    <script src="resources/js/react/react-dom.min.js"></script>
    <script src="resources/js/main.js"></script>
    <link rel="stylesheet" type="text/css" href="resources/css/style.css">
  </head>

Дерево иерархии файлов

введите описание изображения здесь

web.xml

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/resources/*</url-pattern>
</servlet-mapping>