- 浏览: 543691 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jsdsh:
自己写的就是不一样.
Spring3 MVC 注解(二)---@RequestMapping -
jsdsh:
吼,非常吼.学习了
Spring3 MVC 注解(一)---注解基本配置及@controller和 @RequestMapping 常用解释 -
爱情是一种错觉:
我爱你 i love 你[color=red][/color] ...
Spring3 MVC 注解(一)---注解基本配置及@controller和 @RequestMapping 常用解释 -
fs08ab:
大哥,目前这个问题有什么可靠的解决方案吗
@ResponseBody注解 -
lhs295988029:
说的很清楚,明白了~
Spring3 MVC 注解(一)---注解基本配置及@controller和 @RequestMapping 常用解释
鼎鼎大名的Spring框架3.0版在12月5日由其作者之一——Juergen Hoeller先生在博客里宣告问世,并命为里程碑版,给Spring粉丝们带来了震撼的快感。笔者即开“快车”拉了两个包回来,遗憾的是参考文档至今还没有出来(仅有API文档),这为学习Spring 3.0带来了非常大的困难,但没有阻挡笔者对新产品的兴趣。
Spring之父Rod Johnson先生早在2003年就预言EJB将死(观点颇具争议),攻击EJB之臃肿是在虐待程序员。然而EJB 3.0出来后几乎宣判Spring死刑,但自2.0版以后Spring火爆程度已经超过EJB,两者的争斗至今仍不停息,这也是Spring 3.0连文档还没有整理出来就匆匆推出的原因。当然,Spring与EJB有很多各自独特优势之处,例如EJB的分布式运算、标准规范,Spring的IoC、AOP切面编程、偶合集成、MVC等等,取各自之长在企业中应用如虎添翼。Spring目前已经加入了J2EE规范,J2EE世界将更加精彩......
或许是用腻了Struts1那死板的WEB框架,才对Spring MVC爱不释手,尤其是2.5版本以后,支持全注解配置方式,已经使很久没有再写过xml文件了。
3.0版是完全兼容2.5,因此了解2.5版的@MVC则更容易接受。正如Arjen Poutsma小伙子在他的博客里说的那样,3.0时代将集中致力于表述性状态转移(REST,希望我没有翻译错,金山词霸翻译为“休息”)的网络服务和更容易的网络编程。的确增加了更多的控制器类型,并增强了SOAP/WSDL/WS这些基于分布式体系结构。
先回忆下2.5注解方式的@MVC,来一个示例:
@Controller
public class ArticleController{
@RequestMapping("/articleView")
public String getArticle(@RequestParam("id") String id, HttpServletRequest request){
request.setAttribute("article", service.find(Article.class, id));
return "articleView";
}
}
ArticleController没有实现任何接口,是一个最普通不过的pojo,如果浏览器来了articleView.do?id=xxx这个请求,Spring会找到getArticle()这个方法,该方法第一个参数绑定到了URL上的请求参数,第二个是J2EE标准的request对象(可见Spring MVC是非侵入式的,不像变态的Struts2),事实上还可以给定HttpServletResponse,ModelMap,甚至自己的类型,Spring都会为你将值传入进来。通过一个逻辑层service组件根据id参数值去底层查找Article对象,并放入request作用域中,最后返回的是面页视图名,这个例子中是返回到articleView.jsp中。
上例再变通下:
@Controller @RequestMapping("/articleView_*") String id = StringUtil.getParam(request.getRequestURI(),"articleView_*"); } 对于articleView_aaa.do,articleView_bbbb.do,articleView_c5h8j2.do,articleView_xxx.do,这样的请求都会由getArticle()这个方法来应付,是不是很有意思? Spring 3.0增加了一个@ PathVariable注解来支持可变的请求路径,将上面的代码在3.0版中再变通下: @Controller @RequestMapping("/articleView/${id}") //可以接受articleView/aaa.do,articleView/xxx.do... } 再变得复杂些: @Controller @RequestMapping("/articleList/${pageSize}/channel/*/category/${id}") public String getArticles((@PathVariable Integer pageSize, @PathVariable int id, HttpServletRequest request){ } 它已经灵活到URL地址完全可以自己随意编制。 根据内容协商制的视图解析机制: 2.5版是由@MVC控制器来决定视图解析器,3.0版将变得更加灵活,似乎可以通过扩展名来转到不同的解析器中,例如请求一个.pdf文件将是如何效果呢?3.0版都会带来不可思议的模式。 HTTP方法的转换: 先看前台页面一段Html代码 <form:form method="delete"> HTTP规范中form表单只有两种方法——POST和GET,而3.0做了一个过滤器,可以转换这些方法至四种——GET, PUT, POST, 和 DELETE。控制器接受请求: @Controller("/deleteArticle") @RequestMapping(method = RequestMethod.DELETE) } ? @Autowired
public class ArticleController{
public String getArticle(HttpServletRequest request){
request.setAttribute("article", service.find(Article.class, id));
return "articleView";
}
public class ArticleController{
public String getArticle(@PathVariable String id, HttpServletRequest request){
request.setAttribute("article", service.find(Article.class, id));
return "articleView";
}
public class ArticleController{
Integer channelId = StringUtil.getParam(request.getRequestURI(),"channel/*/");
request.setAttribute("articles", service.findScroll(Article.class, pageSize,50,"channel=? and category=?",new Object[]{channelId,id}));
return "articleList";
}
<p class="submit"><input type="submit" value="Delete Pet"/></p>
</form:form>
public class ArticleController{
public String deleteArticle(@PathVariable String id, HttpServletRequest request){
service.delete(Article.class, id);
return "message";
}
3.0版仅在MVC子集中就增加了很多新特性,如果在IoC、AOP等等其它子集所有的变革,绝对可以称得上Srping创始人所述的里程碑版本。3.0版使用的注解列表如下:
? @Component
? @Controller
? @InitBinder
? @ManagedAttribute
? @ManagedOperation
? @ManagedOperationParameters
? @ManagedOperationParameter
? @ManagedResource
? @PathVariable
? @PostConstruct
? @PreDestroy
? @Repository
? @RequestMapping
? @Required
? @Resource
? @Service
? @Transactional
目前Spring 3版本已经到了M2,应该是M3完成后将推出最终正式版本,我想很快会来临,按照Spring的创始人罗德.约翰逊的预言,未来J2EE应用中Spring+Tomcat将占主导地位,是否引起争议,笔者不敢点评,不过Oracle收购Sun后,Java社区将是如何,还无从知晓,似乎罗德.约翰逊对这宗收购案也有些紧张,因为Oracle不像Sun的第一个谈判者IBM那样有过开放技术的先例(可以回忆下IBM早期的主板总线开放掀起的兼容机潮至今波涛不熄)。目前国内对新东西消化尚慢,我到图书城看了下,Spring 2.5的资料都很难找到。且很多企业都是抱着Struts1.x在做开发,尽管笔者这样说会引来很多争议,但Struts1时代的灭亡只是时间问题。Struts2虽然改进了很多,依笔者看,与Spring MVC相比仍有诸多的不足,尤其看不惯那种变态的侵入模式,看看它把HttpServletRequest、HttpSession、HttpServletResponse等servlet标准组件干成什么样?开源时代,至少我不愿意接受那种变态的潜规则。
笔者早先常用Struts1.x框架,它搭配了一套自己的ActionForm,使得编程工作量增加,虽然可以变通使用自己的Pojo,但对于没有掌握J2EE底层工具类(BeanUtil)的开发人员来说,其类型匹配是非常复杂的事。事实上Spring MVC早在1.x版本就完全使用自己的pojo来对应表单的填充,配上属性编辑器,可以解决类型转换问题,完全实现领域模型驱动的设计模式。由于MVC层的控制器也是Spring容器的Bean而已,因此对整个项目的控制、扩展变得非常容易。同时上文也顺便点评了Struts2,可见Spring MVC在各类MVC框架的优势所在。本身罗德.约翰逊先生是设计模式高手,一个优秀的框架给我们带来的远远不只是开发效率,还有更先进的开发模式和理念...
发表评论
-
Spring @Transactional
2011-08-01 11:53 1808Spring事务的传播行为 在service类前加上@ ... -
spring mvc java.lang.IllegalStateException: Errors/BindingResult argument declar
2011-01-21 10:21 5053关于BindingResult Spring ... -
kaptcha 验证码在spring mvc 中的使用
2010-11-11 14:46 15404kaptcha 是一个非常实用的验证码生成工具。有了它,你可 ... -
@ResponseBody注解
2010-11-04 17:44 29820在SpringMVC中可以在Contr ... -
spring 标签介绍
2010-10-27 14:42 3035Spring 标记库分类如下: 1、spring:has ... -
spring roo
2010-10-22 14:50 3154Spring Roo 是一种 Spring 开发的辅助工具,当 ... -
spring mvc 实现的验证码功能
2010-10-19 15:56 8810import java.awt.BasicStroke; i ... -
spring3 Validation, Data Binding, and Type Conversion
2010-10-18 17:52 38075. Validation, Data Binding, ... -
spring 基于注解的控制器配置
2010-10-18 16:10 385913.12. 基 于注解的控制器配置 现时对于一些类型的配 ... -
打散 <mvc:annotation-driven>
2010-10-18 13:10 4762Spring3.0的基于注解的MVC非常好用,特别在加入了新的 ... -
spring mvc使用注解后的校验和绑定处理
2010-10-12 15:18 1389spring mvc使用注解后,依然可以使用自带的Valida ... -
使用 Spring 2.5 基于注解驱动的 Spring MVC
2010-10-12 10:45 1561概述 继 Spring 2.0 对 Spring MV ... -
Spring MVC的表单控制器
2010-10-11 15:36 3927概述 大多数Web应 ... -
context:component-scan
2010-10-08 13:33 44631. 扫描过滤方式 过滤器类型 说明 注释 假如 com.ba ... -
Spring MVC
2010-09-21 16:12 4404Spring提供了一个细致完整的MVC框架。该框架为模型、视图 ... -
Spring入门之三: 进入Spring MVC
2010-09-13 11:04 2435Spring入门之三: 进入Sprin ... -
Spring3 MVC Restful 多请求类型(json,xml,k-v),多视图配置(Json,Xml,JSP,Freemarker,Volacity等)
2010-09-13 10:59 5851beans xmlns="http://www.sp ... -
Spring3 MVC (三)---请求处理方法 参数及返回值总结
2010-09-13 10:50 8559@RequestMapping("/xx ... -
Spring3 MVC 注解(二)---@RequestMapping
2010-09-13 10:47 155661 问题:有多个 @RequestMapping @ ... -
Spring3 MVC 注解(一)---注解基本配置及@controller和 @RequestMapping 常用解释
2010-09-13 10:46 93108一:配置web.xml 1)问题:spri ...
相关推荐
本书从源代码分析入手,对Spring的架构原理和设计思想进行了全面剖析,不仅能让我们更深入、更彻底地认识Spring,领略Spring的架构之美和设计之美,而且更重要的是,它将全面提升我们的Spring开发技能。., ——...
chap01 领略清晰的MVC流程----Struts讲解技术资料 chap02 体验控制反转的理念----Spring介绍技术文档 chap03 感悟Hibernate操作数据的方便技术资料 chap04 SSH互整合技术资料
Spring Boot是用来简化Spring应用初始搭建以及开发过程的全新框架,被认为是Spring MVC的“接班人”,和微服务紧密...通过本门课程的学习,你将学会如何使用Spring Boot快速构建应用程序,初步领略Spring Boot的魅力!
本教程共有4章,以非常...chap01 领略清晰的MVC流程----Struts讲解技术资料.pdf chap02 体验控制反转的理念----Spring介绍技术文档.pdf chap03 感悟Hibernate操作数据的方便技术资料.pdf chap04 SSH互整合技术资料.pdf
chap01 领略清晰的MVC流程----Struts讲解技术资料.pdf chap02 体验控制反转的理念----Spring介绍技术文档.pdf chap03 感悟Hibernate操作数据的方便技术资料.pdf chap04 SSH互整合技术资料.pdf
资源名称:SSH框架相关技术资料专题资源目录:【】19061a0ebe09aa9a85cc5725afbd6286【】chap01领略清晰的MVC流程----Struts讲解技术资料【】chap02体验控制反转的理念----Spring介绍技术文档【】chap03感悟...
本教程共有4章,以非常通俗易懂的方式,向我们介绍...chap01 领略清晰的MVC流程----Struts讲解技术资料.pdf chap02 体验控制反转的理念----Spring介绍技术文档.pdf chap03 感悟Hibernate操作数据的方便技术资料.pdf
chap01 领略清晰的MVC流程----Struts讲解技术资料.pdf chap02 体验控制反转的理念----Spring介绍技术文档.pdf chap03 感悟Hibernate操作数据的方便技术资料.pdf chap04 SSH互整合技术资料.pdf Struts2权威指南完整版...
chap01 领略清晰的MVC流程----Struts讲解技术资料 chap02 体验控制反转的理念----Spring介绍技术文档 chap03 感悟Hibernate操作数据的方便技术资料 chap04 SSH互整合技术资料
资料包含:领略清晰的MVC流程- --- Struts讲解技术资料、体验控制反转的理----pring介绍技术文档、感悟Hibernate操作数据的方便技术资料、SSH互整合技术资料。 另外还附有SSH框架的搭建步骤-教程文档大全,内容详细...
第一个文档 Struts技术讲解资料--------领略清晰的MVC流程 第二个文档 Spring技术讲解文档--------体验控制反转的理念 第三个文档 Hibernate技术讲解文档 ----感悟Hibernate操作数据的方便技术资料 第四个文档 SSH互...