Come utilizzare i percorsi relativi senza includere il nome radice del contesto?

Per lavorare con il mio file statico (CSS, JS) devo scrivere un percorso assoluto come /AppName/templates/style/main.css . C’è qualche soluzione, che potrei scrivere un percorso relativo come style/main.css ?

Se la tua preoccupazione reale è la dinamicità del contesto webapp (la parte “AppName”), basta recuperarla in modo dinamico da HttpServletRequest#getContextPath() .

       link  

Se si desidera impostare un percorso di base per tutti i collegamenti relativi in ​​modo che non sia necessario ripetere ${pageContext.request.contextPath} in ogni collegamento relativo, utilizzare il tag . Ecco un esempio con l’aiuto delle funzioni 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  

In questo modo ogni link relativo (cioè non iniziante con / o uno schema) diventerà relativo a .

Questo non è in alcun modo collegato a Tomcat in alcun modo. È solo relativo alle basi HTTP / HTML. Avresti lo stesso problema in ogni altro server web.

Guarda anche:

  • Il browser non può accedere / trovare risorse relative come CSS, immagini e collegamenti quando si chiama un Servlet che inoltra a un JSP
  • Si consiglia di utilizzare il tag html ?

Basta usare -tag con un percorso relativo al contesto dell’applicazione.

Quando il parametro value inizia con un / , il tag lo tratterà come url relativo all’applicazione e aggiungerà il nome dell’applicazione all’URL. Esempio:

jsp:

 `  ... ` home link 

diventerà questo html, con un url relativo al dominio:

  ... home link 

Si avvia tomcat da una directory, che è $ cwd per tomcat. È ansible specificare qualsiasi percorso relativo a questo $ cwd.

supponi di avere

 home - tomcat |_bin - cssStore |_file.css 

Supponiamo di avviare tomcat da ~ / tomcat, utilizzando il comando “bin / startup.sh”.

~ / tomcat diventa la directory home ($ cwd) per tomcat

Puoi accedere a “../cssStore/file.css” dai file di class nel tuo servlet ora

Spero che aiuti, – MS

Invece usando l’intero collegamento possiamo fare come sotto (la soluzione riguarda i file jsp)

Con JSTL possiamo farlo come: Per colbind risorse come css, js:

    

Per fare semplicemente un link:

  .... 

Vale la pena di familiarizzare con i tag

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

C’è anche un metodo jsp per farlo come sotto, ma in modo migliore come sopra:

    

Per fare semplicemente un link:

  .... 

Questo potrebbe essere fatto più semplice:

  

Tutti gli URL saranno formati senza domain:port non necessario domain:port ma con contesto applicativo.

Questo è un derivato del suggerimento di @Ralph che ho usato. Aggiungi c:url all’inizio del tuo JSP.

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

Quindi fai riferimento alla variabile root nella tua pagina: