SpringMVC中url-pattern /和/*的区别

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

现整理一下:

(1):在使用springmvc时,都会在web.xml中配置一个前端控制器dispatchservlet,如下:

<!-- 配置前端控制器 -->
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- 加载springmvc配置 -->
  	<!-- 如果不配置,则默认查找的是classpth下的:servletname+"-servlet.xml",例如我这边配置的servlet名字叫springmvc,则默认查找"springmvc-servlet.xml" -->
  	<init-param>
  		<!-- DispatcherServlet继承自FrameworkServlet, 其中定义了contextConfigLocation,表示配置文件地址-->
  		<param-name>contextConfigLocation</param-name>
  		<!-- 配置文件的地址 -->
  		<param-value>springmvc.xml</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<!--
  		可以配置/,此工程所有的请求全部由springmvc解析,此种方式可以实现RESTful 方式,需要特殊处理静态文件的解析,不能由springmvc解析
  		可以配置*.do或*.action,所有请求的扩展名为.do或.action时,由springmvc来解析,此种方法常用
  		不可以配置/*,如果配置/*,返回jsp也有springmvc解析,这是不对的
  	 -->
  	<url-pattern>*.action</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,当然就能正常返回页面了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值