Izeksson Santos
Izeksson Santos

Reputation: 13

configuring Spring MVC welcome page

I was trying for two days to set up the index page using spring 4. After many attempts I got a piece of code that worked But I did not understand why it worked.

Could you tell me why.

public class MyWebApplicationInitializer
    extends AbstractAnnotationConfigDispatcherServletInitializer
{

    protected Class<?>[] getRootConfigClasses() {
        return new Class[] {AplicationConfig.class};
    }

    protected Class<?>[] getServletConfigClasses()  {
        return new Class[] {WebConfiguration .class};
    }

    protected String[] getServletMappings() {
        return new String[] {"/"};
    }

}

Here's the snippet of code I found

//  @Bean
//    public InternalResourceViewResolver internalResourceViewResolver() {
//        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
//        viewResolver.setPrefix("/WEB-INF/html/");
//        viewResolver.setSuffix(".html");
//        return viewResolver;
//    }
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/*.html").addResourceLocations("/WEB-INF/html/");
        super.addResourceHandlers(registry);
    }
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController( "/" ).setViewName( "forward:/index.html" );
//      registry.setOrder( Ordered.HIGHEST_PRECEDENCE );
//      super.addViewControllers( registry );
    }

my folders

1) why InternalResourceViewResolver do not work?

2) How does addResourceHandler and addViewController work? What are these paths?

3)And how do I add the css and javascripts file to the index page? like

<link href="/css/bootstrap.min.css" rel="stylesheet">

The page loads but this without the css and javascript files

I want to thank everyone who helped me because I'm a newbie in spring, thanks guys.

Upvotes: 1

Views: 794

Answers (1)

Monzurul Shimul
Monzurul Shimul

Reputation: 8386

  1. Only configuring InternalResourceViewResolver is not enough to serve static html. You also need to bind a path through controller to serve the page. As this is just a static page you can do that with addViewControllers.

    registry.addViewController("/").setViewName("index");

2.

addResourceHandlers: Add handlers to serve static resources such as images, js, and, css files from specific locations under web application root, the classpath, and others.

addViewControllers: Configure simple automated controllers pre-configured with the response status code and/or a view to render the response body. This is useful in cases where there is no need for custom controller logic -- e.g. render a home page, perform simple site URL redirects, return a 404 status with HTML content, a 204 with no content, and more.

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurer.html#addResourceHandlers-org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry-

3.

To make the resources(js, css, img) available, you need to add following configuration inside your addResourceHandlers methods.

registry.addResourceHandler("/css/**").addResourceLocations("/css/");
registry.addResourceHandler("/js/**").addResourceLocations("/js/");
registry.addResourceHandler("/img/**").addResourceLocations("/img/");

And then to include css or js in a JSP page, you can use JSTL tag c:url or Spring tag spring:url.

<link href="<c:url value="/css/styles.css" />" rel="stylesheet">

<spring:url value="/css/styles.css" var="mainCss" />
<link href="${mainCss}" rel="stylesheet" />

Upvotes: 3

Related Questions