目前我有一个Web应用程序,我们使用web.xml来配置应用程序。 web.xml有welcome-file-list。
<web-app>
...
<welcome-file-list>
<welcome-file>home.html</welcome-file>
</welcome-file-list>
</web-app>
我们计划使用spring框架并使用java类进行应用程序配置。
class MyApplication extends WebApplicationInitializer {
public void onStartUp(ServletContext context){
...
}
}
如何在此java类中指定welcome-file-list?
答案 0 :(得分:19)
在使用纯Java Based Configuration开发Spring MVC应用程序时,我们可以通过使我们的应用程序配置类扩展WebMvcConfigurerAdapter类并覆盖addViewControllers方法来设置主页,我们可以在其中设置默认主页页面如下所述。
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.myapp.controllers" })
public class ApplicationConfig extends WebMvcConfigurerAdapter {
@Bean
public InternalResourceViewResolver getViewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/view/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("home");
}
}
它返回home.jsp
视图,可以作为主页。无需创建自定义控制器逻辑即可返回主页视图。
addViewControllers方法的JavaDoc说 -
配置预先配置的简单自动控制器 响应状态代码和/或呈现响应主体的视图。这个 在不需要自定义控制器逻辑的情况下非常有用 - 例如呈现主页,执行简单的站点URL重定向,返回带有HTML内容的404状态,带有无内容的204等等。
第二种方式 - 对于静态HTML文件主页,我们可以在配置类中使用以下代码。它会将index.html
作为主页返回 -
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("forward:/index.html");
}
第三种方式 - 请求映射&#34; /&#34;下面还会返回home
视图,该视图可以作为应用的主页。但建议采用上述方法。
@Controller
public class UserController {
@RequestMapping(value = { "/" })
public String homePage() {
return "home";
}
}
答案 1 :(得分:6)
public interface WebApplicationInitializer
Interface
即将实施 在Servlet 3.0+环境中,以配置ServletContext 以编程方式 - 与(或可能与)相对 传统的基于web.xml的方法。
但您仍然需要在web.xml中进行最少的配置,例如
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
答案 2 :(得分:4)
@EnableWebMvc
@Configuration
@ComponentScan("com.springapp.mvc")
public class MvcConfig extends WebMvcConfigurerAdapter {
...
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/*.html").addResourceLocations("/WEB-INF/pages/");
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("forward:/index.html");
}
...
}
这可能会有所帮助。
答案 3 :(得分:0)
这对我有用...
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("forward:/index.html");
}