2011-10-03 25 views
5

? Intentando determinar dónde/cómo colocar hojas de estilo en la aplicación web desplegada en Tomcat 6 para que se pueda resolver el archivo styles.css. He intentado todo lo que puedo pensar sin éxito.¿Por qué Tomcat 6 no encuentra mi styles.css

Hice estas pruebas para encontrar el archivo pero poco ha sido exitoso.

1.) put css in-line with style attribute to verify text display green. 
    <div id="xxx" style="color:green;"> This worked. 
    Then I removed the attribute and 
2.) moved it into a in-file <style></style> stmt in the jsp. This also worked. 
    I copied the css stmt into styles.css and disabled the in-line stmt in the jsp. 
3.) added <link></link> stmts to file. I tried several path refs to the file. 
    And I put the file in several different directory locations to see where 
    it would get resolved. (none were found) 
     <link rel="stylesheet" type="text/css" href="styles.css"> 
     <link rel="stylesheet" type="text/css" href="css/styles.css"> 
     <link rel="stylesheet" type="text/css" href="/css/styles.css"> 

Using FireBug (css tab) I see the follow information for these links 
    * <link rel="stylesheet" type="text/css" href="styles.css"> 
    this displays the src to index.html in the root dir 

    * <link rel="stylesheet" type="text/css" href="css/styles.css"> 
    this displays the msg 
     Apache Tomcat/6.0.13 - Error report 
     HTTP Status 404 
     The requested resource() is not available. 

    * <link rel="stylesheet" type="text/css" href="/css/styles.css">  
    this displays 
     Failed to load source for: http://192.168.5.24:9191/css/clStyles.css 

El contextPath es/microblog Y BasePath es http://192.168.5.24:9191/microblog

Aquí está el código de prueba que estoy utilizando.

estoy usando primavera 3. Tengo un simple JSP

- test.jsp -

<% 
    String path = request.getContextPath(); 
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
    %> 
    <html> 
     <head> 
     <base href="<%=basePath%>"> 

     <link rel="stylesheet" type="text/css" href="styles.css"> 
     <link rel="stylesheet" type="text/css" href="css/styles.css"> 
     <link rel="stylesheet" type="text/css" href="/css/styles.css"> 
     <style> 
      #Yxxx {color:green;} 
     </style> 

     </head> 

     <body> 
     <div id="xxx"> 
      <h2>Test <%=path%> <%=basePath%></h2> 
     </div> 
     </body> 
    </html> 

He colocado el archivo styles.css en muchas ubicaciones de directorio para ver donde podría resolverse pero parece que no se encuentra ninguno.

En Tomcat 6 la estructura de directorios desplegado explotado aplicación web

webapps/microblog 
    webapps/microblog/styles.css 
    webapps/microblog/index.html 
    webapps/microblog/css/styles.css 
    webapps/microblog/WEB-INF/css/styles.css 
    webapps/microblog/WEB-INF/jsp/admintest/styles.css 
    webapps/microblog/WEB-INF/jsp/admintest/test.jsp 

Así cómo conseguir Tomcat 6 para resolver Css archivos?

Respuesta

8

Es probable que la ruta de CSS relativa sea completamente errónea. Conviértalo en relativo al dominio en lugar de relativo a la ruta. Anteponga la ruta de contexto (que es /microblog en su caso):

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/styles.css"> 

Tenga en cuenta que los recursos no son en /WEB-INF publicitly accesible. Solo son accesibles por RequestDispatcher en servlets o por <jsp:include> en JSP. Póngalos afuera /WEB-INF.

Si todavía no funciona, es probable que un servlet o filtro que se asigna en un patrón de URL de / o /* no esté haciendo su trabajo correctamente.

+0

Gracias a ambos. Esta información fue útil. Con sus cambios recomendados y un cambio en mi , (cambiando el patrón de/a * .html) esto está funcionando. Me gustaría entender por qué el cambio de patrón de url habilitó Tomcat para resolver los refs. ¿Puede alguien señalarme a un artículo o dar una explicación? Gracias de antemano. – user976831

+2

Si asigna un servlet en '/', básicamente está anulando el servlet predeterminado de servletcontainer que se utiliza para todas las solicitudes que no coincide con el patrón de URL de todos los demás servlets declarados (por ejemplo, recursos estáticos como imágenes, CSS, JS , archivos de etc). En el caso de Tomcat, consulte http://tomcat.apache.org/tomcat-7.0-doc/default-servlet.html – BalusC

3

ninguno de los siguientes trabajará desplegar a http://192.168.5.24:9191/microblog

<link rel="stylesheet" type="text/css" href="styles.css"> 

ésta puntos de http://192.168.5.24:9191/styles.css

<link rel="stylesheet" type="text/css" href="css/styles.css"> 

ésta puntos de http://192.168.5.24:9191/css/styles.css

<link rel="stylesheet" type="text/css" href="/css/styles.css"> 

ésta puntos de http://192.168.5.24:9191/css/styles.css

Necesitas prefijar la ruta de contexto:

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/styles.css"> 

o la ruta completa:

<link rel="stylesheet" type="text/css" href="<%=basePath%>/styles.css"> 

Los recursos bajo/WEB-INF debe ser eliminado, ya que no están disponibles para las solicitudes externas

6

Probablemente es bastante tarde pero logré resolverlo de otra manera.

que tienen un simple archivo html dentro de mi WebContent y una carpeta css:

esto no estaba funcionando:

<link rel="stylesheet" type="text/css" href="css/style.css"> 

y tampoco esto:

<link rel="stylesheet" type="text/css" href="/css/styles.css"> 

esto está funcionando, pero es feo (y también me está dando una advertencia en Eclipse):

<link rel="stylesheet" type="text/css" href="myproject/css/styles.css"> 

así que también encontraron que éste está trabajando, y parece el mejor enfoque para mí:

<link rel="stylesheet" type="text/css" href="./css/styles.css"> 
+0

¡Esto es muy bueno! El $ {pageContext.request.contextPath} causa algunos errores de compilación al azar que me volvieron loco ... ¡gracias! – TacB0sS

+0

impresionante página html simple que estoy usando da la ruta exacta –

0

También considere usar el código HTML base tag modo que usted no tiene que escribir $ {pageContext.request.contextPath } todo el tiempo.

0

Esto me pasó a mí también. Lo resolví simplemente escribiendo un espacio en cualquier lugar del archivo css y guardándolo. La ruta debería ser simplemente "css/style.css". Me parece que a veces Tomcat no reconocería su archivo de inmediato si ese archivo (o la ruta al archivo) se cambia, como renombrado o reubicado. La única forma que encuentro para hacer que Tomcat "se dé cuenta" de este cambio es hacer algunos cambios en el archivo y guardarlo, y volver a implementarlo o actualizarlo no ayudaría si esto no se hubiera hecho.

Cuestiones relacionadas