`
jetdan
  • 浏览: 5475 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Sping MVC URL 根路径匹配的困惑

阅读更多

 

项目中用到了Spring MVC,需要匹配根路径,那RequestMapping我该写啥?

 

@RequestMapping("")  还是  @RequestMapping("/")

 

结果发现都能匹配,更仔细地测试:

 

@Controller
public class MappingTest {

    @RequestMapping("/")
    @ResponseBody
    public String index(){
        return "index";
    }

    @RequestMapping("/second")
    @ResponseBody
    public String secondLevel(){
        return "second";
    }
}

 用例:

http://localhost:8080/second ok

http://localhost:8080/second?age=10 ok
http://localhost:8080//////second ok

 

http://localhost:8080/second/ ok
http://localhost:8080/second/?age=10  ok

http://localhost:8080/////second////?age=10  ok

 

发现上述路径全都能匹配。Spring MVC 匹配路径的规则同Ant Path Matcher ,因此推测结论: 

    Ant 在处理url的时候对于中间多余的"/" 和尾部的"/" 都会被忽略。

 

 

那么Servlet 本身URL匹配也是这样的规则吗? 又创建以下测试:

 

    <servlet>
        <servlet-name>second</servlet-name>
        <servlet-class>dan.controller.Second</servlet-class>
    </servlet>

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

 

 

public class Second extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("second - from servlet");
    }
}
 

 

发现:

 

http://localhost:8080/second ok
http://localhost:8080/second?age=10 ok
http://localhost:8080//////second ok

http://localhost:8080/second/ 404
http://localhost:8080/second/?age=10  404

对于中间多余的"/",Servlet url-pattern匹配同Ant Path 处理的情况,但是对于尾部的 "/",Servlet url-pattern认为*/ 和 * 是不同的情况。

 

上述测试仅仅是在Tomcat7环境下做的测试,不保证其它servlet容器也符合这一规则。

 

附:

AntPathMatcher 

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/AntPathMatcher.html

Servlet url-pattern

http://www.roguewave.com/portals/0/products/hydraexpress/docs/3.5.0/html/rwsfservletug/4-3.html

分享到:
评论

相关推荐

    精通Spring MVC 4

    本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...

    spring mvc路径匹配原则详解

    Spring MVC 路径匹配原则详解 Spring MVC 中的路径匹配原则是指在配置拦截器时,使用 `&lt;mvc:mapping/&gt;` 子标签指定需要拦截的路径。该标签的 `path` 属性用来指定需要拦截的路径,例如 `&lt;mvc:interceptor&gt;&lt;mvc:...

    Spring MVC 4.2.3

    1. **类型安全的路径变量**:这个版本引入了类型安全的路径变量,允许开发者指定路径变量的预期类型,从而在编译时检查类型匹配,减少运行时错误。 2. **Java配置增强**:Spring 4.2.x系列进一步提升了Java配置的...

    spring mvc 4.0

    4. **路径变量**:在@RequestMapping注解中,可以使用路径变量(path variables)来获取URL中的动态部分,增强了路由的灵活性。 5. **RESTful支持**:4.0版本增强了对RESTful Web服务的支持,通过@RequestMapping和...

    最全最经典spring-mvc教程

    Spring MVC 是一款强大的Java Web开发框架,用于构建高效、可维护和模块化的Web应用程序。它作为Spring框架的一部分,提供了一种优雅的方式来处理HTTP请求和响应,使得开发者可以专注于业务逻辑而不是底层实现。在这...

    Mastering Spring MVC 4(2015.09)源码

    视图解析器是Spring MVC中用于确定视图名对应的实际资源路径的组件。例如,InternalResourceViewResolver可以将视图名转换为JSP页面的URL。 依赖注入(Dependency Injection, DI)是Spring框架的核心特性之一。在...

    java spring mvc项目,通过URL地址传递对象参数给action.zip

    在这个例子中,Spring MVC会尝试从请求中解析与`User`类属性匹配的参数,并填充到`User`对象中。 3. **属性映射** 当URL中包含与对象属性同名的参数时,Spring MVC会自动进行映射。例如,如果URL是`/users?...

    Spring MVC使用Demo

    `@RequestParam`用于从请求参数中获取值,`@PathVariable`用于处理URL路径变量,`@ModelAttribute`则常用于绑定表单数据到模型对象。 此外,Spring MVC提供了ModelAndView类,它可以将处理结果(模型数据)和视图名...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    在Spring MVC中,每个请求都会经过DispatcherServlet,这是一个前端控制器,它会根据请求的URL和配置的映射规则将请求分发到合适的处理器。处理器可以是自定义的Controller类,Controller通过方法注解(如@...

    Spring mvc 教程

    - **使用@RequestMapping 注解映射请求路径**:此注解用于指定控制器处理的具体 URL 路径。 - **定义@RequestMapping 注解的处理方法**:控制器类中的方法可以使用 @RequestMapping 来映射特定的 HTTP 请求。 - *...

    Spring MVC 教程快速入门 深入分析

    Spring MVC是一种基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,使用了IoC容器,支持RESTful风格的应用程序开发。Spring MVC通过分离模型(Model)、视图(View)和控制器(Controller)来简化Web开发...

    spring MVC简单示例

    Spring 4引入了更多的注解,如`@RestController`(用于RESTful服务)、`@PathVariable`(用于处理URL路径变量)、`@RequestParam`(用于处理请求参数)等,这使得代码更加简洁,降低了XML配置的复杂性。 7. **...

    spring-MVC.zip_Java spring mvc_spring mvc_spring mvc

    6. **注解驱动开发**:Spring MVC支持使用注解来简化配置,如@RequestMapping用于映射请求,@RequestParam用于获取请求参数,@PathVariable用于处理URL路径变量。 7. ** ModelAndView**:这个类是用来存储模型数据...

    spring MVC .docx

    Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。Spring MVC的设计目标是提供一个清晰的组件化架构,使得开发者可以独立地开发和测试控制器、...

    Spring mvc5.0.3 所有jar包

    6. **RESTful风格的URL设计**: Spring MVC支持创建符合REST原则的URL,便于构建基于HTTP的API。例如,使用`@GetMapping`、`@PostMapping`等注解来映射HTTP的GET、POST等方法。 7. **参数绑定**: Spring MVC可以自动...

    spring mvc 整合包

    Spring MVC 是一个强大的Java Web应用程序开发框架,是Spring框架的一部分,专注于处理Web请求和返回响应。它提供了模型-视图-控制器(MVC)架构,帮助开发者构建灵活、可维护的Web应用。在这个"spring mvc 整合包...

    Spring MVC学习指南

    ### Spring MVC 学习指南详解 #### 一、Spring MVC 概述 Spring MVC 是 Spring 框架的一部分,主要用于构建基于 Model-View-Controller (MVC) 设计模式的 Web 应用程序。它提供了丰富的功能来简化 Web 开发过程,...

Global site tag (gtag.js) - Google Analytics