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

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

现整理一下:

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


  	springmvc
  	org.springframework.web.servlet.DispatcherServlet
  	
  	
  	
  		
  		contextConfigLocation
  		
  		springmvc.xml
  	
  
  
  	springmvc
  	
  	*.action
  

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


    
        
        
        
        
    

(3):举例说明:

①:/  会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
②:/* 会匹配所有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,当然就能正常返回页面了


你可能感兴趣的:(SpringMVC)