简体   繁体   中英

JSP/SpringMVC not finding the resources folder

I'm developing a webapp using Spring MVC/JSP with Java 11, and SpringMVC 5.2.0, which started with config files, but I wanted to give programatic config (through java) a try. I've got the Servlet running, and I've successfully made the login page to "intercept" any other.jsp view if the user is not logged... However, I haven't been able to get my resources from my resource folder.

Every resource that should be loaded from there (eg <link type="image/png" rel="icon" href="${contextPath}/resources/img/icon.png"> ) I get a 404 response, and in my IDE (Netbeans 11) I get the following message in the Network Monitor:

Request URL: http://localhost:8080/icon.png

Method: GET

Status: 404

Note: The URL should be http://localhost:8080/dragonline/resources/img/icon.png ( <c:set var="contextPath" value="${pageContext.request.contextPath}"/> )

Here's my config java file:

package com.midknightmunch.dragonline.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.ResourceBundleViewResolver;
import org.springframework.web.servlet.view.JstlView;

@EnableWebMvc
@Configuration
@ComponentScan(basePackages = {"com.midknightmunch.dragonline"})
public class WebConfig implements WebMvcConfigurer{

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

    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
        //registry.addResourceHandler("/img/**").addResourceLocations("/resources/img/");
        //registry.addResourceHandler("/css/**").addResourceLocations("/resources/css/");
        //registry.addResourceHandler("/js/**").addResourceLocations("/resources/js/");
        //I've tried with and without these 3 (the commented ones)
    }

    @Bean
    public ViewResolver internalViewResolver() {
        InternalResourceViewResolver bean = new InternalResourceViewResolver();        
        bean.setViewClass(JstlView.class);
        bean.setPrefix("/WEB-INF/views/");
        bean.setSuffix(".jsp");
        bean.setOrder(0);
        return bean;
    }

    @Bean
    public ViewResolver resourceBundleViewResolver() {
        ResourceBundleViewResolver bean = new ResourceBundleViewResolver();
        bean.setBasename("views");
        bean.setOrder(1);
        return bean;
    }

    @Bean("messageSource")
    public ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource bean = new ReloadableResourceBundleMessageSource();

        String[] basenames = {"classpath:validation"};

        bean.setBasenames(basenames);

        return bean;
    }

}

And my project structure:

icon.png: dragonline/src/main/webapp/resources/img/icon.png

views(including the jsp trying to import this image): dragonline/src/main/webapp/WEB-INF/views/login.jsp

I've tried moving the resources folder everywhere, but everytime I get a 404.

Please, any help would be appreciated.

I figured it out. The problem was that I did not grant permission in my Spring Security config file to access the resources folder, so I solved it by adding:

http.authorizeRequests().antMatchers("/resources/**").permitAll()

in my WebSecurityAdapter's config() method

Does it work if you put the absolute path instead of the relative path?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM