Почему Tomcat 6 не находит мои styles.css - PullRequest
5 голосов
/ 03 октября 2011

Попытка определить, где / как разместить таблицы стилей в веб-приложении. развернут в Tomcat 6, чтобы можно было разрешить styles.css. Я перепробовал все, что мог придумать, но безуспешно.

Я сделал эти тесты, чтобы найти, чтобы положить файл, но мало что удалось.

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

contextPath - это / microblog И базовый путь составляет http://192.168.5.24:9191/microblog

Вот код теста, который я использую.

Я использую Spring 3. У меня простой 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>

Я поместил файл styles.css во многие каталоги, чтобы увидеть где это может быть решено, но ни один не найден.

В Tomcat 6 развернутая структура каталогов развернутого веб-приложения

    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

Итак, как заставить Tomcat 6 разрешать файлы .css?

Ответы [ 5 ]

9 голосов
/ 03 октября 2011

Вероятно, относительный путь CSS неверен. Сделайте его относительным к домену, а не относительным к пути. Добавьте его к контекстному пути (в вашем случае это /microblog):

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

Обратите внимание, что ресурсы в /WEB-INF не являются общедоступными. Они доступны только RequestDispatcher в сервлетах или <jsp:include> в JSP. Разместите их снаружи /WEB-INF.

Если это все еще не работает, то, скорее всего, сервлет или фильтр, который сопоставлен с шаблоном URL / или /*, не выполняет свою работу должным образом.

6 голосов
/ 08 января 2013

Возможно, уже довольно поздно, но мне удалось решить эту проблему по-другому.

У меня есть простой html-файл внутри моего WebContent и папка css:

это не работает:

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

и ни того, ни другого:

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

это работает, но уродливо (и это также дает мне предупреждение в Eclipse):

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

такЯ обнаружил, что и этот работает, и, кажется, лучший подход для меня:

<link rel="stylesheet" type="text/css" href="./css/styles.css">
3 голосов
/ 03 октября 2011

Ничто из перечисленного не будет работать при развертывании до http://192.168.5.24:9191/microblog

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

Это указывает на http://192.168.5.24:9191/styles.css

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

Это указывает на http://192.168.5.24:9191/css/styles.css

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

Это указывает на http://192.168.5.24:9191/css/styles.css

Вам необходимо добавить префикс контекста:

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

или полный путь:

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

ресурсы в / WEB-INF должны быть удалены, так как они недоступны для внешних запросов

0 голосов
/ 25 июня 2016

Это случилось со мной тоже. Я решил это, просто напечатав пробел в любом месте файла CSS и сохранив его. Путь должен быть просто "css / style.css". Мне кажется, что иногда Tomcat не распознает ваш файл немедленно, если этот файл (или путь к файлу) изменяется, например, переименовывается или перемещается. Единственный способ заставить Tomcat «осознать» это изменение - внести некоторые изменения в файл и сохранить его, и повторное развертывание или обновление не помогло бы, если бы этого не было сделано.

0 голосов
/ 14 сентября 2013

Также рассмотрите возможность использования базового тега HTML , чтобы вам не приходилось постоянно вводить $ {pageContext.request.contextPath}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...