|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
恰恰证明了java的简单,要不怎么没有通过c/c++来搞个这种框架?
Java开辟者对MVC框架必定不生疏,从Struts到WebWork,JavaMVC框架层见叠出。我们已习气了处置*.do或*.action作风的URL,为每个URL编写一个把持器,并承继一个Action大概Controller接口。但是,盛行的Web趋向是利用加倍复杂,对用户和搜刮引擎加倍友爱的REST作风的URL。比方,来自豆瓣的一本书的链接是http://www.douban.com/subject/2129650/,而非http://www.douban.com/subject.do?id=2129650。
有履历的JavaWeb开辟职员会利用URL重写的体例来完成相似的URL,比方,为前端Apache服务器设置mod_rewrite模块,并顺次为每一个必要完成URL重写的地点编写卖力转换的正则表达式,大概,经由过程一个自界说的RewriteFilter,利用JavaWeb服务器供应的Filter和哀求转发(Forward)功效完成URL重写,不外,仍需要为每一个地点编写正则表达式。
既然URL重写云云烦琐,为什么不间接计划一个原生撑持REST作风的MVC框架呢?
要计划并完成如许一个MVC框架其实不坚苦,上面,我们从零开始,细心研讨怎样完成REST作风的URL映照,并与罕见的IoC容器如Spring框架集成。这个全新的MVC框架暂定名为WebWind。
术语
MVC:Model-View-Controller,是一种罕见的UI架构形式,经由过程分别Model(模子)、View(视图)和Controller(把持器),能够更简单完成易于扩大的UI。在Web使用程序中,Model指背景前往的数据;View指必要衬着的页面,一般是JSP大概其他模板页面,衬着后的了局一般是HTML;Controller指Web开辟职员编写的处置分歧URL的把持器(在Struts中被称之为Action),而MVC框架自己另有一个前置把持器,用于吸收一切的URL哀求,并依据URL地点分发到Web开辟职员编写的Controller中。
IoC:Invertion-of-Control,把持反转,是今朝盛行的办理一切组件性命周期和庞大依附干系的容器,比方Spring容器。
Template:模板,经由过程衬着,模板中的变量将被Model的实践数据所交换,然后,天生的内容便是用户在扫瞄器中看到的HTML。模板也能完成判别、轮回等复杂逻辑。实质上,JSP页面也是一种模板。别的,另有很多第三方模板引擎,如Velocity,FreeMarker等。
计划方针
和传统的Struts等MVC框架完整分歧,为了撑持REST作风的URL,我们其实不把一个URL映照到一个Controller类(大概Struts的Action),而是间接把一个URL映照到一个办法,如许,Web开辟职员就能够将多个功效相似的办法放到一个Controller中,而且,Controller没有强迫请求必需完成某个接口。一个Controller一般具有多个办法,每一个办法卖力处置一个URL。例如,一个办理Blog的Controller界说起来就像清单1所示。
清单1.办理Blog的Controller界说
public class Blog {
@Mapping("/create/$1")
Public void create(int userId) { ... }
@Mapping("/display/$1/$2")
Public void display(int userId, int postId) { ... }
@Mapping("/edit/$1/$2")
Public void edit(int userId, int postId) { ... }
@Mapping("/delete/$1/$2")
Public String delete(int userId, int postId) { ... }
}
@Mapping()注解唆使了这是一个处置URL映照的办法,URL中的参数$1、$2……则将作为办法参数传进。关于一个“/blog/1234/5678”的URL,对应的办法将主动取得参数userId=1234和postId=5678。同时,也无需任何与URL映照相干的XML设置文件。
利用$1、$2……来界说URL中的可变参数要比正则表达式更复杂,我们需要在MVC框架外部将其转化为正则表达式,以便婚配URL。
别的,关于办法前往值,也未作强迫请求。
<p>
认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点, |
|