当我将生成的 .war 文件部署到独立的 Tomcat 服务器时出现错误 404,但是如果我在我的 IDE(IntelliJ) 中使用 tomcat 服务器部署 war,它工作正常。
这是初始化器
public void onStartup(ServletContext servletContext)
throws ServletException {
AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext();
mvcContext.register(AppConfig.class);
servletContext.addListener(new ContextLoaderListener(mvcContext));
ServletRegistration.Dynamic dispatcher = servletContext.addServlet(
"dispatcher", new DispatcherServlet(mvcContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
这是应用配置
**Tiles Configuration**
@Bean
public TilesConfigurer getTilesConfigurer() {
TilesConfigurer tilesConfigurer = new TilesConfigurer();
tilesConfigurer.setDefinitions(
"/WEB-INF/defs/tiles.xml");
return tilesConfigurer;
}
@Bean
public UrlBasedViewResolver getUrlBasedResolver() {
UrlBasedViewResolver urlBasedViewResolver = new UrlBasedViewResolver();
urlBasedViewResolver.setViewClass(new TilesView().getClass());
return urlBasedViewResolver;
}
/** End of Tiles Configuration */
**View Resolver:**
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/pages/**");
resolver.setSuffix(".jsp");
return resolver;
**Tiles.xml**
<definition name="hello-tiles" extends="commons">
<put-attribute name="header" value="/WEB-INF/template/header2.jsp" />
<put-attribute name="title" value="Hello Page" />
<put-attribute name="body" value="/WEB-INF/pages/hello.jsp" />
</definition>
最佳答案
应用程序需要知道生产机器上的 Tomcat 安装路径才能解析路径。您可以在 xml 中进行硬编码,也可以指定一个可以获取 tomcat 安装路径的属性文件,即 CATALINA_HOME
或 CATALINA_BASE
。它在您的 IDE 中工作而不在您的产品中工作的原因是因为系统理解您的 IDE 中的 /WEB-INF
但当您将它部署在独立系统中时它不会发生。
您可以将独立服务器的安装路径附加到每个路径。例如C:/Tomcat/bin
。因此,您需要像这样引用您的文件
<put-attribute name="body" value="C:/Tomcat/bin/WEB-INF/pages/hello.jsp" />
如果您不喜欢绝对路径,您可以引用上面提到的变量以及如何从属性文件中使用它们。
希望对您有所帮助。
关于java - Spring.io 和 Tiles 3 - 在 Tomcat 服务器中部署 .war 文件时出现错误 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25359480/