77 votes

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

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

165voto

BalusC Points 498232

Si votre réelle préoccupation est la dynamicness de la webapp contexte (le "AppName" partie), puis il suffit de récupérer de façon dynamique en HttpServletRequest#getContextPath().

<head>
    <link rel="stylesheet" href="${pageContext.request.contextPath}/templates/style/main.css" />
    <script src="${pageContext.request.contextPath}/templates/js/main.js"></script>
</head>
<body>
    <a href="${pageContext.request.contextPath}/pages/foo.jsp">link</a>
</body>

Si vous souhaitez définir un chemin d'accès de base pour tous les liens relatifs, de sorte que vous n'avez pas besoin de répéter ${pageContext.request.contextPath} dans chaque lien relatif, utilisez l' <base> balise. Voici un exemple avec l'aide de la JSTL fonctions.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<head>
    <c:set var="url">${pageContext.request.requestURL}</c:set>
    <base href="${fn:substring(url, 0, fn:length(url) - fn:length(pageContext.request.requestURI))}${pageContext.request.contextPath}/" />
    <link rel="stylesheet" href="templates/style/main.css" />
    <script src="templates/js/main.js"></script>
</head>
<body>
    <a href="pages/foo.jsp">link</a>
</body>

De cette façon, chaque lien relatif (c'est à dire pas en commençant par / ou d'un régime) deviendra par rapport à l' <base>.

Ce n'est d'ailleurs pas spécifiquement liées à Tomcat en aucune façon. C'est juste lié à HTTP/HTML notions de base. Vous avez le même problème dans tous les autres serveur.

2voto

Manidip Sengupta Points 1213

Vous démarrez tomcat à partir d’un répertoire - c’est le $ cwd pour tomcat. Vous pouvez spécifier n'importe quel chemin relatif à ce $ cwd.

supposez que vous avez

 home
- tomcat
 |_bin
- cssStore
 |_file.css
 

Et supposons que vous démarriez tomcat à partir de ~ / tomcat, en utilisant la commande "bin / startup.sh".

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

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

J'espère que ça aide, - MS

2voto

bartbien Points 76

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

Avec JSTL, nous pouvons le faire comme ceci: Pour relier des ressources telles que css, js:

      <link rel="stylesheet" href="${pageContext.request.contextPath}/style/sample.css" />
     <script src="${pageContext.request.contextPath}/js/sample.js"></script>   
 

Pour simplement faire un lien:

      <a id=".." class=".." href="${pageContext.request.contextPath}/jsp/sample.jsp">....</a>
 

Il vaut la peine de se familiariser avec les balises

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

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

    <link rel="stylesheet" href="<%=request.getContextPath()%>/style/sample.css" />
   <script type="text/javascript" src="<%=request.getContextPath()%>/js/sample.js"></script>
 

Pour simplement faire un lien:

    <a id=".." class=".." href="<%=request.getContextPath()%>/jsp/sample.jsp">....</a>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X