¿Cómo manejar la ruta del archivo cuando se accede desde una ubicación diferente directorio?

StackOverflow https://stackoverflow.com/questions/3481569

  •  28-09-2019
  •  | 
  •  

Pregunta

Tengo algunas páginas web que se sientan en diferentes directorios y mi meta es tener algún tipo de estructura organizada de modo que pueda acceder a los archivos CSS o JS sin codificar el camino.

Por ejemplo, la estructura de directorios es:

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

A continuación, main.jsp y foo.jsp intenta hacer referencia some.js pero tiene que tener camino diferente.

( main.jsp )

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

( foo.jsp)

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

Esto no es ideal si quiero cambiar la ubicación de main.jsp o foo.jsp, tengo que volver a cada archivo y cambiar la ruta manualmente.

Me refiero a tener clase de fábrica que tiene la ruta completa para cada uno de los archivos de modo que sería algo como:

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

En este caso, todavía puedo mover archivos libremente y no tener que volver a cada archivo.

¿Puedo conseguir un poco de opinión a mi enfoque? ¿Hay otra manera de resolver esto?

¿Fue útil?

Solución

Utilice una ruta relativa al contexto. Esto hará que la ruta absoluta a la raíz del dominio. Puede obtener la ruta de contexto por HttpServletRequest#getContextPath() . En JSP, la HttpServletRequest está disponible por ${pageContext.request} .

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

(el contextPath sí ya comienza con un /, por lo que no es necesario prefijar usted mismo)

También puede configurarlo usando el HTML <base> etiqueta de modo que todos URL relativa en la página se convierte en relación a la misma. De esta manera no es necesario copiar ${pageContext.request.contextPath} sobre todo el lugar.

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

Sin embargo, esto tiene una advertencia: anclas, como <a href="#foo"> se convertirá también en relación a la misma. Es necesario tener esto en cuenta, así que si vas para esto.

Ver también:

Otros consejos

mm No estoy realmente seguro de si una fábrica es la forma más adecuada para ello, tal vez funcione .. i recordar que para que usaba una interfaz donde he implementado algunas constantes, incluyendo la ruta de la carpeta JS y 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/";
}

y luego tendría que importar esta interfaz en el servlet y lo llaman así:

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

de esa manera si usted cambia su nombre carpetas o ruta. usted sólo tiene que cambiar la configuración

scroll top