Domanda

Ho alcune pagine web che si siedono in directory diverse e il mio obiettivo è quello di avere un qualche tipo di struttura organizzata in modo che io possa accedere a JS o file CSS, senza hardcoding il percorso.

Per esempio, la struttura di directory è:

root --- js --- some.js
      |
      |--css --- some.css
      |
      |---pages ---- main.jsp
      |
      |---other----foo---- foo.jsp
                 |
                 |--bar --- bar.jsp  

Poi main.jsp e foo.jsp tenta di fare riferimento some.js ma deve avere percorso diverso.

( main.jsp )

<script type="text/javascript" src="../js/some.js"></script>

( foo.jsp)

<script type="text/javascript" src="../../js/some.js"></script>

Questa non è l'ideale se voglio cambiare la posizione del main.jsp o foo.jsp, devo tornare a ogni file e modificare il percorso manualmente.

Sto pensando di avere classe factory che ha percorso completo per ogni file in modo che esso sarebbe simile:

<script type="text/javascript" src=<% Factory.getFullPath(some.js) %> ></script>

In questo caso, posso ancora spostare i file liberamente e non devono tornare a ciascun file.

Posso ottenere qualche opinione al mio approccio? C'è altro modo per risolvere questo problema?

È stato utile?

Soluzione

Usa un percorso al contesto relativo. Si farà il percorso assoluto alla radice del dominio. È possibile ottenere il percorso del contesto da HttpServletRequest#getContextPath() . In JSP, il HttpServletRequest è disponibile da ${pageContext.request} .

<script type="text/javascript" src="${pageContext.request.contextPath}/js/some.js"></script>

(la contextPath sé inizia già con un /, quindi non c'è bisogno di prefisso da soli)

È anche possibile impostare utilizzando il HTML <base> tag in modo che tutti URL relativo nella pagina diventa relativo ad esso. In questo modo non c'è bisogno di copiare ${pageContext.request.contextPath} su tutto il luogo.

<base href="${pageContext.request.contextPath}"></base>
<script type="text/javascript" src="js/some.js"></script>

Questo ha però un avvertimento: ancore, come <a href="#foo"> diventerà anche rispetto ad esso. È necessario tener conto di questo e se si va per questo.

Vedi anche:

Altri suggerimenti

mm Io non sono veramente sicuro se una fabbrica è il modo più appropriato per fare questo, forse funzionerà .. Ricordo che per che ho usato un'interfaccia in cui ho implementato alcune costanti, tra cui il percorso JS e la cartella CSS

public interface Configuration {
   public static final String SERVER_URL = "http://localhost:8080/";
   public static final String CSS_URL = SERVER_URL + "css/";
   public static final String JS_URL = SERVER_URL + "js/";
}

e quindi avrei dovuto importare questa interfaccia nella servlet e chiamare in questo modo:

...src="<% Configuration.JS_URL %>some.js" />..

In questo modo se si cambia il nome delle cartelle o percorso. dovrai solo modificare la configurazione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top