gpt4 book ai didi

spring - 为什么 jsp 无法在 Spring MVC 中访问它的 css 文件?

转载 作者:行者123 更新时间:2023-12-01 12:41:49 25 4
gpt4 key购买 nike

我有一个 SpringMVC 项目。在 tomcat7 中运行项目后,我收到以下消息:

在名为“DispatcherServlet”的 DispatcherServlet 中未找到具有 URI [/myproject/resources/css/welcome.css] 的 HTTP 请求的映射

没有应用 CSS:

enter image description here

我已经尝试过可用的解决方案,但没有一个有效,也没有一个真正解释了发生了什么。

我在 /WEB-INF/jsp 中有一个简单的 welcome.jsp。在这里:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link type="text/css"
href="${pageContext.request.contextPath}/resources/css/welcome.css"
rel="stylesheet">
<title>Welcome!</title>
</head>
<body>
<div id="font-HarabaraHand">
<p class="centrify">Poem Collection</p>
</div>
<div id="font-Goodfoot">
<p class="centrify2">What would you like to do?</p>
</div>

</body>
</html>

我的welcome.css 文件位于src/main/webapp/resources/css/。我的 Spring 配置是基于 java 的,DispatcherServlet 类在 AppInit.java 文件中:

public class AppInit implements WebApplicationInitializer {
// this method is automatically invoked on application startup
public void onStartup(ServletContext container) throws ServletException {
WebApplicationContext webcntx = getWebCntx();

container.addListener(new ContextLoaderListener(webcntx));

ServletRegistration.Dynamic dispatcher = container.addServlet(
"DispatcherServlet", new DispatcherServlet(webcntx));

dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}

private AnnotationConfigWebApplicationContext getWebCntx() {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(WebAppConfiguration.class);
return context;
}
}

最后在 WebAppConfig.java 文件中:

@Bean
public InternalResourceViewResolver getInternalResourceViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
if (!registry.hasMappingForPattern("/resources/**")) {
registry.addResourceHandler("/resources/**").addResourceLocations(
"/resources/").setCachePeriod(CACHE_PERIOD);;

}
}

我的欢迎页面 Controller :

@Controller
public class WelcomeController {

@RequestMapping(value="/")
public ModelAndView welcomePage() {
return new ModelAndView("welcome");
}
}

这是我的项目结构:

upper part welcome.jsp file

<强>1。为什么无法访问我的 welcome.css 文件?

<强>2。如何更正我的映射配置?

我非常感谢有关 Spring url 映射配置的解释或链接。

最佳答案

通过使用 Java 配置:

  1. 创建如下子目录结构:src/main/webapp/public/css

  2. 将您的 css 文件放入 src/main/webapp/public/css(例如 src/main/webapp/public/css/welcome.css)

  3. 定义公共(public)资源的处理程序:

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    super.addResourceHandlers(registry);
    if (!registry.hasMappingForPattern("/public/**")) {
    registry.addResourceHandler("/public/**")
    .addResourceLocations("/public/")
    .setCachePeriod(CACHE_PERIOD); // You have to define a cache period.
    }
    }
  4. 添加安全异常(exception):

    @Override
    public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/public/**");
    }
  5. 链接你的 css 文件(通过定义相对路径):

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    ...
    <head>
    <c:set var="url">${pageContext.request.requestURL}</c:set>
    <base href="${fn:substring(url, 0, fn:length(url) - fn:length(pageContext.request.requestURI))}${pageContext.request.contextPath}/" />
    <link rel="stylesheet" href="public/css/welcome.css" />
    </head>

关于spring - 为什么 jsp 无法在 Spring MVC 中访问它的 css 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23731360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com