W. Praneeth Madusanka
W. Praneeth Madusanka

Reputation: 137

How to place images/CSS in spring-mvc web app?

I used Netbeans to create a Spring MVC web application. I have a simple controller and JSP view. The JSP view appears correctly except for an image that doesn't render. My directory structure looks like this:

enter image description here In my *.jsp page, the image that doesn't render is referenced like so:

In Spring MVC, where should I place files referenced by JSP views, like images, CSS, JS, etc?

I applied AppConfig file like this,.

public void addResourceHandlers(ResourceHandlerRegistry registry) {

@Bean
public ViewResolver viewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setViewClass(JstlView.class);
    viewResolver.setPrefix("/WEB-INF/view/");
    viewResolver.setSuffix(".jsp");

    return viewResolver;
}

Upvotes: 0

Views: 628

Answers (3)

Arpit Aggarwal
Arpit Aggarwal

Reputation: 29276

Enable <mvc:default-servlet-handler /> in your Spring MVC application. You can enable either using annotations as below:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

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

Or in XML as:

<mvc:default-servlet-handler/>

To explore more look at need and use of mvc:default-servlet-handler

Upvotes: 0

Rana_S
Rana_S

Reputation: 1550

Add these lines to specify the path for static resources.

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/assets/**").addResourceLocations("/WEB-INF/assets/")
}

Equivalent XML configuration:

<mvc:resources mapping="/assets/**" location="/WEB-INF/assets/" />

Then in your *.jsp pages you can do this, For example:

<link href="<c:url value="assets/css/myCss.css" />" rel="stylesheet"> 
<script src="<c:url value="assets/js/myJs.js"/>"></script>

Upvotes: 1

CollinD
CollinD

Reputation: 7573

The code you posted for your AppConfig is. . . confusing and syntactically invalid.

One simple way to accomplish this is like so

@Configuration
public class AppConfig extends WebMvcConfigurationSupport {
    //locate and serve .jsp resources
    @Bean
    public InternalResourceViewResolver getInternalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/view/");
        resolver.setSuffix(".jsp");

        return resolver;
    }

    //locate our static resources and serve them
    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/assets/**").addResourceLocations(
            "/WEB-INF/assets/");
    }
}

Your resources can then be accessed via http://the.domain/apppath/assets

Upvotes: 1

Related Questions