Встроенный пакет Tomcat (который используется в springboot для создания исполняемого jar-файла) по умолчанию не включает JSP, мы также должны добавить модуль “org.apache.tomcat.embed:tomcat-embed-jasper”
. По этой причине мы добавляем tomcat-embed-jasper
в качестве зависимости в springboot, так что мы можем использовать теги jstl в jsp.
Основная причина, по которой springboot не работает должным образом с jsp в качестве средства разрешения представления, когда *jar
используется в качестве упаковки, заключается в жестком кодировании шаблон файла в Tomcat . Проблема в том, что при использовании java -*.jar
для развертывания приложения Springboot файлы jsp не будут присутствовать во встроенном Tomcat, и при попытке обработать запрос вы получите 404 СТРАНИЦА НЕ НАЙДЕНА .Это происходит из-за упаковки jar: файлы jsp не копируются из папки WEB-INF
. Если вы сохраняете файлы jsp в папке META-INF/resources
, а в качестве упаковки используется jar, то это должно работать.
Thymeleaf позволяет использовать шаблоны в качестве прототипов, что означает, что их можно просматривать как статические файлы и помещать в папку resources/templates
на весну, чтобы их можно было забрать. Но файлы jsp будут иметь теги jstl и т. Д., Которые перед передачей должны передаваться яшмой, поэтому они не могутбыть установленным как статические файлы, насколько мне известно.
При использовании WAR (архив веб-приложений) упаковка автоматически будет извлекать ресурсы из следующей структуры проекта:
|-- pom.xml
`-- src
`-- main
|-- java
| `-- com
| `-- example
| `-- projects
| `-- SampleAction.java
|-- resources
| `-- images
| `-- sampleimage.jpg
`-- webapp
|-- WEB-INF
| `-- web.xml
|-- index.jsp
`-- jsp
`-- websource.jsp
Руководства и официальный пример использования springboot с jsp: Guide , Образец репо
Структура упаковки WAR требует хранения файлов jsp в папке webapp/
иэто будет работать как ожидалось.Цель maven war будет копировать файлы из папки webapp в WEB-INF
, а все файлы ресурсов, такие как jsp, будут находиться в корне пакета war. Отсюда цель maven-repackage или перепаковка при загрузке пружины заботится о том, чтобыИсполняемый файл jar / war. Так что, если файлы присутствуют в оригинальной войне, она также будет в исполняемом файле. Структура исполняемой войны Springboot *1032* выглядит следующим образом:
example.war
|
+-META-INF
| +-MANIFEST.MF
+-org
| +-springframework
| +-boot
| +-loader
| +-<spring boot loader classes>
+-WEB-INF
+-classes
| +-com
| +-mycompany
| +-project
| +-YourClasses.class
+-lib
| +-dependency1.jar
| +-dependency2.jar
+-lib-provided
+-servlet-api.jar
+-dependency3.jar
Итак, для комментария:
Если вы поместите ваши jsp файлы в папку src/main/resources
, все, что будет помещено в этот каталог, будет автоматически скопировано в WEB-INF/classes
согласно WAR документация .
Итак, если вы храните свои файлы jsp в src / main / resources и настраиваете следующее в yml или файле свойств, это должно работать для WARархивы. Я не пробовал, так что не уверен.
spring.mvc.view.prefix = /WEB-INF/classes/templates
spring.mvc.view.suffix = .jsp