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

Alonso095 等级 657 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没那么难,都是面向对象的语言,而且语法还是相似的,先对比一下开发
经典JAVA面试题整理,方便统一复习
以下是网上整理的非常全面的面试题,当然,绝大多数人不可能全部用到,但是都罗列在此,大家可根据自己的情况,选择对应的模块进行阅读。面试题模块介绍这份面试题,包含的内容了十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hi
Java面试解析总结:Java+Redis+数据库+算法与数据结构+分布式
![](https://oscimg.oschina.net/oscnet/up-760e80c47ac2161a4a2fb57889bd590e1ff.png) 金九银十即将到来,给大家整理了今年来最经典的面试真题1000+道,每个题目都有详细的解答,收集了java基础、RabbitMQ,微服务、MySQL数据库、Java并发、JVM,Redis、设计模
3 SpringBoot与微服务
**SpringBoot的使用?** * 化繁为简: Spring MVC 需要定义各种配置,配置文件多。 **SpringBoot的核心功能?**    独立运行: java -jar XXX.jar (以前启动SPring MVC需要有服务器,比如tomcat)    内嵌web服务器: 内嵌Tomcat.    简化配置:用starter
Spring MVC 自带的字符编码过滤器以及Tomcat字符编码设置,彻底解决中文参数乱码问题
一、Spring MVC字符编码配置 java Web项目添加Spring支持后,可使用Spring自带的字符编码过滤器。源码在spring-web-4.1.0.RELEASE.jar包下的org.springframework.web.filter目录的CharacterEncodingFilter.java。 在web.xml文件中配置:
Spring MVC入门
2.1、Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。 另外还有一种基于
69道Spring面试题和答案
目录 -- * Spring 概述 * 依赖注入 * Spring beans * Spring注解 * Spring数据访问 * Spring面向切面编程(AOP) * Spring MVC **Spring 概述** ------------- ### **1. 什么是spring?** Spring 是个java企业
Alibaba内部出品JavaEE开发手册( MVC+ Spring+MyBatis )和Redis
为什么选择 SSM 框架+Redis 的开发模式? ========================= > 有幸从一位朋友那里得到Alibaba内部出品强推的“《Java互联网轻量级框架整合开发——SSM框架( Spring MVC+Spring+MyBatis )和Redis实现》”,秉承好东西的当然要共享的原则,今天就来秀一把,试试这“《Java互联网
Intellij IDEA创建spring MVC项目
相信各位未来的Java工程师已经接触到了spring MVC这个框架的强大之处,看了很多的教程,都是eclipse的,在intellij IDEA这个强大的工具面前居然不能很顺畅的,今天我就带领大家用IDEA创建Hello World程序。 **注:** 1、本文只讲解怎么用intellij IDEA进行创建spring MVC项目,并不会讲解具体的sp
SSM(SpringMVC+Spring+Mybatis)框架学习理解
近期做到的项目中,用到的框架是SSM(SpringMVC+Spring+Mybatis)。之前比较常见的是SSH。用到了自然得了解各部分的分工 spring mvc 是spring 处理web层请求的一个模块,spring mvc需要有spring的架包作为支撑才能跑起来。(也有看到一些博客有提到spring boot,spring boot就是一个大框架
Spring + SpringMvc + Spring Data Jpa框架整合
文章内容输出来源:拉勾教育Java高薪训练营 Spring + SpringMvc + Spring Data Jpa框架整合 ======================================== 本篇博客,我们来说下spring 整合 spring mvc 和 spring data jpa的整个过程 先来看下项目结构 我把配置文件拆分为s
Spring 源码阅读神器
> Spring 是java 最优秀的框架之一,其源码属于Java开发者拜读圣经。 Spring 源码阅读障碍 ============= Spring 源码非常的优秀,但其设计,代码量非常庞大,对于开发者自身,有些无从入手的感觉。 没有体系的阅读很难学习到Spring 的精髓,同时因其复杂让很多开发者望而却步。 ![](https://os
SSM(SpringMVC+Spring+Mybatis)框架学习理解
近期做到的项目中,用到的框架是SSM(SpringMVC+Spring+Mybatis)。之前比较常见的是SSH。用到了自然得了解各部分的分工 spring mvc 是spring 处理web层请求的一个模块,spring mvc需要有spring的架包作为支撑才能跑起来。(也有看到一些博客有提到spring boot,spring boot就是一个大框架

热门文章

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

最新文章

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