Comment utiliser des chemins relatifs sans inclure le nom de la racine du contexte?

Pour travailler mon fichier statique (CSS, JS), je dois écrire un chemin absolu comme /AppName/templates/style/main.css . Existe-t-il une solution pour écrire un chemin relatif comme style/main.css ?

Si votre problème est le dynamisme du contexte webapp (la partie “AppName”), alors récupérez-le dynamicment par HttpServletRequest#getContextPath() .

       link  

Si vous souhaitez définir un chemin de base pour tous les liens relatifs afin de ne pas avoir à répéter ${pageContext.request.contextPath} dans chaque lien relatif, utilisez la . Voici un exemple avec l’aide des fonctions JSTL .

 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> ...  ${pageContext.request.requestURL}       link  

De cette façon, chaque lien relatif (c’est-à-dire ne commençant pas par / ou un schéma) deviendra relatif au .

Cela n’est d’ailleurs pas spécifiquement lié à Tomcat. C’est juste lié aux bases de HTTP / HTML. Vous auriez le même problème dans tous les autres serveurs Web.

Voir également:

  • Le navigateur ne peut pas accéder / rechercher des ressources relatives telles que les CSS, les images et les liens lors de l’appel d’un servlet vers une JSP
  • Est-il recommandé d’utiliser la balise html?

Il suffit d’utiliser -tag avec un chemin relatif de contexte d’application.

Lorsque le paramètre value commence par / , la balise la traitera comme une URL relative à l’application et appenda le nom de l’application à l’URL. Exemple:

jsp:

 `  ... ` home link 

deviendra ce HTML, avec une URL relative au domaine:

  ... home link 

Vous démarrez tomcat à partir d’un répertoire – qui est le $ cwd pour tomcat. Vous pouvez spécifier n’importe quel chemin relatif à cette $ cwd.

suppose que tu as

 home - tomcat |_bin - cssStore |_file.css 

Et supposons que vous lanciez tomcat depuis ~ / tomcat, en utilisant la commande “bin / startup.sh”.

~ / tomcat devient le répertoire personnel ($ cwd) pour tomcat

Vous pouvez accéder à “../cssStore/file.css” à partir des fichiers de classe de votre servlet maintenant

J’espère que ça aide, – MS

Au lieu d’utiliser un lien entier, nous pouvons faire comme ci-dessous (la solution concerne les fichiers jsp)

Avec JSTL, on peut faire comme: Lier une ressource comme css, js:

    

Pour faire simplement un lien:

  .... 

Cela vaut la peine de se familiariser avec les tags

  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 

Il y a aussi la méthode jsp pour le faire comme ci-dessous, mais mieux comme ci-dessus:

    

Pour faire simplement un lien:

  .... 

Cela pourrait être plus simple:

  

Toutes les URL seront formées sans domain:port inutile domain:port mais avec un contexte d’application.

Ceci est un dérivé de la suggestion de @Ralph que j’ai utilisée. Ajoutez l’ c:url en haut de votre JSP.

 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  

Ensuite, référencez simplement la variable racine dans votre page: