Spring welcome-file-list correct mapping

2020-02-04 06:44发布

问题:

I know that in spring I must define welcome-file, which should be outside of WEB-INF folder, so I define it like this:

web.xml:

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>


<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

But actually my real code is in WEB-INF/jsp/contact.jsp

So I always have to do this:

<jsp:forward page="/index"></jsp:forward>

And in my controller this means:

@RequestMapping("/index")
public String listContacts(Map<String, Object> map) {

    map.put("contact", new Contact());
    map.put("contactList", contactService.listContact());

    return "contact";
}

How can I make it this way, that welcome-file always goes to my index mapping, which leads to contact.jsp?

Feel free to ask questions, if this was confusing...

回答1:

@RequestMapping({"/index", "/"})

and

<welcome-file-list>
    <welcome-file></welcome-file>
</welcome-file-list>

worked for me.



回答2:

See my answer: https://stackoverflow.com/a/15551678/173149 or just:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
    <url-pattern>/index.htm</url-pattern>    <<==  *1*
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.htm</welcome-file>   <<== *2*
</welcome-file-list>


回答3:

In case of java configuration you can override two methods in class that extends WebMvcConfigurerAdapter

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("/index");
}

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

If you wanna serve index.html explicitly, turn it into a resource override a method in the same class as below:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/index.html").addResourceLocations("/WEB-INF/views/index.html");
}

Of course addResourceLocations must follows the folder choosen to hold your views.

See these samples



回答4:

Try using

<welcome-file-list>
  <welcome-file>/index</welcome-file>
</welcome-file-list>