web-dev-qa-db-fra.com

Comment servir des fichiers statiques dans mon application Web sur Tomcat

J'ai ce projet d'application Web basé sur servlet dans Eclipse et je veux ajouter des balises html comme <script src="Chart.js">.

La structure des dossiers est la suivante:

  • C: /Apache-Tomcat-7.0.53/
  • mon espace de travail est dans D: /../../ lieu de travail/CpdApplication/src/cpd/MyServlet.Java
  • cpd contient: MyServlet.Java, Chart.js et d'autres fichiers.
  • CpdApplication/WebContent/META-INF/web.xml

J'ai des problèmes de chemin, et je ne peux pas les résoudre, j'ai cherché encore et encore et ne fonctionne toujours pas, j'obtiens un 404 (Not Found) pour http://localhost:8080/CpdApplication/Chart.js.

Le problème est quand je veux ajouter <script src='Chart.js'></script>, Tomcat ne peut pas résoudre le Chart.js fichier statique.

16
que1326

J'ai des problèmes de chemin, et je ne peux pas les résoudre, j'ai cherché encore et encore et ne fonctionne toujours pas, j'obtiens un 404 (introuvable) pour .../CpdApplication/Chart.js

En effet, lors de l'écriture de <script src="/Chart.js"/> vous dites au navigateur de faire sa propre requête HTTP séparée pour obtenir le fichier JavaScript. Pour que cela fonctionne:

  • Le conteneur de servlet doit pouvoir servir des fichiers statiques
  • À cette fin, vous devez avoir un mappage de servlet dans votre web.xml pour servir des fichiers statiques (c'est-à-dire le servlet par défaut ).

Cela devrait faire:

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

Placez ensuite votre Chart.js dans le dossier suivant: WebContent/js/ et ça devrait marcher.

MODIFIER : Bien sûr, vous devrez mettre à jour le <script> tag dans votre HTML. Assurez-vous également de redéployer votre application Web pour mettre à jour web.xml sur votre conteneur de servlet (Tomcat, je suppose).

16
VH-NZZ

Cela fonctionne pour moi. Merci 沖 原 ハ ー ベ ス ト

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>

Arborescence de la hiérarchie des fichiers

enter image description here

Web.xml

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

Il me semble que Chart.js est stocké dans le même dossier que la source de votre servlet.

Habituellement, vous devriez avoir une structure comme celle-ci (je l'ai simplifiée):

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

Chaque fois que vous exécutez votre application, votre compilateur crée un ensemble de fichiers qui seront copiés dans votre conteneur Web. Les fichiers copiés n'incluent pas votre dossier src , mais plutôt une copie de vos classes construites (compilées). Tous les autres fichiers (à quelques exceptions près dont nous ne devons pas nous soucier pour le moment) doivent se trouver en dehors de votre dossier src afin d'être copiés.

Essayez de déplacer votre JS dans un répertoire js en dehors de votre répertoire src. Ensuite, liez-le comme ceci:

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

Il doit y avoir une fonction pour obtenir votre chemin de contexte automatiquement, je pense que c'est

ServletContext.getContextPath()

Vous pouvez en lire plus ici .

Cela devrait faire l'affaire.

1
Andres

Comme @Andy a répondu, vous devez placer toutes vos ressources (JS, CSS, images, etc.) dans un dossier de votre application, puis y accéder en utilisant <context_path>/folder/to/your/resource/<resource_name>.<ext>. Voici un exemple de la façon de procéder:

  • Créez un dossier dans le dossier racine (généralement nommé web ou WebContent) de votre application Web avec le nom res.
  • À l'intérieur res, créez un dossier appelé js pour y placer tous les fichiers JavaScript. Vous pouvez créer un dossier css pour gérer toutes vos feuilles de style CSS, img pour les images, etc.
  • À votre avis, cela signifie, votre JSP, vous devez accéder à vos ressources via un chemin de contexte.

Voici à quoi devraient ressembler vos dossiers d'application:

- WebContent
  - res
    - js
      Chart.js

Dans votre JSP:

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

Puisque vous créez le contenu de la vue à partir de votre servlet (une prise de vue au pied, soit dit en passant), utilisez request#getContextPath() pour le joindre:

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