zoukankan      html  css  js  c++  java
  • springMVC找不到JS等文件

     应用springMVC时 JS等文件找不到错误

    应用springMVC时如果配置URL映射时如下配置

    <servlet>
            <servlet-name>appServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>

        <servlet-mapping>
            <servlet-name>appServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

    会导致页面引用的JS CSS发生找不到的错误 
    此时应在web.xml中添加 
    <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.css</url-pattern>
        </servlet-mapping>

        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.gif</url-pattern>
        </servlet-mapping>

        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.jpg</url-pattern>
        </servlet-mapping>

        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.js</url-pattern>
        </servlet-mapping>
    指明对于如上资源文件不采用spring的过滤器 


    关于default
    是tomcat配置的一个servlet
    “DefaultServlet 被定义在$CATALINA_HOME/conf/web.xml中,配置文件中被定义的东西会在Tomcat启动的时候 被加载,对所有的webapp都有效。DefaultServlet在Tomcat中主要是做目录列表(Directory Listing)用。 ” 
        <servlet> 
            <servlet-name>default</servlet-name> 
            <servlet-class> 
              org.apache.catalina.servlets.DefaultServlet 
            </servlet-class> 
            <init-param> 
                <param-name>debug</param-name> 
                <param-value>0</param-value> 
            </init-param> 
            <init-param> 
                <param-name>listings</param-name> 
                <param-value>true</param-value> 
            </init-param> 
            <load-on-startup>1</load-on-startup> 
        </servlet> 

    ... 

        <servlet-mapping> 
            <servlet-name>default</servlet-name> 
            <url-pattern>/</url-pattern> 
        </servlet-mapping> 
    有一些参数可以控制DefaultServlet的行为。此外,当请求的URL是/的时候, 也就是没有匹配的时候,就会触发这个DefaultServlet。 

    The default resource-serving servlet for most web applications, used to serve static resources such as HTML pages and images. 
    静态资源都走这个DefaultServlet

    也可以使用spring mvc 的 resources 注解 用来处理静态文件
    pring mvc 的<mvc;resources mapping="***" location="***">标签是在spring3.0.4出现的,主要是用来进行静态资源的访问。在spring3.0.4出来的时候 spring还没有更新其schema所以在配置文件中有可能找不到<mvc:resources >标签,这个问题在spring3.0.5中已经解决,而且网上也有很多其他的解决方案,我在这里就不记录了。

    首先使用spring mvc需要配置其使用的servlet.在web.xml中:
    Java代码  收藏代码

        <servlet>  
            <servlet-name>springMVC</servlet-name>  
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
            <load-on-startup>1</load-on-startup>  
            </servlet>  
          
            <servlet-mapping>  
                <servlet-name>springMVC</servlet-name>  
                <url-pattern>/</url-pattern>  
            </servlet-mapping>  


    这 里给 servlet-name定义的名称是springMVC,这样的话会在web-inf下spring会自动扫描一个XML文件名叫springMVC- servlet.xml文件,这里都是spring自动扫描的,如果你没有提供,将会报一个文件查找不到的异常。看了下 org.springframework.web.servlet.DispatcherServlet加载这个文件的过程,貌似这个文件存放的地址也是 可以进行设置的,具体怎么搞我还没有研究。

    由于spring mvc拦截了所有请求,所以当你设置
    引用
    <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>

    的时候会影响到静态资源文件的获取,这样就需要有这个标签来帮你分类完成获取静态资源的责任。

    springMVC-servlet.xml文件
    Java代码  收藏代码

        <?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: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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">     
          
            <mvc:resources mapping="/javascript/**" location="/static_resources/javascript/"/>  
            <mvc:resources mapping="/styles/**" location="/static_resources/css/"/>  
            <mvc:resources mapping="/images/**" location="/static_resources/images/"/>  
            <mvc:default-servlet-handler />  
              
              
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
                <property name="prefix" value="/WEB-INF/views/"/>  
                <property name="suffix" value=".jsp"/>  
            </bean>  
          
        </beans>  


    这里可以看到我所有的页面引用到/styles/**的资源都从/static_resources/css里面进行查找。

    页面的一段静态资源访问的代码。
    Java代码  收藏代码

        <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>  
        <HTML>  
        <HEAD>  
          <TITLE> ABCDEFG </TITLE>  
        <link type="text/css" rel="stylesheet" href="http://love-love-l.blog.163.com/blog/<c:url value='/styles/siteboard.css'/>">  
        ...  
        ...  
        ...  



    可能这个标签的真谛就是为了引用资源的访问不会类似CONTROLLER一样被拦截,区分出关注的资源的访问,一般我们在springMVC里面的拦截都会配置为"/",拦截所有的。
     
     
    本文转自:http://blog.csdn.net/fred1573/article/details/7762545
  • 相关阅读:
    每天一道LeetCode--141.Linked List Cycle(链表环问题)
    每天一道LeetCode--119.Pascal's Triangle II(杨辉三角)
    每天一道LeetCode--118. Pascal's Triangle(杨辉三角)
    CF1277D Let's Play the Words?
    CF1281B Azamon Web Services
    CF1197D Yet Another Subarray Problem
    CF1237D Balanced Playlist
    CF1239A Ivan the Fool and the Probability Theory
    CF1223D Sequence Sorting
    CF1228D Complete Tripartite
  • 原文地址:https://www.cnblogs.com/Rozdy/p/4710616.html
Copyright © 2011-2022 走看看