Spring Dispatcher Servlet尝试加载CSS sytlesheets时引起问题

时间:2019-04-18 16:10:04

标签: css spring-boot spring-mvc jsp

当我加载JSP页面home.jsp时,我会包含样式表signIn.css。但是在无法加载资源的地方发生了一些事情:服务器为我的样式表返回了404(未找到)状态。我认为当我的CSS文件存储在/customerPortal/src/main/webapp/WEB-INF/signIn.css中时,Spring调度程序servlet正在查找URI /customerPortal/signIn.css(不使用Spring,我没有问题) 。我认为它与getServletMappings无关,它切断了文件位置。

我的CSS页面与home.jsp页面位于完全相同的位置。我还使用Spring Boot设置了SpringMvcInitializer类和MvcConfiguration类。我也有一个家庭控制器。我没有使用spring-dispatcher-servlet.xml。

//MvcConfiguration.java

package Configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import ShoppingCart.Cart;

@Configuration
@ComponentScan(basePackages="Controllers/")
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter {

    @Bean
    public ViewResolver getViewResolver()
    {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/");
        resolver.setSuffix(".jsp");

        return resolver;
    }

    @Bean
    public Cart getCart(){
        return new Cart();
    }
}

//SpringMvcInitializer.java

package Configuration;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{

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

    @Override
    protected Class<?>[] getServletConfigClasses() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected String[] getServletMappings() {

        return new String[] { "/" };
    }
}

// home.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%@include file="header.jsp" %>
<link rel="stylesheet" href="/src/main/webapp/WEB-INF/signIn.css">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
</body
</html>

我的jsp和CSS页面存储在 /customerPortal/src/main/webapp/WEB-INF/home.jsp /customerPortal/src/main/webapp/WEB-INF/signIn.css

但是在我的Eclipse控制台上,我得到以下信息: -名称为'dispatcher'的DispatcherServlet处理[/customerPortal/signIn.css]的GET请求 -找不到[/signIn.css]的处理程序方法 -在DispatcherServlet中找不到名称为'dispatcher'的URI [/customerPortal/signIn.css]的HTTP请求的映射

在chrome控制台浏览器上,我得到: GET http://localhost:8035/customerPortal/signIn.css net :: ERR_ABORTED 404(未找到)

当我的CSS文件存储在/customerPortal/src/main/webapp/WEB-INF/signIn.css时,为什么要查找URI /customerPortal/signIn.css?

1 个答案:

答案 0 :(得分:1)

为您提供信息,您不能直接使用URL访问WEB-INF,Java servlet不允许。此外,请勿将资源放在WEB-INF下

  

您现在应该做什么?

在webapp下创建一个名为resources的文件夹,然后为CSS创建一个文件夹(resources / css)。然后将所有css放在css文件夹下。并创建另一个文件夹js,并将所有JavaScript文件放在此处。

然后将此方法添加到您的MvcConfiguration类中。

@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
                .addResourceHandler("/resources/**")
                .addResourceLocations("/resources/");
    }

现在您将CSS放入资源中,然后通过

进行访问
<link rel="stylesheet" href="resources/css/signIn.css" />
  

当前问题的解决方案,但不建议将静态资源放在WEB-INF下。

将您的<link rel="stylesheet" href="/src/main/webapp/WEB-INF/signIn.css">代码更改为此

<style><%@include file="/WEB-INF/signIn.css"%></style>

祝你好运...!祝您编码愉快!!