先上代码:
主要是控制器:
@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.1,我们可以看到这是针对 Spring 3.1 版本的 MVC 功能。 将这些 XML Schema 文件集成到开发环境中,比如 Eclipse,可以极大地提高开发者的生产力。它们不仅提供了语义上的验证,确保了配置的正确性,...
在本教程合集中,我们将重点探讨Spring的2.5、3.0和3.1版本,这三个版本分别代表了Spring发展历程中的重要里程碑。 1. **Spring 2.5** 引入了对Java 5注解的全面支持,显著简化了配置,特别是通过`@Autowired`注解...
《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是Spring框架的一个重要版本,它在2009年发布,为Java开发者带来了许多新特性和改进。这个"spring 3.0 jar spring最新开发包"包含了该版本的所有核心组件和库,使得开发者能够进行高效且灵活的Java应用...
在3.0版本中,Spring Security 已经相当成熟,提供了丰富的特性来保障应用的安全性。 在开始使用Spring Security时,了解并正确引入必要的jar包是至关重要的。以下是你提供的压缩包文件中的关键组件: 1. **spring...
Spring 3.0是Spring框架的一个重要版本,它在轻量级、模块化和灵活性方面进一步提升了Java企业级应用的开发效率。以下是对Spring 3.0关键特性和功能的详细解析: 一、核心容器(Core Container) Spring的核心组件...
此外,3.1版本还提供了更好的类型安全性和对EJB 3.0的兼容性,使得企业级开发更加便捷。 这个"spring2.5 struts2.0 hibernate3.1完美全部jar包.rar" 文件包含了这三个框架的完整库,便于开发者在项目中直接引用,...
Spring 3.0是Spring框架的一个重要版本,它在2009年发布,带来了许多增强的功能和改进,旨在提供更高效、灵活和模块化的Java应用程序开发体验。这个压缩包"spring3.0_doc_api"包含的是Spring 3.0的官方API文档,通常...
Spring 3.0版本引入了许多新的功能和增强,包括对Java EE 6的支持、对RESTful Web服务的全面支持、增强的AOP(面向切面编程)功能、对JMS(Java消息服务)和JMX(Java管理扩展)的改进,以及对动态语言的支持等。...
在本文中,我们将对Spring MVC的架构和DispatcherServlet的配置进行总结。 Spring MVC架构 Spring MVC的架构可以分为以下几个部分: 1. DispatcherServlet:作为Spring MVC的核心组件,负责处理所有的HTTP请求。 ...
Spring 3.0 API是Spring框架的一个重要版本,其设计宗旨在于提供更为强大和高效的开发体验。在Spring 3.2.1 API的文档中,对Spring框架的特性进行了全面的说明和讲解,涵盖了依赖注入、面向切面编程、测试等多方面...
Spring 3.0 版本在设计之初就考虑到了对Java 5的支持,并且引入了新的模块化组织结构以及构建系统,这些变化使得Spring 3.0成为了更为强大和灵活的应用开发平台。 #### 二、Spring 3.0 的主要特性 ##### 2.1 Java ...
在Web层,Spring 3.0 提供了全面的REST支持,同时增强了MVC框架的功能,如模型验证等。 ##### 8. 对Java EE 6的早期支持 Spring 3.0 提前支持了Java EE 6的一些特性,这让开发者可以在Java EE 6正式发布之前就利用...
Spring 3.0 是 Spring 框架的一个重要版本,引入了许多新特性,极大地提升了开发效率和灵活性。以下是对这些新特性的详细说明: 一、模块化与构建系统的改进 在 Spring 3.0 中,模块的组织变得更加精细化,不再像...
在本环境中,我们将会探讨如何利用Spring MVC 3.1和Hibernate 3搭建一个完整的开发环境。 Spring MVC是Spring框架的一部分,它提供了一种优雅的方式来组织和处理Web应用程序的请求。3.1版本引入了一些增强的功能,...
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是Spring框架的一个重要版本,引入了许多新特性和改进。下面将详细介绍与Spring 3.0相关的几个核心知识点。 ### 1. Spring 3.0的新特性 #### 1.1 支持HTTP方法注解 Spring 3.0在MVC模块中增加了对HTTP...