.NET C#到Java沒那麼難,MVC篇

最典型的JAVA MVC就是JSP + servlet + javabean的模式。比較好的MVC,老牌的有Struts、Webwork。新興的MVC 框架有Spring MVC、Tapestry、JSF等。html

在這裏咱們對比一下Asp.net mvc和Spring mvc,至於爲何拿Spring mvc來比,緣由是它們的類似更高,便於對比學習前端

不瞭解的推薦看下面這篇文章,若是不清楚MVC的就先看下MVC的文章,這裏就不囉嗦了java

Struts和SpringMVC 對比web

 

 

前言spring

.NET C#到Java沒那麼難,都是面向對象的語言,並且語法仍是類似的,先對比一下開發環境,再到Servlet,再到MVC,都是同樣同樣的,只是JAVA的配製項比較多而已,只要配好一個,後面都是copy,簡直so easy,並且用myeclipse能夠省一些配製sql

Java與.NET的區別不在它們的自己,最大的區別在於他們背後的力量,相信你們都能感受獲得,我就很少說。spring-mvc

 

系列目錄mvc

1、.NET C#Java沒那麼難,開發環境篇app

2、.NET C#到Java沒那麼難,Servlet篇框架

3、.NET C#到Java沒那麼難,MVC篇

4、.NET C#Java沒那麼難,DB篇

5、.NET C#Java沒那麼難,Nosql篇

6、.NET C#Java沒那麼難,微服務篇

7、.NET C#Java沒那麼難,大數據篇

 

.NET C#到Java沒那麼難,MVC篇

 目錄

1.項目結構比較

2.路由比較

3.Controller比較

4.View比較

5.Action參數綁定和返回

6.Filter和Interceptor

7.SpringMVC配製

8.運行效果

9.擴展閱讀

 

 

 

1.項目結構比較 

左邊是用VS2015新建的MVC項目,右邊是經過MyEclipse2016新建的SpringMVC項目,結構基本一致

Java中的源碼都放在src目錄,jsp文件都在views目錄裏,也能夠放在WEB-INF目錄裏

    

 

2.路由比較

NET的MVC裏面,有一個專門註冊路由的地方,博客園都是MVC的高手,這裏就再也不囉嗦了。全部的路由規則都統一放在一塊兒管理,直接了當,一目瞭然。

Java Spring的Route規則是經過註解(NET的特性)的方式,寫在Controller中的,也能夠用配製文件來配製。(SpringMVC也能夠把全部的路由規則寫在配製文件裏統一管理,也比較清楚)

注意:RequestMapping就是Spring的路由,Spring在初始化的時候,會掃描指定位置下面全部的類,若是有@Controller的註解,就將其記錄爲Controller,而後會解析@RequestMapping,構建相似於RouteTable這樣的東西。

 

3.Controller比較

上邊是.NET的Controller的代碼,下邊是Java的Controller的代碼,基本一致

.NET用的是約定大於配製(也能夠用.NET的特性),而NET的話,約定了全部的Controller都放在指定的目錄下面(經「衝殺」同窗提醒只要繼承Controller就能夠了,放在哪一個目錄均可以,不過建議仍是按約定放在指定的位置),都繼承於Controller父類/接口。

@Controller就是Java Spring的Controller,Spring在初始化的時候,會掃描指定位置下面全部的類,若是有@Controller的註解,就將其記錄爲Controller

固然,編碼習慣好的Java開發者,也會把全部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寫法,但這僅僅是寫法上的區別,仍是一套的實現。而在Spring MVC中就不一樣了,view的實現卻有不少的選擇,咱們可使用jsp,可使用velocity,也可使用更爲強大的freemarker,即使是使用jsp作爲view的實現,也能夠有不少的寫法,好比使用jstl、el或直接寫jsp等等。

3).NET MVC與Spring MVC各有所長,好比在view的layout佈局上,.NET已經很好的集成了,但Spring MVC作這個還要import或include,若是想作到更好,還須要第三方的layout jar。可是Spring MVC由於它出生就是Spring,因此與生俱來就能夠對IOC、AOP的無縫整合,.NET須要用Autofac這種第三方框架實現IOC,AOP .Net MVC已經整合進去(就是各類Filter)

看看Spring MVC的返回視圖是否是也和.NET MVC同樣同樣的呢

Spring MVC Action支持以下的返回方式:String, ModelAndView, Model, ModelMap, Map,View, void,以下我用兩種方式實現了相同的功能,第二種ModelAndView和.NET MVC的View 是否是很像呢

5.Action參數綁定和返回JSON

參數綁定這塊,二者的處理都差很少,若是一個數據類型能夠和字符進行相互轉換,那麼系統就會自動幫你作綁定。若是不行的話,本身寫一個類型和字符的轉換類便可。

1).以下參數username能夠經過get,post傳遞過來,Action均可以正常接收,只要名字一致便可,名字不一致時能夠用註解實現

2).以下參數傳Model也是能夠的,只要名字一致就能夠自動綁定

返回JSON這塊二者的處理都差很少,都是自動把對象序列化後返回

1).以下使用ResponseBody註解,直接返回POJO對象便可自動序列化成JSON,這裏須要引入Jackson的包

Jackson包下載

 

6.Filter過濾器和Interceptor攔截器

1).Action過濾器HandlerInterceptor 和 .NET IActionFilter

那什麼是攔截,又爲何要攔截。對於Spring MVC來講,攔截器主要的工做對象就是用戶的請求,攔截下來以後,咱們能夠在攔截的各個階段進行自定義處理。常見的好比能夠作權限驗證,登陸系統後,系統獲取到你的請求而後分析下你的用戶權限,是Administrator仍是User仍是Guest。

 

2).全局錯誤過濾器 Spring ControllerAdvice(ExceptionHandler) 和 .NET IExceptionFilter

springmvc三種全局異常處理

 

7.SpringMVC配製

web.xml文件配製

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>SSM001</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <filter>  
    <filter-name>characterEncodingFilter</filter-name>  
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
    <init-param>  
      <param-name>encoding</param-name>  
      <param-value>UTF-8</param-value>  
    </init-param>  
    <init-param>  
      <param-name>forceEncoding</param-name>  
      <param-value>true</param-value>  
    </init-param>  
  </filter>  
  <filter-mapping>  
    <filter-name>characterEncodingFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
  </filter-mapping>  
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  
  <!--spring mvc前端控制器-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 配置Spring mvc下的配置文件的位置和名稱 -->
    <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:springmvc-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet> 
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>
View XML

springmvc.xml 文件配製

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">                 
    <!-- 啓用註解 -->  
    <!--<context:annotation-config></context:annotation-config>-->  
    <!-- scan the package and the sub package -->
    <!-- 配置自動掃描的包 -->
    <context:component-scan base-package="com.rabbit.controller"/> 
    <!-- don't handle the static resource -->
    <!-- 不解析靜態文件 -->
    <mvc:default-servlet-handler /> 
    <!-- if you use annotation you must configure following setting -->
    <!-- 註解驅動 -->
    <mvc:annotation-driven conversion-service="conversionService"/> 
    <!-- 建立convertion-Service ,並注入DateConvert -->
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="com.rabbit.convert.DateConvert" />
            </list>
        </property>
    </bean>
    <!-- configure the InternalResourceViewResolver -->
    <!-- 配置視圖解析器 如何把handler 方法返回值解析爲實際的物理視圖 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
            id="internalResourceViewResolver">
        <!-- 前綴 -->
        <property name="prefix" value="/views/" />
        <!-- 後綴 -->
        <property name="suffix" value=".jsp" />
    </bean>
</beans>
View XML

 

8.運行效果

上邊是Asp.net MVC,下邊是Java Spring MVC

        

9.擴展閱讀

SpringMVC 原理和入門

SpringMVC 入門和實例

SpringMVC最全實例

 

未完,待續,歡迎評論拍磚

相關文章
相關標籤/搜索