项目中用到了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 路径匹配原则详解 Spring MVC 中的路径匹配原则是指在配置拦截器时,使用 `<mvc:mapping/>` 子标签指定需要拦截的路径。该标签的 `path` 属性用来指定需要拦截的路径,例如 `<mvc:interceptor><mvc:...
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
1. **类型安全的路径变量**:这个版本引入了类型安全的路径变量,允许开发者指定路径变量的预期类型,从而在编译时检查类型匹配,减少运行时错误。 2. **Java配置增强**:Spring 4.2.x系列进一步提升了Java配置的...
4. **路径变量**:在@RequestMapping注解中,可以使用路径变量(path variables)来获取URL中的动态部分,增强了路由的灵活性。 5. **RESTful支持**:4.0版本增强了对RESTful Web服务的支持,通过@RequestMapping和...
Spring MVC 是一款强大的Java Web开发框架,用于构建高效、可维护和模块化的Web应用程序。它作为Spring框架的一部分,提供了一种优雅的方式来处理HTTP请求和响应,使得开发者可以专注于业务逻辑而不是底层实现。在这...
视图解析器是Spring MVC中用于确定视图名对应的实际资源路径的组件。例如,InternalResourceViewResolver可以将视图名转换为JSP页面的URL。 依赖注入(Dependency Injection, DI)是Spring框架的核心特性之一。在...
在这个例子中,Spring MVC会尝试从请求中解析与`User`类属性匹配的参数,并填充到`User`对象中。 3. **属性映射** 当URL中包含与对象属性同名的参数时,Spring MVC会自动进行映射。例如,如果URL是`/users?...
`@RequestParam`用于从请求参数中获取值,`@PathVariable`用于处理URL路径变量,`@ModelAttribute`则常用于绑定表单数据到模型对象。 此外,Spring MVC提供了ModelAndView类,它可以将处理结果(模型数据)和视图名...
在Spring MVC中,每个请求都会经过DispatcherServlet,这是一个前端控制器,它会根据请求的URL和配置的映射规则将请求分发到合适的处理器。处理器可以是自定义的Controller类,Controller通过方法注解(如@...
- **使用@RequestMapping 注解映射请求路径**:此注解用于指定控制器处理的具体 URL 路径。 - **定义@RequestMapping 注解的处理方法**:控制器类中的方法可以使用 @RequestMapping 来映射特定的 HTTP 请求。 - *...
Spring MVC是一种基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,使用了IoC容器,支持RESTful风格的应用程序开发。Spring MVC通过分离模型(Model)、视图(View)和控制器(Controller)来简化Web开发...
Spring 4引入了更多的注解,如`@RestController`(用于RESTful服务)、`@PathVariable`(用于处理URL路径变量)、`@RequestParam`(用于处理请求参数)等,这使得代码更加简洁,降低了XML配置的复杂性。 7. **...
6. **注解驱动开发**:Spring MVC支持使用注解来简化配置,如@RequestMapping用于映射请求,@RequestParam用于获取请求参数,@PathVariable用于处理URL路径变量。 7. ** ModelAndView**:这个类是用来存储模型数据...
6. **RESTful风格的URL设计**: Spring MVC支持创建符合REST原则的URL,便于构建基于HTTP的API。例如,使用`@GetMapping`、`@PostMapping`等注解来映射HTTP的GET、POST等方法。 7. **参数绑定**: Spring MVC可以自动...
Spring MVC 是一个强大的Java Web应用程序开发框架,是Spring框架的一部分,专注于处理Web请求和返回响应。它提供了模型-视图-控制器(MVC)架构,帮助开发者构建灵活、可维护的Web应用。在这个"spring mvc 整合包...
### Spring MVC 学习指南详解 #### 一、Spring MVC 概述 Spring MVC 是 Spring 框架的一部分,主要用于构建基于 Model-View-Controller (MVC) 设计模式的 Web 应用程序。它提供了丰富的功能来简化 Web 开发过程,...
《精通Spring MVC4》这本书是Java开发者们的重要参考资料,它深入浅出地讲解了Spring MVC这一强大框架的各个方面。Spring MVC是Spring框架的一个模块,专为构建Web应用程序而设计,以其灵活性、高效性和可扩展性受到...