Reputation: 137
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
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
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
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