Eu criei um aplicativo de inicialização Primavera usando Spring Initilizr. Eu, então, incluída Apache's Freemarker
modelo de motor para carregar os modelos do meu projeto. O motor de cargas padrão modelos de: src/main/resources/templates/
pasta.
Estou tentando carregar um simples index.ftl
arquivo como modelo quando o usuário visita a página da web http://localhost:8080
. Mas eu preciso carregar os modelos da src/main/webapp/
pasta. Sempre que eu tento carregar os modelos de fora da resources
pasta, o modelo de motor falhar para encontrar os modelos.
Tenho passado por vários tutoriais e perguntas Stack Overflow. Nenhum responder a minha pergunta e eu estou preso com um 404 ERROR
porque o motor não é capaz de encontrar os arquivos.
A estrutura do arquivo é:
|-src
|---main
|-----java
|-------MainApplication.java
|-------controllers
|---------ViewController.java
|-----resources
|-------static
|-------templates
|-------application.properties
|-----webapp
|-------index.ftl
Depois de um monte de escavação, me deparei com um post onde eles sugeriram mudar o local onde o modelo de motor pesquisa os arquivos. Ele sugeriu a adição seguintes linhas em application.properties:
spring.freemarker.enabled=true
spring.freemarker.template-loader-path=classpath:src/main/webapp/
Este não parece trabalho em tudo.
Estou tentando resolver página índice simples quando eu visitar a página da Web em http: // localhost: 8080 . Eu escrevi seguinte código para mapear o pedido HTTP em ViewController.java
:
@RequestMapping("/")
public ModelAndView home(Model model)
{
return new ModelAndView("index");
}
Não faço ideia se eu estou totalmente começando errado ou eu perdi alguma configuração.
De docs Primavera:
Não use o diretório / webapp src / main se o seu aplicativo é empacotado como um frasco. Embora este diretório é um padrão comum, ele funciona apenas com embalagens guerra, e é ignorado pela maioria das ferramentas de compilação quando você gerar uma guerra.
src/main/webapp
está associado a arquivo da Web e serão embalados pelo plugin de guerra maven quando você gerar a guerra.
Supondo que você precisar de um local separado para manter modelos FTL e você ainda gostaria de pacote como jar você pode seguir os passos abaixo.
Adicione a entrada de recursos na construção em arquivo pom modo plug-in de recursos pode copiar esse diretório para classpath.
<build>
<resources>
<resource>
<directory>src/main/webapp</directory>
</resource>
<resources>
<build>
Altere o caminho loader para ler a partir da raiz do classpath.
spring.freemarker.template-loader-path=classpath:
Se a sua apenas para modelos FTL gostaria de mudar o diretório para src/main/ftls
evitar confusão e atualizar o mesmo nos recursos.
ATUALIZAR
Na verdade, eu queria construir um pacote de implantação WAR
Você tem que usar plugin de guerra à guerra de construção. Adicione o plugin e mudar a embalagem para a guerra no pom.
Mais sobre a implementação tradicional: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-create-a-deployable-war-file