【问题标题】:spring MVC MAVEN: Static resource With 404spring MVC MAVEN:带有404的静态资源
【发布时间】:2017-05-09 13:40:12
【问题描述】:

我已经搜索过这个,但没有得到相同的解决方案。我得到了信息,即我们必须使用 <mvc:resources location="/resources/" mapping="/resources/**"/> 并将所有静态成员(如 css/img/js)放在资源文件夹中

src

|--main

|    |

|    |--java

|    |--resources

|    |--webapp

然后我们必须使用jstl或spring标签来映射资源,如下所示:

<head>
    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
    <spring:url value="/resources/LoginForm.css" var="loginCss" />
    <link rel="stylesheet" href="${loginCss}" type="text/css" />
</head>

我通过牢记所有要点开发了一些代码,但静态资源出现 404 错误。

click here for project structure

调度程序 servlet.xml 的代码

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
    ">
    <mvc:annotation-driven/>
    <context:component-scan base-package="com.anand" />
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/views/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="/WEB-INF/messages" />
    </bean>
    <mvc:resources location="/resources/" mapping="/resources/**"/>
    <mvc:default-servlet-handler />


</beans>

loginform.jsp 的代码

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Home-Login</title>
<spring:url value="/resources/LoginForm.css" var="loginCss" />
<spring:url value="/resources/logo1.PNG" var="logo1" />
<spring:url value="/resources/img1.png" var="img1" />
<spring:url value="/resources/img2.png" var="img2" />
<spring:url value="/resources/img3.png" var="img3" />

<link rel="stylesheet" href="${loginCss}" type="text/css" />
</head>
<body class="login">
<!-- header starts here -->
<div id="facebook-Bar">
  <div id="facebook-Frame">
    <div id="logo"> <a href="#"><img src="${logo1}" /></a></div>
    <div id="header-main-right">
      <div id="header-main-right-nav">
        <form:form action="loginform.html" method="post" commandName="loginform">
        <table border="0" style="border:none">
            <tr>
              <td ><form:input type="text" tabindex="1"  path="userName" placeholder="UserName" class="inputtext radius1" value="" /></td>
              <td ><form:input type="password" tabindex="2" path="password" placeholder="Password" class="inputtext radius1" /></td>
              <td ><input type="submit" class="fbbutton" name="login" value="Login" /></td>
            </tr>
            <tr>
              <td><label>
                  <input id="persist_box" type="checkbox" name="persistent" />
                  <span style="color:#ccc;">Keep me logged in</span></label></td>
              <td><label><a href="" style="color:#ccc; text-decoration:none">forgot your password?</a></label></td>
            </tr>
          </table>
        </form:form>
      </div>
    </div>
  </div>
</div>
<div class="slideshow-container" style="width:100%;height:80%; min-width:1000px;">

<div class="mySlides fade" style="width:100%;height:100%">
  <div class="numbertext">1 / 3</div>
  <img src="${img1}" style="width:100%;height:100%" />
  <div class="text">Caption Text</div>
</div>

<div class="mySlides fade" style="width:100%;height:100%">
  <div class="numbertext">2 / 3</div>
  <img src="${img2}" style="width:100%;height:100%" />
  <div class="text">Caption Two</div>
</div>

<div class="mySlides fade" style="width:100%;height:100%">
  <div class="numbertext">3 / 3</div>
  <img src="${img3}" style="width:100%;height:100%" />
  <div class="text">Caption Three</div>
</div>

</div>
<br/>

<div style="text-align:center">
  <span class="dot"></span> 
  <span class="dot"></span> 
  <span class="dot"></span> 
</div>

<script>
var slideIndex = 0;
showSlides();

function showSlides() {
    var i;
    var slides = document.getElementsByClassName("mySlides");
    var dots = document.getElementsByClassName("dot");
    for (i = 0; i < slides.length; i++) {
       slides[i].style.display = "none";  
    }
    slideIndex++;
    if (slideIndex> slides.length) {slideIndex = 1}    
    for (i = 0; i < dots.length; i++) {
        dots[i].className = dots[i].className.replace(" active", "");
    }
    slides[slideIndex-1].style.display = "block";  
    dots[slideIndex-1].className += " active";
    setTimeout(showSlides, 2000); // Change image every 2 seconds
}
</script>
</body>
</html>

当它将我重定向到 loginform.jsp 并且我执行 F12--> 网络分析时,它会显示 404 用于静态资源(如 img1、img2、img3、logo1 和 .css 文件)。 Click Here for F12 debug and chrome view of page without css

【问题讨论】:

    标签: spring maven model-view-controller


    【解决方案1】:

    WEB-INF 中的资源受到保护,不能直接从客户端访问。

    一般来说,如果是html、CSS、JavaScript等静态资源,可以放在WEB-INF之外。因此,放置在外部的静态内容可以直接从客户端浏览器下载。

    请阅读Referencing a resource placed in WEB-INF folder in JSP file returns HTTP 404 on resource

    【讨论】:

    • /WEB-INF/classes/META-INF/resources除外
    • @Clement ...谢谢,这正是我在不知不觉中所做的事情,正如我在回答中所写的那样,它对我有用,但是在阅读您的解释后我得到了背后的逻辑...谢谢很多..:)
    【解决方案2】:

    [[已解决]]:终于解决了问题,但我不确定我在这里使用的方法是否正确,但它对我有用。解决方案:我已经复制了webapp文件夹下的资源文件夹(即WEB_INF和资源是同级的)。

    Click here for updated directory structure image

    如果您有同样的问题,请提供更好的解决方案:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-07
      • 2015-08-21
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2015-04-12
      • 2016-04-13
      • 2012-08-02
      相关资源
      最近更新 更多