Reputation: 16561
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...
Upvotes: 9
Views: 26956
Reputation: 12817
You can achieve your workflow as below:
Basically your web application will look into welcome page and /redirect is fired which is captured by controller and execute the logic;
In web.xml add the following code and drop the index.jsp
in webapp directory.
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
In index.jsp
, add below code:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<c:redirect url="/redirect"/>
</body>
</html>
Finally in the Controller
, you could add the code below:
@Controller
public class HomePageController {
@RequestMapping(value = "/redirect", method = RequestMethod.GET)
public String myMethod(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException {
// add your logic here
return "results"; // return results.jsp if you need;
}
}
Upvotes: 0
Reputation: 3178
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
Upvotes: 3
Reputation: 48933
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>
Upvotes: 4
Reputation: 597412
@RequestMapping({"/index", "/"})
and
<welcome-file-list>
<welcome-file></welcome-file>
</welcome-file-list>
worked for me.
Upvotes: 22
Reputation: 3865
Try using
<welcome-file-list>
<welcome-file>/index</welcome-file>
</welcome-file-list>
Upvotes: 0