最典型的JAVA MVC就是JSP + servlet + javabean的模式。比較好的MVC,老牌的有Struts、Webwork。新興的MVC 框架有Spring MVC、Tapestry、JSF等。
在這里我們對比一下Asp.net mvc和Spring mvc,至于為什么拿Spring mvc來比,原因是它們的相似更高,便于對比學(xué)習(xí)
不了解的推薦看下面這篇文章,如果不清楚MVC的就先看下MVC的文章,這里就不啰嗦了
前言
.NET C#到Java沒那么難,都是面向?qū)ο蟮恼Z言,而且語法還是相似的,先對比一下開發(fā)環(huán)境,再到Servlet,再到MVC,都是一樣一樣的,只是JAVA的配制項比較多而已,只要配好一個,后面都是copy,簡直so easy,而且用myeclipse可以省一些配制
Java與.NET的區(qū)別不在它們的本身,最大的區(qū)別在于他們背后的力量,相信大家都能感覺得到,我就不多說。
系列目錄
一、.NET C#到Java沒那么難,開發(fā)環(huán)境篇
四、.NET C#到Java沒那么難,DB篇
五、.NET C#到Java沒那么難,Nosql篇
六、.NET C#到Java沒那么難,微服務(wù)篇
七、.NET C#到Java沒那么難,大數(shù)據(jù)篇
.NET C#到Java沒那么難,MVC篇
目錄
1.項目結(jié)構(gòu)比較
2.路由比較
3.Controller比較
4.View比較
5.Action參數(shù)綁定和返回
6.Filter和Interceptor
7.SpringMVC配制
8.運行效果
9.擴展閱讀
1.項目結(jié)構(gòu)比較
左邊是用VS2015新建的MVC項目,右邊是通過MyEclipse2016新建的SpringMVC項目,結(jié)構(gòu)基本一致
Java中的源碼都放在src目錄,jsp文件都在views目錄里,也可以放在WEB-INF目錄里
2.路由比較
NET的MVC里面,有一個專門注冊路由的地方,博客園都是MVC的高手,這里就不再啰嗦了。所有的路由規(guī)則都統(tǒng)一放在一起管理,直接了當(dāng),一目了然。
Java Spring的Route規(guī)則是通過注解(NET的特性)的方式,寫在Controller中的,也可以用配制文件來配制。(SpringMVC也可以把所有的路由規(guī)則寫在配制文件里統(tǒng)一管理,也比較清楚)
注意:RequestMapping就是Spring的路由,Spring在初始化的時候,會掃描指定位置下面所有的類,如果有@Controller的注解,就將其記錄為Controller,然后會解析@RequestMapping,構(gòu)建類似于RouteTable這樣的東西。
3.Controller比較
上邊是.NET的Controller的代碼,下邊是Java的Controller的代碼,基本一致
.NET用的是約定大于配制(也可以用.NET的特性),而NET的話,約定了所有的Controller都放在指定的目錄下面(經(jīng)“沖殺”同學(xué)提醒只要繼承Controller就可以了,放在哪個目錄都可以,不過建議還是按約定放在指定的位置),都繼承于Controller父類/接口。
@Controller就是Java Spring的Controller,Spring在初始化的時候,會掃描指定位置下面所有的類,如果有@Controller的注解,就將其記錄為Controller
當(dāng)然,編碼習(xí)慣好的Java開發(fā)者,也會把所有Controller放在同一個目錄/Package的,例如我把Controller都放在com.rabbit.controller包。
4.View比較
1).NET MVC的View用的是cshtml文件,用的Razor引擎表達式 ,還有aspx視圖引擎;Java的View用的是jsp文件,用的是 JSTL標簽,EL表達式
2).NET MVC的view一般就兩種,一種是使用原生的aspx寫法,一種是razor寫法,但這僅僅是寫法上的區(qū)別,還是一套的實現(xiàn)。而在Spring MVC中就不同了,view的實現(xiàn)卻有很多的選擇,我們可以使用jsp,可以使用velocity,也可以使用更為強大的freemarker,即便是使用jsp做為view的實現(xiàn),也可以有很多的寫法,比如使用jstl、el或直接寫jsp等等。
3).NET MVC與Spring MVC各有所長,比如在view的layout布局上,.NET已經(jīng)很好的集成了,但Spring MVC做這個還要import或include,如果想做到更好,還需要第三方的layout jar。但是Spring MVC因為它出生就是Spring,所以與生俱來就可以對IOC、AOP的無縫整合,.NET需要用Autofac這種第三方框架實現(xiàn)IOC,AOP .Net MVC已經(jīng)整合進去(就是各種Filter)
看看Spring MVC的返回視圖是不是也和.NET MVC一樣一樣的呢
Spring MVC Action支持如下的返回方式:String, ModelAndView, Model, ModelMap, Map,View, void,如下我用兩種方式實現(xiàn)了相同的功能,第二種ModelAndView和.NET MVC的View 是不是很像呢
5.Action參數(shù)綁定和返回JSON
參數(shù)綁定這塊,兩者的處理都差不多,如果一個數(shù)據(jù)類型可以和字符進行相互轉(zhuǎn)換,那么系統(tǒng)就會自動幫你做綁定。如果不行的話,自己寫一個類型和字符的轉(zhuǎn)換類即可。
1).如下參數(shù)username可以通過get,post傳遞過來,Action都可以正常接收,只要名字一致即可,名字不一致時可以用注解實現(xiàn)
2).如下參數(shù)傳Model也是可以的,只要名字一致就可以自動綁定
返回JSON這塊兩者的處理都差不多,都是自動把對象序列化后返回
1).如下使用ResponseBody注解,直接返回POJO對象即可自動序列化成JSON,這里需要引入Jackson的包
6.Filter過濾器和Interceptor攔截器
1).Action過濾器HandlerInterceptor 和 .NET IActionFilter
那什么是攔截,又為什么要攔截。對于Spring MVC來說,攔截器主要的工作對象就是用戶的請求,攔截下來之后,我們可以在攔截的各個階段進行自定義處理。常見的比如可以做權(quán)限驗證,登錄系統(tǒng)后,系統(tǒng)獲取到你的請求然后分析下你的用戶權(quán)限,是Administrator還是User還是Guest。
2).全局錯誤過濾器 Spring ControllerAdvice(ExceptionHandler) 和 .NET IExceptionFilter
7.SpringMVC配制
web.xml文件配制
View XML
springmvc.xml 文件配制
View XML
8.運行效果
上邊是Asp.net MVC,下邊是Java Spring MVC
9.擴展閱讀
未完,待續(xù),歡迎評論拍磚
作 者: 易 磊(Rabbit_Yi)
出 處: http://www.cnblogs.com/rabbityi/
版權(quán)聲明:本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回復(fù)。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點擊文章下部【推薦】或【關(guān)注我】。您的鼓勵是作者堅持原創(chuàng)和持續(xù)寫作的最大動力!
http://www.cnblogs.com/rabbityi/p/7089244.html