.NET C#到Java没那么难,MVC篇

Alonso095 等级 323 0 0

.NET C#到Java没那么难,MVC篇

.NET C#到Java没那么难,MVC篇

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

在这里我们对比一下Asp.net mvc和Spring mvc,至于为什么拿Spring mvc来比,原因是它们的相似更高,便于对比学习

不了解的推荐看下面这篇文章,如果不清楚MVC的就先看下MVC的文章,这里就不啰嗦了

Struts和SpringMVC 对比

前言

.NET C#到Java没那么难,都是面向对象的语言,而且语法还是相似的,先对比一下开发环境,再到Servlet,再到MVC,都是一样一样的,只是JAVA的配制项比较多而已,只要配好一个,后面都是copy,简直so easy,而且用myeclipse可以省一些配制

Java与.NET的区别不在它们的本身,最大的区别在于他们背后的力量,相信大家都能感觉得到,我就不多说。

系列目录

一、.NET C#**到Java没那么难,开发环境篇**

二、.NET C#到Java没那么难,Servlet篇

三、.NET C#到Java没那么难,MVC篇

四、.NET C#**到Java没那么难,DB篇**

五、.NET C#**到Java没那么难,Nosql篇**

六、.NET C#**到Java没那么难,微服务篇**

七、.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目录里

.NET C#到Java没那么难,MVC篇    .NET C#到Java没那么难,MVC篇

2.路由比较

NET的MVC里面,有一个专门注册路由的地方,博客园都是MVC的高手,这里就不再啰嗦了。所有的路由规则都统一放在一起管理,直接了当,一目了然。

.NET C#到Java没那么难,MVC篇

Java Spring的Route规则是通过注解(NET的特性)的方式,写在Controller中的,也可以用配制文件来配制。(SpringMVC也可以把所有的路由规则写在配制文件里统一管理,也比较清楚)

注意:RequestMapping就是Spring的路由,Spring在初始化的时候,会扫描指定位置下面所有的类,如果有@Controller的注解,就将其记录为Controller,然后会解析@RequestMapping,构建类似于RouteTable这样的东西。

.NET C#到Java没那么难,MVC篇

3.Controller比较

上边是.NET的Controller的代码,下边是Java的Controller的代码,基本一致

.NET用的是约定大于配制(也可以用.NET的特性),而NET的话,约定了所有的Controller都放在指定的目录下面(经“冲杀”同学提醒只要继承Controller就可以了,放在哪个目录都可以,不过建议还是按约定放在指定的位置),都继承于Controller父类/接口。

.NET C#到Java没那么难,MVC篇

@Controller就是Java Spring的Controller,Spring在初始化的时候,会扫描指定位置下面所有的类,如果有@Controller的注解,就将其记录为Controller

当然,编码习惯好的Java开发者,也会把所有Controller放在同一个目录/Package的,例如我把Controller都放在com.rabbit.controller包。

.NET C#到Java没那么难,MVC篇

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 是不是很像呢

.NET C#到Java没那么难,MVC篇

5.Action参数绑定和返回JSON

参数绑定这块,两者的处理都差不多,如果一个数据类型可以和字符进行相互转换,那么系统就会自动帮你做绑定。如果不行的话,自己写一个类型和字符的转换类即可。

1).如下参数username可以通过get,post传递过来,Action都可以正常接收,只要名字一致即可,名字不一致时可以用注解实现

2).如下参数传Model也是可以的,只要名字一致就可以自动绑定

.NET C#到Java没那么难,MVC篇

返回JSON这块两者的处理都差不多,都是自动把对象序列化后返回

1).如下使用ResponseBody注解,直接返回POJO对象即可自动序列化成JSON,这里需要引入Jackson的包

.NET C#到Java没那么难,MVC篇

Jackson包下载

6.Filter过滤器和Interceptor拦截器

1).Action过滤器HandlerInterceptor 和 .NET IActionFilter

那什么是拦截,又为什么要拦截。对于Spring MVC来说,拦截器主要的工作对象就是用户的请求,拦截下来之后,我们可以在拦截的各个阶段进行自定义处理。常见的比如可以做权限验证,登录系统后,系统获取到你的请求然后分析下你的用户权限,是Administrator还是User还是Guest。

.NET C#到Java没那么难,MVC篇

.NET C#到Java没那么难,MVC篇

2).全局错误过滤器 Spring ControllerAdvice(ExceptionHandler) 和 .NET IExceptionFilter

springmvc三种全局异常处理

7.SpringMVC配制

web.xml文件配制

.NET C#到Java没那么难,MVC篇.NET C#到Java没那么难,MVC篇

<?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 文件配制

.NET C#到Java没那么难,MVC篇.NET C#到Java没那么难,MVC篇

<?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

.NET C#到Java没那么难,MVC篇        .NET C#到Java没那么难,MVC篇

9.扩展阅读

SpringMVC 原理和入门

SpringMVC 入门和实例

SpringMVC最全实例

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

收藏
评论区

相关推荐

