SpringMVC中url-pattern /和/*的区别「建议收藏」

学习Spring的时候,在配置web.xml的时候,把url-pattern 配置成/*,启动项目后去访问自己的Controller总是报404.检查了很多发现资源是存在的,配置的地址也没有问题,为什么会出现404错误呢?最后发现是自己配置的 url-pattern 不对! 现整理一下: (1):在使用springmvc时,都会在web.xml中配置一个dispatchservlet,如下:

大家好,又见面了,我是全栈君。

学习Spring的时候,在配置web.xml的时候,把url-pattern 配置成/*,启动项目后去访问自己的Controller总是报404.检查了很多发现资源是存在的,配置的地址也没有问题,为什么会出现404错误呢?最后发现是自己配置的 url-pattern 不对!
现整理一下:
(1):在使用springmvc时,都会在web.xml中配置一个dispatchservlet,如下:

<!-- Spring MVC Servlet -->  

<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>

(2):配置spring的配置文件

<!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- -->
    <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="2">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="contentType" value="text/html" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

(3):举例说明:

①:<url-pattern>/</url-pattern>  会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
②:<url-pattern>/*</url-pattern> 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)

①:地址为 localhost:8088/login , /login 返回login.jsp
访问去Controller下的/login 跳转到相应的视图login.jsp
②:访问的地址为 localhost:8088/login/ ,/login 返回login.jsp
访问去Controller下的/login,跳转到login.jsp ,然后进过dispatchservlet的时候,由于是/* ,有会以localhost:8088/login/login.jsp 去请求Controller ,那么如果Controller没有 /login/login.jsp 的Mapping映射,则会报404 错误!

(4):总结
< url-pattern > / < url-pattern > /* 能匹配所有请求URL,会匹配到*.jsp,会出现返回jsp视图时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错。

当映射规则为 /* 时,最后返回xx.jsp也经过DispatcherServlet,它又会去找相对应的处理器,这也是控制台打印noHandlerFound,也就导致了404错误,页面更别想看到。当改成 / 后,servlet不会匹配到.jsp的URI,当然就能正常返回页面了

(5):参考文章
url-pattern中 / 和 /* 的区别
Difference between / and /* in servlet mapping url pattern

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121240.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 相机标定(Camera calibration)原理、步骤

    相机标定(Camera calibration)原理、步骤&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;这已经是我第三次找资料看关于相机标定的原理和步骤,以及如何用几何模型,我想十分有必要留下这些资料备以后使用。这属于笔记总结。1.为什么要相机标定?&amp;nb

    2022年5月28日
  • sql server 2005卸载教程_sql卸载工具

    sql server 2005卸载教程_sql卸载工具如果您要安装新版的sql就必须先完整的卸载sql2005,如果你按照常规的方法是不能完整的卸载sql2005,从而会引起安装的时候说sql已经挂起的错误,sql2005卸载工具(sqlserver2005卸载工具),是一个帮你完整的清理已经安装的sql的工具。MicrosoftSQLServer2005是一个全面的数据库平台,使用集成的商业智能(BI)工具提供了企业级的数据管理。Mi…

    2022年9月15日
  • nginx负载均衡算法8种_权重负载均衡算法实现

    nginx负载均衡算法8种_权重负载均衡算法实现Nginx是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达50,000个并发连接数的响应,感谢Nginx为我们选择了epollandkqueue作为开发模型。下面是五种负载均衡算法:roundrobin(默认) weight IP_hash url_hash(第三方) fair(第三方)1.roundr…

    2022年10月12日
  • decltype 使用

    decltype 使用功能decltype可以将给定的表达式或变量的类型推导出来,包含引用和指针。一般用于复杂表达式作为返回值的类型推导。可以用于补足c++11的auto缺陷.编译阶段的事情,不会任何执行,表达式也不会执行。类型规则规则一:声明类型,类型包含引用就有引用,没有引用也不会自行添加。规则二:返回值则根据返回值类型确定最终类型。规则三:表达式根据默认和重载得到的最终类型。不建议特别复杂的表达式。声明类型分析案例一intmain()..

    2022年9月9日
  • js生成二维码原理_二维码生成器原理

    js生成二维码原理_二维码生成器原理1.引用相关的js文件:        jquery.qrcode.js,qrcode.js    2.js代码如下:           3.html页面主要部分:       以上就可以生成自己的二维码了,手机扫描就可以跳转到指定的页面或者显示内容。   相关的代码在这:http://download.csdn.net/detail/go_walkin

    2022年10月17日
  • spring boot 加密_springboot 密码加密

    spring boot 加密_springboot 密码加密首先介绍一下jasypt的使用方法可以参考下面这篇文章:Get史上最优雅的加密方式!没有之一!版本对应的坑使用的时候还是遇到一个坑,就是jasypt的版本与springboot版本存在对应情况。可以看到jasypt是区分java7和java8的,也存在依赖spring版本的情况。自己尝试了一下在使用jasypt-spring-boot-starter的前提下 j…

    2022年9月26日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号