Приложение Sprint MVC с использованием Thymeleaf Не удается найти CSS со стандартным href? - PullRequest
0 голосов
/ 03 марта 2019

У меня возникли проблемы при попытке структурировать путь в приложении MVC.На этом сайте было несколько похожих старых вопросов, но ни один из них не разрешил и не объяснил мой вопрос.

Это ссылка, которую я использую при тестировании моего html.Он работает нормально, и CSS разрешается правильно.

href="../static/css/main.css"

Но когда я запускаю сервер, а тимели и весна возвращают представление - я получаю чистый HTML, и ни один из моих файлов CSS не был разрешен.Ни один статический контент не разрешен.Все они возвращаются с 404-ым.

Я могу заставить их разрешить правильно, если добавлю тэг thmeleaf href, используя другой корень относительного пути:

th:href="@{/css/main.css}"

Но это не должно бытьтот же самый?Очевидно, что приложение разрешает путь иначе, чем я вижу, когда просто работаю с HTML.Но я не уверен, почему и как получить приложение, чтобы найти правильный путь.Я действительно не хочу включать в html уникальный href AND th: href, если я могу этого избежать.

Моя структура папок соответствует моим стандартам:

/resources/templates/home.html
/resources/static/css/main.css
/resources/static/images/pic.jpg
/resources/static/js/action.js

У меня нет @EnableWebMVC в использовании, и у меня нет web.xml.Контроллер для этого - barebones.

@Controller
public class HomeController {

    @RequestMapping("/")
    public String home() {
        return "home";
    }

Использование:

compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf', version: '2.0.0.M7'
compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '2.0.0.M7'
compile group: 'org.springframework', name: 'spring-webmvc', version: '5.0.2.RELEASE'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.0.0.M7'

Просматривая документы Thymeleaf, я вижу пример именно того, что я описываю.Так может быть, это ожидается?Я бы хотел лучше понять, почему.

<link rel="stylesheet" type="text/css" media="all" 
      href="../../css/gtvg.css" th:href="@{/css/gtvg.css}" />

Заранее спасибо.

1 Ответ

0 голосов
/ 04 марта 2019

Добро пожаловать на SO.Код вашего контроллера выглядит нормально.

Ваш первый путь, href="../static/css/main.css", позволяет отображать CSS, когда страница не проходит через какой-либо контейнер или не обрабатывается Thymeleaf.Наличие этой возможности позволяет передавать HTML-код непосредственно дизайнеру пользовательского интерфейса, при этом дизайнеру не нужно ничего знать о функциональности Java или загружать Tomcat / Spring для просмотра страницы.Это огромное преимущество по сравнению с другими вариантами (а именно, JSP) для отображения вашего представления.Это относительный путь из файла HTML.

Второй путь th:href="@{/css/main.css}" сообщает Thymeleaf, где найти файл в контексте работающего контейнера, используя путь относительно сервер (контейнер).Думайте об этом, как о корне документа.

Каждый из них служит своей цели, и, хотя вы можете полностью пропустить первый путь из запущенного приложения, ваш CSS не будет отображаться, когда вы открываете страницу напрямую в браузере без запускаконтейнер.На вашем действующем сайте вам потребуется как минимум вторая секунда.

Поэтому полный пример обычно содержит оба пути.

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