Springmvc项目web.xml中servlet-mapping路径映射配置注意说明

 更新时间:2023年12月26日 15:18:46   作者:huangyaa729  
这篇文章主要介绍了Springmvc项目web.xml中servlet-mapping路径映射配置注意说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

今天准备在IDEA编辑器下创建个通过maven管理的springMVC工程来测试一些功能,按照记忆中的方式以及配合百度完成了工程的创建,但在访问web.xml中配置的首页时,无论如何都无法访问,试了很多方式,但都不是很理想,无意间仔细看了下下的映射规则,再结合自己的尝试,算是解决了心中的疑惑,也总结下自己的心得:

其他的配置暂且略去,主要关注属性的配置;

最初的配置

  <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

可以正常访问controller层的映射处理函数,但是无法访问web.xml中设置的首页;

尝试的方法

(1)因为无法找到首页index.jsp

首先怀疑是路径不对,改了各种位置,甚至重建了一遍工程还是不行,最后仔细分析报错

如下:

 org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/spring] in
  DispatcherServlet with name 'dispatcher'

无法通过DispatcherServlet 找到合适的映射,因此怀疑把首页的请求也当成映射来处理了,于是改成如下的匹配模式

精确匹配路径:

   <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/test/*</url-pattern>
        </servlet-mapping>

虽然首页能正常显示了,但是controller层的映射却匹配不到了,访问路径为:http://localhost:8080/spring/test/first

controller层的映射匹配模式如下:

@RequestMapping("/test/first")

报错仍是找不到映射处理函数,然后尝试了很多次,发现采用精确匹配模式后,在dispatcher查找映射处理函数时,会把路径中"test/“之前的部分去除,只匹配之后的路径部分,改为如下模式即可匹配:

@RequestMapping(”/first")

(2)然后再次改变精确匹配模式

改为如下配置:

            <servlet-mapping>
                <servlet-name>dispatcher</servlet-name>
                <url-pattern>*.do</url-pattern>
            </servlet-mapping>

controller层的映射改为 @RequestMapping("/test/first.do"),这样首页和controller层都可以正常访问了,当然原理与上一个方法一样,改变DispatcherServlet匹配规则,让首页访问不再经过DispatcherServlet匹配,那么就能访问到了;

(3)无意间参考了之前的一个工程配置

发现采用如下映射模式:

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

发现也解决了首页和congtroller层的访问问题,因此就搜了下"/“和”/*"区别:(具体原因可参照tomcat解析中的Catalina请求处理这一节所述)

1、<url-pattern>/ </ url-pattern >   不会匹配到*.jsp,由JspServlet(tomcat中默认的web.xml中配置的)拦截处理,即*.jsp不会进入spring的 DispatcherServlet类 。

2、在配置了< url-pattern > /* </ url-pattern >的情况下自然会拦截所有请求(包括/login,*.jsp,*.js和*.html等)

同时,对于首页的匹配逻辑如下所述,完美解释了上述报错的原因:

  • 如果配置了servlet的url-pattern是/*,那么访问localhost:8080/会匹配到该servlet上,而不会匹配welcome-file-list;
  • 如果url-pattern是/(该servlet即为默认servlet),访问localhost:8080/时,如果其他匹配模式都没有匹配到,则会匹配welcome-file-list(只针对这个启动时默认访问请求有效)。

另外,“/”其实能拦截“.js”,“.css”,".png"等静态资源的访问,因此如果采用“/”的配置时,需要在主配置文件中配置放行静态资源(即DispatcherServlet对应的配置文件),这样才不会出现意想不到的匹配错误404.

<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/> 
<mvc:resources location="/WEB-INF/css/" mapping="/css/**"/>
<mvc:resources location="/WEB-INF/images/" mapping="/images/**"/>

总结

如上就是我针对此次创建工程的问题的总结,有不妥的地方还望指出。

这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解SpringBoot+Lucene案例介绍

    详解SpringBoot+Lucene案例介绍

    这篇文章主要介绍了详解SpringBoot+Lucene案例介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Java之Error与Exception的区别案例详解

    Java之Error与Exception的区别案例详解

    这篇文章主要介绍了Java之Error与Exception的区别案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • IDEA实现JDBC的操作步骤

    IDEA实现JDBC的操作步骤

    JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,本文给大家介绍IDEA实现JDBC的操作步骤,感兴趣的朋友一起看看吧
    2022-01-01
  • Java中的反射机制详解

    Java中的反射机制详解

    这篇文章主要介绍了JAVA 反射机制的相关知识,文中讲解的非常细致,代码帮助大家更好的理解学习,感兴趣的朋友可以了解下
    2021-09-09
  • Java编程中的性能优化如何实现

    Java编程中的性能优化如何实现

    这篇文章主要介绍了Java编程中的性能优化如何实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java之源文件的执行全过程

    Java之源文件的执行全过程

    这篇文章主要介绍了Java之源文件的执行全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 一文带你初识java中的String类

    一文带你初识java中的String类

    String代表字符串,Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现,这篇文章主要给大家介绍了关于java中String类的相关资料,需要的朋友可以参考下
    2021-10-10
  • SpringMVC拦截器快速掌握下篇

    SpringMVC拦截器快速掌握下篇

    拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。本文将详细讲讲SpringMVC中拦截器的概念及入门案例,感兴趣的可以尝试一下
    2022-08-08
  • Java 多线程等待优雅的实现方式之Phaser同步屏障

    Java 多线程等待优雅的实现方式之Phaser同步屏障

    在JAVA 1.7引入了一个新的并发API:Phaser,一个可重用的同步barrier。在此前,JAVA已经有CyclicBarrier、CountDownLatch这两种同步barrier,但是Phaser更加灵活,而且侧重于 重用
    2021-11-11
  • servlet上传文件实现代码详解(四)

    servlet上传文件实现代码详解(四)

    这篇文章主要为大家详细介绍了servlet上传文件的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09

最新评论