.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最全实例

 

未完,待续,欢迎评论拍砖

相关文章
相关标签/搜索