`
Inmethetiger
  • 浏览: 108485 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring MVC 3.0版本和3.1版本的一点小区别

阅读更多

先上代码:

主要是控制器:

@Controller
public class AccountController {

	private Map<Long, Account> accounts = new ConcurrentHashMap<Long, Account>();

	private static Logger log = LoggerFactory
			.getLogger(AccountController.class);

	// value = "createForm",
	@RequestMapping(method = RequestMethod.GET)
	public String getCreateForm(Model model) {
		log.info("createForm  method is running");
		model.addAttribute(new Account());
		return "account/createForm";
	}

	// value = "account",
	@RequestMapping(method = RequestMethod.POST)
	public String create(@Valid Account account, BindingResult result) {
		log.info("account  method is running");
		if (result.hasErrors()) {
			List<ObjectError> errors = result.getAllErrors();
			for (ObjectError error : errors) {
				log.info(error.getDefaultMessage());
			}
			return "account/createForm";
		}
		this.accounts.put(account.assignId(), account);
		return "redirect:/account/" + account.getId();
	}

	// account
	@RequestMapping(value = "/{id}", method = RequestMethod.GET)
	public String getView(@PathVariable Long id, Model model) {
		log.info("getView  method is running");
		Account account = this.accounts.get(id);
		if (account == null) {
			throw new ResourceNotFoundException(id);
		}
		model.addAttribute(account);
		return "account/view";
	}
}

 

在mvc中配置了一个首页:

<!-- Forwards requests to the "/" resource to the "welcome" view -->
	<mvc:view-controller path="/" view-name="welcome"/>

 

在使用3.0.5版本时,只能welcome。而在使用3.1.4版本能访问到:getCreateForm 和create,但是不能访问到getView方法。而且不能进入首页。

 

后来发现,在3.0.5版本中,使用的是AbstractUrlHandlerMapping,而在3.1的版本中使用的是AbstractHandlerMethodMapping、这是3.1版本中新加的类。

 

根据日志信息分析一下:

先来看3.0.5版本中的:AbstractUrlHandlerMapping:

Mapped URL path [/{id}] onto handler 'accountController'

Mapped URL path [/{id}.*] onto handler 'accountController'

Mapped URL path [/{id}/] onto handler 'accountController'

控制器中的三个方法都不能匹配上,只有首页“/”能匹配上。所以只能访问首页。

 

再来看3.1.4版本中的:AbstractHandlerMethodMapping

Mapped "{[],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}" 

Mapped "{[],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}"

Mapped "{[/{id}],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" 

可以看到,第一个方法和第二个方法只是get/和post的区别。而且匹配“/” 所以,直接通过Url访问时,匹配上了getCreateForm方法。跳转到account/createForm。在createFrom中提交的时候使用的是post,则匹配上第二个方法。而第三个则无法匹配(其实是前面两个把第三个覆盖了。)

 

解决办法:在控制器上加上:@RequestMapping(value = "/account")

 

首页可以直接访问。

account。

 

在3.1.5中:

1:Mapped "{[/account],methods=[POST],

2:Mapped "{[/account/{id}],methods=[GET]

3:Mapped "{[/account],methods=[GET],

首页,上面三种都不能匹配,所以会显示welcome。

访问/account。会匹配3.  提交表单会匹配1。查看表单内容可匹配3.

 

在3.0.5版本中:

[/account/{id}]

[/account/{id}.*]

[/account/{id}/]

[/account] 

[/account.*]

[/account/]

好吧,由于我对Spring源码不熟悉,不知道怎么会是这样。但是通过观察还是可以看出都是可以匹配上的。

留待以后深入源码级别的时候去了解了解,当然大神能告诉我也行。

 

可以看出来,3.0和3.1的mvc是有区别的,以前一直没有关注。当然以前都是直接声明映射方式的。

 

 

 

3
3
分享到:
评论

相关推荐

    spring-aop-3.0.xsd spring-beans-3.0 spring-context-3.0.xsd spring-mvc-3.1.xsd

    spring-aop-3.0.xsd 这个下载之后可以直接放在eclipese的xml的catalog中配置,已到达eclipse可以自动提示xml的功能

    Cramer:Cramer是基于多个优秀的开源项目,高度整合封装而成的开源Java EE快速开发平台。技术选型:Spring 4.0,Shiro 1.2,Spring MVC 4.0,Spring Task 4.0,MyBatis 3.1,Druid 1.0,Ehcache 2.6,Bootstrap 3.0

    技术选型:Spring 4.0,Shiro 1.2,Spring MVC 4.0,Spring Task 4.0,MyBatis 3.1,Druid 1.0,Ehcache 2.6,Bootstrap 3.0。为了进行快速开发,目前集成了部分平台功能:系统用户,包含用户登录,用户的增删改查...

    SpringMVC教程

    也包含新版Spring3.0,3.1 基于注解的MVC配置方法 总之绝对值得下载 学习 并以后查阅 目录 第一章 Web MVC简介.pdf 第二章 Spring MVC入门 .pdf 第三章 DispatcherServlet详解.pdf 第四章 Controller接口控制器详解...

    legendshop3.0.3部署文档.doc

    legendshop3.0.3部署文档 欢迎使用LegendShop,LegenShop是采用Java/Jsp开发的多用户多商家...所采用的技术: Spring MVC 3.1 + Spring 3.1 + Hibernate 3.6 JDK版本: 1.6 数据库:MYSQL 5.1 以上 Web服务器:Tomcat6

    看透springMvc源代码分析与实践

    8.2.2 创建Spring MVC的xml配置文件85 8.2.3 创建Controller和view86 8.3 关联spring源代码87 8.4 小结89 第9章 创建Spring MVC之器90 9.1 整体结构介绍90 9.2 HttpServletBean93 9.3 FrameworkServlet95 ...

    Spring_MVC_051:Spring MVC 学习总结(五)——校验与文件上传

    Spring MVC 学习总结(五)——校验与文件上传 目录 2.2.7、范围 2.2.8、其它注解 2.3、注解控制器参数 1.4、在UI中添加错误标签 1.5、测试运行 三、使用jQuery扩展插件Validate实现前端校验 3.1、jQuery扩展插件...

    spring3.1中文参考文档

    第2章 Spring 3.0的新特性和增强 ............................................................................................................ 22 2.1 Java 5 .................................................

    pangpang:我用这个项目来学习spring mvc

    该项目的设置允许您使用Spring MVC,JPA 2.0和Bean Validation 1.0创建兼容的Spring 3.1应用程序。 它包括一个持久性单元以及一些示例性持久性和事务代码,以向您介绍企业Java中的数据库访问。 该示例使用由应用...

    spring-mvc3-javaconfig:配置为不使用XML的Java Spring MVC 3应用程序。 还使用Servlet 3 API绕过web.xml

    Spring @MVC 3.1 Java配置这是一个使用Spring的Java配置而不是XML的简单示例。 我的解释了此示例。 这是一个伪造的登录应用程序。 在现实生活中,您可能会改用Spring Security。 有一个服务和数据访问层,但是存储库...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    Spring Boot实战 ,丁雪丰 (译者) .pdf

     到了Spring 3.0,我们有了一套基于Java的全新配置,它能够取代XML。在Spring 3.1里, 一系列以 @Enable 开头的注解进一步完善了这一特性。终于,我们第一次可以写出一个 没有任何XML配置的Spring应用程序了。这...

    Spring3.x企业应用开发实战(完整版) part1

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    Spring攻略(第二版 中文高清版).part1

    3.1 启用Spring的AspectJ注解支持 113 3.1.1 问题 113 3.1.2 解决方案 113 3.1.3 工作原理 113 3.2 用AspectJ注解声明aspect 115 3.2.1 问题 115 3.2.2 解决方案 115 3.2.3 工作原理 116 3.3 访问...

    Spring攻略(第二版 中文高清版).part2

    3.1 启用Spring的AspectJ注解支持 113 3.1.1 问题 113 3.1.2 解决方案 113 3.1.3 工作原理 113 3.2 用AspectJ注解声明aspect 115 3.2.1 问题 115 3.2.2 解决方案 115 3.2.3 工作原理 116 3.3 访问...

    Spring 3 Reference中文

    第2 章 Spring 3.0 的新特性和增强 21 2.1 Java 5.. 21 2.2 改进的文档. 21 2.3 新的文章和教程. 21 2.4 新的模块组织方式和构建系统.. 22 2.5 新特性概述. 22 2.5.1 为Java 5 更新...

    SpringBasic:Spring基础知识

    该项目设置为允许您使用 Spring MVC、JPA 2.0 和 Bean Validation 1.0 创建兼容的 Spring 3.1 应用程序。 它包括一个持久性单元和一些示例持久性和事务代码,向您介绍企业 Java 中的数据库访问。 该示例使用由应用...

    wechat:宠物美容师项目

    该项目设置为允许您使用 Spring MVC、JPA 2.0 和 Bean Validation 1.0 创建兼容的 Spring 3.1 应用程序。 它包括一个持久性单元和一些示例持久性和事务代码,向您介绍企业 Java 中的数据库访问。 该示例使用由应用...

    customerMgr:客户管理

    springmvc-bootstrap-mockito 一个带有Hibernate,... 从技术角度来讲,本项目中使用了以下内容: Spring MVC 3.2 Servlet 3.0 Maven 3.1 Hibernate3.6.3 跳船专家8.1.12 Mockito 1.9.5 JUnit 4.11 Bootstrap 3.0 MySQL

    SpringMVC-bootstrap:JAVA6

    springmvc-bootstrap-mockito 一个带有Hibernate,... 从技术角度来讲,本项目中使用了以下内容: Spring MVC 3.2 Servlet 3.0 Maven 3.1 Hibernate3.6.3 跳船专家8.1.12 Mockito 1.9.5 JUnit 4.11 Bootstrap 3.0 MySQL

Global site tag (gtag.js) - Google Analytics