`
Inmethetiger
  • 浏览: 111257 次
  • 性别: 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

    通过版本号 3.1,我们可以看到这是针对 Spring 3.1 版本的 MVC 功能。 将这些 XML Schema 文件集成到开发环境中,比如 Eclipse,可以极大地提高开发者的生产力。它们不仅提供了语义上的验证,确保了配置的正确性,...

    Spring2.5、3.0、3.1轻松入门+中级+高级教程14合一

    在本教程合集中,我们将重点探讨Spring的2.5、3.0和3.1版本,这三个版本分别代表了Spring发展历程中的重要里程碑。 1. **Spring 2.5** 引入了对Java 5注解的全面支持,显著简化了配置,特别是通过`@Autowired`注解...

    DWR3.0_Spring3.1_Hibernate4.1_JPA全注解实例

    《DWR3.0_Spring3.1_Hibernate4.1_JPA全注解实例》是一个集成技术的实践教程,涵盖了Direct Web Remoting (DWR) 3.0、Spring框架3.1、Hibernate持久化框架4.1以及Java Persistence API (JPA)的全注解使用方法。...

    spring 3.0 jar spring最新开发包

    Spring 3.0是Spring框架的一个重要版本,它在2009年发布,为Java开发者带来了许多新特性和改进。这个"spring 3.0 jar spring最新开发包"包含了该版本的所有核心组件和库,使得开发者能够进行高效且灵活的Java应用...

    spring security3.0所需要的最精简的jar包

    在3.0版本中,Spring Security 已经相当成熟,提供了丰富的特性来保障应用的安全性。 在开始使用Spring Security时,了解并正确引入必要的jar包是至关重要的。以下是你提供的压缩包文件中的关键组件: 1. **spring...

    spring3.0轻量级框架

    Spring 3.0是Spring框架的一个重要版本,它在轻量级、模块化和灵活性方面进一步提升了Java企业级应用的开发效率。以下是对Spring 3.0关键特性和功能的详细解析: 一、核心容器(Core Container) Spring的核心组件...

    spring2.5 struts2.0 hibernate3.1

    此外,3.1版本还提供了更好的类型安全性和对EJB 3.0的兼容性,使得企业级开发更加便捷。 这个"spring2.5 struts2.0 hibernate3.1完美全部jar包.rar" 文件包含了这三个框架的完整库,便于开发者在项目中直接引用,...

    spring3.0_doc_api

    Spring 3.0是Spring框架的一个重要版本,它在2009年发布,带来了许多增强的功能和改进,旨在提供更高效、灵活和模块化的Java应用程序开发体验。这个压缩包"spring3.0_doc_api"包含的是Spring 3.0的官方API文档,通常...

    Spring in action 3.0

    Spring 3.0版本引入了许多新的功能和增强,包括对Java EE 6的支持、对RESTful Web服务的全面支持、增强的AOP(面向切面编程)功能、对JMS(Java消息服务)和JMX(Java管理扩展)的改进,以及对动态语言的支持等。...

    Spring MVC总结(一)

    在本文中,我们将对Spring MVC的架构和DispatcherServlet的配置进行总结。 Spring MVC架构 Spring MVC的架构可以分为以下几个部分: 1. DispatcherServlet:作为Spring MVC的核心组件,负责处理所有的HTTP请求。 ...

    Spring 3.0 API

    Spring 3.0 API是Spring框架的一个重要版本,其设计宗旨在于提供更为强大和高效的开发体验。在Spring 3.2.1 API的文档中,对Spring框架的特性进行了全面的说明和讲解,涵盖了依赖注入、面向切面编程、测试等多方面...

    spring3.0帮助文档

    Spring 3.0 版本在设计之初就考虑到了对Java 5的支持,并且引入了新的模块化组织结构以及构建系统,这些变化使得Spring 3.0成为了更为强大和灵活的应用开发平台。 #### 二、Spring 3.0 的主要特性 ##### 2.1 Java ...

    spring-framework-reference 3.0

    在Web层,Spring 3.0 提供了全面的REST支持,同时增强了MVC框架的功能,如模型验证等。 ##### 8. 对Java EE 6的早期支持 Spring 3.0 提前支持了Java EE 6的一些特性,这让开发者可以在Java EE 6正式发布之前就利用...

    Spring3.0新特性

    Spring 3.0 是 Spring 框架的一个重要版本,引入了许多新特性,极大地提升了开发效率和灵活性。以下是对这些新特性的详细说明: 一、模块化与构建系统的改进 在 Spring 3.0 中,模块的组织变得更加精细化,不再像...

    springmvc3.1+hibernate3环境搭建架包

    在本环境中,我们将会探讨如何利用Spring MVC 3.1和Hibernate 3搭建一个完整的开发环境。 Spring MVC是Spring框架的一部分,它提供了一种优雅的方式来组织和处理Web应用程序的请求。3.1版本引入了一些增强的功能,...

    Spring 3.0 新特性

    Spring 3.0与Java EE 6进行了更好的集成,支持CDI(Contexts and Dependency Injection)和EJB 3.1等新特性。 通过上述介绍,我们可以看出Spring 3.0的更新极大地提升了开发者的生产力,使Spring框架在企业级应用...

    Spring 3.0

    资源中提到的《Spring 3.0就这么简单》这本书,很可能是针对Spring 3.0这一版本深入浅出的教程,涵盖了Spring 3.0的主要特性和使用方法,适合初学者和有经验的开发者阅读,以更好地理解和利用Spring 3.0框架的能力。...

    spring3.0技术手册

    Spring 3.0是Spring框架的一个重要版本,引入了许多新特性和改进。下面将详细介绍与Spring 3.0相关的几个核心知识点。 ### 1. Spring 3.0的新特性 #### 1.1 支持HTTP方法注解 Spring 3.0在MVC模块中增加了对HTTP...

Global site tag (gtag.js) - Google Analytics