我有一个项目,其中将来自多个来源的数据处理为某些数据结构。程序完成这些结构的构建后,我希望它建立一个服务器,使用户可以手动微调这些结构。我认为使用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是更好的智慧,但是任何建议都是值得欢迎的。
编辑
好的,我最终得到了一些可行的方法。虽然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-parent
in
的版本pom.xml
从更改0.5.0.BUILD-SNAPSHOT
为0.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 Web应用程序,我们应该排除嵌入式服务器,但如果我们不这样做会发生什么?假设我在jboss外部服务器上部署Spring boot war,但我没有排除tomcat服务器?在这种情况下,Spring boot使用jboss外部服务器,还是仍然使用嵌入式tomcat服务器?
我有时会在pom中看到以下声明。xml。。。 如您所见,sping-boo-starter-web被声明为tomcat-embed-jasper。 是不是sping-boo-starter-web已经有一个嵌入式tomcat了?为什么一些开发人员仍然声明tomcat-embed-jasper以及boot-starter-web?还是有什么原因?
我有一个Spring Boot项目,我想在嵌入式spring tomcat上部署该项目,因为服务器(suse-linux)没有应用程序容器。我怎么能这么做?是.war还是un.jar?我如何配置嵌入式tomcat以指向服务器上安装的java?。 pom.xml .罐子 谢谢你的帮助。
我已经准备好了我的新Liferay网站,并试图在真实环境中进行测试。我刚刚成功地在服务器上安装了Tomcat Liferay捆绑包,并复制了。根据一些论坛和评论的指示,将war文件放入tomcat旁边的部署目录;但在访问URL后,我仍然会看到默认的Liferay页面,我的页面不会被显示。我在这里做错了什么? 提前谢谢!
我试图构建一个ReactJS应用程序,我希望在tomcat服务器上托管它。我已经使用命令npm run build,构建已经就绪…我在tomcat服务器中的哪里复制这些文件?我是否需要创建另一个应用程序并将其部署到调用React应用程序的服务器上?
我对斯普林和格拉德尔还不熟悉。我试图在Tomcat服务器上使用Gradle构建来部署Spring应用程序。我能够生成war文件,但我没有web。用于映射servlet的xml文件,我没有映射servlet。我有一个主类和配置类。 那么,为了在tomcat上部署我的应用程序,我需要做什么?我找不到一个合适的端到端文章。我经历了这一切http://docs.spring.io/spring-boot/