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

2022-07-19 14:56:29 浏览数 (1)

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

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

代码语言:javascript复制
<!-- 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的配置文件

代码语言:javascript复制
<!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用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):举例说明:

代码语言:javascript复制
①:<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.cn/121240.html原文链接:https://javaforall.cn

0 人点赞