使用Spring Boot在嵌入式Tomcat服务器上部署资源

我有一个项目,其中将来自多个来源的数据处理为某些数据结构。程序完成这些结构的构建后,我希望它建立一个服务器,使用户可以手动微调这些结构。我认为使用Spring

Boot设置的嵌入式Tomcat服务器上的Spring MVC正是我所需要的。

我想使用Thymeleaf作为查看技术,因此

@Configuration

@ComponentScan

@EnableAutoConfiguration

public class Main {

public static void main(String... args) throws Exception {

// Lots of initialization ...

SpringApplication.run(Main.class, args);

}

@Bean

public ServletContextTemplateResolver templateResolver() {

ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();

resolver.setPrefix("/resources/views/");

resolver.setSuffix(".html");

resolver.setTemplateMode("HTML5");

resolver.setCacheable(false);

return resolver;

}

public SpringTemplateEngine templateEngine() {

SpringTemplateEngine engine = new SpringTemplateEngine();

engine.setTemplateResolver(templateResolver());

return engine;

}

@Bean

public ViewResolver viewResolver() {

ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();

viewResolver.setTemplateEngine(templateEngine());

viewResolver.setOrder(1);

viewResolver.setViewNames(new String[]{"*"});

viewResolver.setCache(false);

return viewResolver;

}

}

@Controller

public class WebController {

@RequestMapping(value="/greeting", method=RequestMethod.GET)

public String greeting() {

return "greeting";

}

}

但是,即使在处有一个查看文件/resources/views/greeting.html,服务器对URL的回复http://localhost:8080/greeting也是

org.thymeleaf.exceptions.TemplateInputException: Error resolving template "greeting", template might not exist or might not be accessible by any of the configured Template Resolvers

在调试器中单步执行代码后,似乎在某个时候ServletContext(应该以流的形式返回视图文件)看起来像这样的临时文件夹

C:\Users\Michael\AppData\Local\Temp\tomcat-docbase.971027024999448548.8080

这是空的。

现在我知道我需要

  1. 服务器启动时将资源部署到临时文件夹

  2. 让服务器在资源已经存在的目录中运行

我的问题是我既不知道怎么做,也不知道哪种方法最好。有人告诉我1是更好的智慧,但是任何建议都是值得欢迎的。

好的,我最终得到了一些可行的方法。虽然Joe的回答无疑帮助我前进,但似乎我不得不以一种使我感到困惑的方式更改Maven配置。

将模板greeting.html放入/resources/templates/greeting.html并添加resources到构建路径后,出现错误

javax.servlet.ServletException: Circular view path [greeting]: would dispatch back to the current handler URL [/word/greeting] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

换句话说,Thymeleaf似乎配置不正确。经过一番摆弄之后,我最终将spring-boot-starter-parentin

的版本pom.xml从更改0.5.0.BUILD-SNAPSHOT0.5.0.M6

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<!--<version>0.5.0.BUILD-SNAPSHOT</version>-->

<version>0.5.0.M6</version>

</parent>

并从Thymeleaf依赖项中删除版本标签

<dependencies>

<!-- ... -->

<dependency>

<groupId>org.thymeleaf</groupId>

<artifactId>thymeleaf-spring3</artifactId>

<!--<version>${thymeleaf-spring3-version}</version>-->

</dependency>

</dependencies>

在此之后,它起作用了。

有人可以解释一下为什么我需要更改的版本spring-boot-starter-parent才能从中删除版本标签thymeleaf-

spring3,为什么这样做是必要的?

回答:

servlet上下文根不是嵌入式服务器中模板的最佳位置。有一种方法可以做到,但是如果我是我,我会顺其自然,并使用类路径。如果允许Spring

Boot配置模板解析器(也建议使用),则classpath:/templates默认情况下它将进入。在引导代码库中有几个使用百里香的示例,因此,如果您有不同的要求,则应该很容易地修改其中的一个。

以上是 使用Spring Boot在嵌入式Tomcat服务器上部署资源 的全部内容, 来源链接: utcz.com/qa/413685.html

回到顶部