.NET C#到Java没那么难,DB篇
.NET C到Java没那么难,DB篇 .NET C到Java没那么难,DB篇 前言 .NET C到Java没那么难,都是面向对象的语言,而且语法还是相似的,先对比一下开发环境,再到Servlet,再到
.NET C#到Java没那么难,MVC篇
.NET C到Java没那么难,MVC篇 .NET C到Java没那么难,MVC篇 最典型的JAVA MVC就是JSP servlet javabean的模式。比较好的MVC,老牌的有Struts、
.NET C#到Java没那么难,Servlet篇
.NET C到Java没那么难,Servlet篇 .NET C到Java没那么难,Servlet篇 前言 .NET C到Java没那么难,都是面向对象的语言,而且语法还是相似的,先对比一下开发
一文搞懂Spring依赖注入
前言 提起Spring,大家肯定不陌生,它是每一个Java开发者绕不过去的坎。Spring 框架为基于 java 的企业应用程序提供了一整套解决方案
Spring Cloud 微服务开发指南
如同 Spring Boot 在 Java Web 开发领域中的统治地位,Spring Cloud 在 Java 微服务应用开发领域中同样处于垄断地位。软件系统从单体升级到微服务架构,随之会出现各种分布式系统所特有的问题,包括服务注册发现、认证授权、限流熔断、调用追踪等。Spring Cloud 提供了各种组件来解决这些问题,本文将通过升级改造一个单体 AP
Spring Boot API 服务测试指南
Spring Boot 除了简化了 Spring 应用的开发,同时也简化了 Spring 应用的测试。它内置支持各种常用测试工具,包括 Spring Test、JUnit、TestNG、Mockito、AssertJ 等。本文将讲解如何编写单元测试和集成测试来保障 Spring Boot API 应用不同层级代码的质量,其中会涉及到使用嵌入式的 H2 数据库
浅析Spring boot与Spring cloud 之间的关系
浅析Spring boot与Spring cloud 之间的关系 20180515 18:16:10有些童鞋刚接触这块 ,理解不是很深刻会经常问道这样类似的问题,下面我就简单讲解一下Spring boot与Spring cloud 之间的关系!Spring boot 是 Spring 的一
经典JAVA面试题整理,方便统一复习
以下是网上整理的非常全面的面试题,当然,绝大多数人不可能全部用到,但是都罗列在此,大家可根据自己的情况,选择对应的模块进行阅读。面试题模块介绍这份面试题,包含的内容了十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hi
阿里P8亲自教你!2021年Java程序员职业规划
Spring 全家桶:1. Spring 原理2. Spring面试题3. 思维导图4. 面试题5. Spring视频 Spring 原理 Spring特点 Spring 核心组件 Spring常用模块 Spring主要包 Spring常用注解 Sping第三方结合 Spring 10C原理 Spring APO原
阿里一线架构师技术图谱!十年开发经验Java架构师
开头我们面试的时候 ,经常会被问这种到问题:Spring中bean的循环依赖怎么解决? Spring中bean的加载过程? spring相关的问题一直是大厂面试常问到的一个问题,也是一直困扰这我们,不知道从哪里下手,今天举例分析大厂的一些spring相关的面试真题。和分享我学习spring相关问题所整理的一些知识点。 01 并发宝典:面试专题面试专题分为四个
【带你手撸Spring】没有哪个框架开发,能离开 Spring 的 FactoryBean!
作者:小傅哥博客:沉淀、分享、成长,让自己和他人都能有所收获!😄 一、前言老司机,你的砖怎么搬的那么快?是有劲?是技巧?是后门?总之,那个老司机的代码总是可以很快的完成产品每次新增的需求,就像他俩是一家似的!而你就不一样了,不只产品经理还有运营、测试的小姐姐,都得给你买吃的,求着你赶紧把Bug修修,否则都来不及上线了。那为啥别人的代码总是可以很快的扩展新功能
重磅!这份笔记连阿里P8面试官都说太详细了
一、Spring Boot 相关(1)SpringBoot 面试专题 什么是 Spring Boot? Spring Boot 有哪些优点? 什么是 JavaConfig? 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? Spring Boot 中的监视器是什么? 如何在 Spring Boot 中禁用 Act
作为一个码农终于把这些笔记看懂了,牛皮轰轰
Spring面试高频问题 SpringMVC面试高频问题 MyBatis面试高频问题 SpringBoot面试高频题 SpringCloud面试高频问题 Redis高级面试题 Dubbo高频常问面试问题 Java虚拟机(JVM) MySQL数据库高频面试问题 Java高频面试专题合集解析:当然在这还有更多整理总结的Java进阶学习笔记和面试题未展示,在这也是
Spring MVC的原理
Spring MVC的工作流程:(1)客户端发起HTTP请求:客户端将请求提交到DisPatcherServlet(前端控制器)【所有的请求都有经过它来统一分发,在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。】。 控

热门文章

前端性能优化建议Python的环境搭建和下载mysql安装无法启动问题解决

最新文章

前端性能优化建议Python的环境搭建和下载mysql安装无法启动问题解决