zoukankan      html  css  js  c++  java
  • [刘阳Java]_SpringMVC访问静态资源_第9讲

    有些时候我们在使用SpringMVC的时候造成无法访问静态资源文件(如:html,js,css,image等等)。其主要的原因出在web.xml文件我们设置SpringMVC前端控制器的映射路径

        <servlet>
            <servlet-name>spmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc-web.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
            
        <servlet-mapping>
            <servlet-name>spmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

    上面代码中的<url-pattern>/</url-pattern>相当于拦截项目中所有请求,这样就造成无法访问静态资源文件

    解决方法一:在springmvc-web.xml中添加资源映射

    <mvc:resources mapping="/resources/**" location="/resources/" />
    <mvc:resources mapping="/images/**" location="/images/" />
    <mvc:resources mapping="/js/**" location="/js/" />
    • mapping:映射,两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)
    • location:本地资源路径,注意必须是webapp根目录下的路径

    这样我们就可以直接访问该文件夹下的静态内容了,如下路径:
    http://localhost:8090/firstapp/images/cookie.png
    http://localhost:8090/firstapp/js/jquery-1.11.2.js

    WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。

    当然,你非要放在WEB-INF中,则必须修改resources映射,配置文件中代码如下

    <resources mapping="/js/**" location="/WEB-INF/js/" />

    解决办法二:使用默认的静态资源处理Servlet处理静态资源(涉及spring-mvc.xml, web.xml)

    • 在spring-mvc.xml中启用默认Servlet
    <mvc:default-servlet-handler/>
    • 修改web.xml文件,且下面的代码必须在DispatcherServlet的前面
    <servlet-mapping>    
        <servlet-name>default</servlet-name>    
        <url-pattern>*.js</url-pattern>    
        <url-pattern>*.css</url-pattern>    
        <url-pattern>/assets/*"</url-pattern>    
        <url-pattern>/images/*</url-pattern>    
    </servlet-mapping>

    解决办法三:将DispatcherServlet的URL映射改成*.do的形式,这样在访问静态资源文件就不会被拦截到

    <servlet>
        <servlet-name>spmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>classpath:springmvc-web.xml</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
    </servlet>
            
    <servlet-mapping>
         <servlet-name>spmvc</servlet-name>
         <url-pattern>*.do</url-pattern>
    </servlet-mapping>
  • 相关阅读:
    遇到百张数据表也不怕,Java自动生成实体、Controller、DAO、Service以及Service实现类
    【报错处理】npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/yarn
    阿里云centos Linux系统挂载数据盘操作流程
    Spring Boot获取配置参数最简单常用的两种方式
    最简洁明了的Linux常用命令
    vue+springboot图片上传和显示
    再学Java 之 interface的成员变量
    Java 多线程学习笔记:生产者消费者问题
    Java 多线程学习笔记:wait、notify、notifyAll的阻塞和恢复
    查看MySQL 表结构
  • 原文地址:https://www.cnblogs.com/liuyangjava/p/6786515.html
Copyright © 2011-2022 走看看