• SpringMVC的url-pattern配置及原理剖析


    SpringMVC的url-pattern配置及原理剖析

    xml里面配置标签:

    <!DOCTYPE web-app PUBLIC
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >
    
    <web-app>
      <display-name>Archetype Created Web Application</display-name>
    
      <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:springmvc.xml</param-value>
        </init-param>
      </servlet>
      <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
    
        <!--
          方式一:带后缀,比如*.action  *.do *.aaa
                 该种方式比较精确、方便,在以前和现在企业中都有很大的使用比例
          方式二:/ 不会拦截 .jsp,但是会拦截.html等静态资源(静态资源:除了servlet和jsp之外的js、css、png等)
    
                为什么配置为/ 会拦截静态资源???
                    因为tomcat容器中有一个web.xml(父),你的项目中也有一个web.xml(子),是一个继承关系
                          父web.xml中有一个DefaultServlet,  url-pattern 是一个 /
                          此时我们自己的web.xml中也配置了一个 / ,覆写了父web.xml的配置
                为什么不拦截.jsp呢?
                    因为父web.xml中有一个JspServlet,这个servlet拦截.jsp文件,而我们并没有覆写这个配置,
                    所以springmvc此时不拦截jsp,jsp的处理交给了tomcat
    
    
                如何解决/拦截静态资源这件事?
    
    
          方式三:/* 拦截所有,包括.jsp
        -->
        <!--拦截匹配规则的url请求,进入springmvc框架处理-->
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    </web-app>
    
    

    父xml的路径:

    我们配置的springmvc.xml只能对jsp进行拦截,但不能对html等进行拦截,我们在webapp下新建个test.html

    然后访问:

    原因是没有对html等静态资源后缀进行处理的handle.

    我们在springmvc.xml里面配置:

    <mvc:default-servlet-handler/>
    

    访问:

    继续测试:
    如果我们将html页面放在webapp以外的其他位置,都是无法访问的:

    那如果我们想让静态资源在resources下面访问,我们应该怎么配置呢?

    静态资源配置方案二

    将test.html放在resources目录下面,然后配置springmvc.xml:

     <!--静态资源配置,方案二,SpringMVC框架自己处理静态资源
            mapping:约定的静态资源的url规则
            location:指定的静态资源的存放位置
        -->
        <mvc:resources location="classpath:/"  mapping="/resources/**"/>
    

    resources目录就是咱们的classpath路径。
    访问:

    http://localhost:8080/resources/test.html

  • 相关阅读:
    Linux and the Unix Philosophy (Linux/Unix设计思想)
    rails获取json内容
    单元测试调试之传参篇
    部署注意细节之正式测试链接地址不同
    ajax页面排序的序号问题
    【51Nod1239】欧拉函数之和-杜教筛+哈希表
    【51Nod1239】欧拉函数之和-杜教筛+哈希表
    【51Nod1244】莫比乌斯函数之和-杜教筛+哈希表
    【51Nod1244】莫比乌斯函数之和-杜教筛+哈希表
    【BZOJ3112】防守战线(ZJOI2013)-单纯形法+对偶理论
  • 原文地址:https://www.cnblogs.com/liuyj-top/p/13137736.html
Copyright © 2020-2023  润新知