当我加载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?
答案 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>
祝你好运...!祝您编码愉快!!