访问 asp网页 白屏_ASP.NET MVC vs Spring MVC

5bacdf9cc4592ec717c4bac9bba6b569.png

C# 是微软出品对标 Java 的语言,在 web 开发方面,二者都在表现层实现了自己的 MVC 框架。从一个简单的项目开始对比,看看二者有何差异。

项目结构

首先来看由 SpringBoot 生成的 MVC 项目模板(勾选了 web、Thymeleaf 、mybatis),controller、model 文件夹与 SpringBoot 项目主文件 XXspringbootApplication 位于同一目录下,view 文件位于应用 Thymeleaf 模板文件夹(templates)下。

3099a62ed057ff72effd2c7272e60f4e.png

再看官配编辑器 VS 生成的 http://ASP.NET MVC 基本项目。controller、model 、view 文件夹位于同一级,每一个 controller 有对应的model 、view 子文件夹。

3c1bfc66a5ba65dbdb3e781bdc3997f1.png

结论,相对来说,由 VS 生成的 http://ASP.NET MVC 基本项目文件目录结构完整,不需要再手动添加文件或者代码,直接可以跑起一个 HelloWorld 网页。而由 SpringBoot 生成的 MVC 项目模板,还需要自己手动添加 controller、model 、view 文件,相对来说更为繁琐。

Controller 差异

Spring MVC 控制器通过@Controller 注解和普通的类区分,没有默认的文件路径,而控制器中的方法对应前端发送的请求,@RequestMapping(path = "hi",method = RequestMethod.GET) 注解 来定义控制器访问路径、对应的请求方式。未在类上添加@RestController、方法上添加 @ResponseBody 注解,则 public String hi() 返回的是视图名称。当返回值为 void 时(例:public void hi() )默认返回与方法名称同名的视图。

@Controller
public class HiController {
    @RequestMapping("hi")
    public String hi(){
        return "index";
    }
}

http://ASP.NET MVC 中所有的控制器都 继承 自 Controller 类,默认以 XX+Controller 为控制器名称,默认以控制器前缀(除 Controller 部分)为访问路径,访问对应的方法为「/Home/Index」控制器名称+对应的方法名称。请求方式通过注解方式声明,默认为所有请求方法都响应。在方法的返回值方面,ActionResult 是 http://ASP.NET MVC 所封装的抽象类,可以返回视图、Json 等多种类型。当方法放回值为 void 时不会有默认返回页面。return View() 会返回 VIEW 文件下 Home 文件夹(与控制器名称一致)的 Index.cshtml 视图(文件名与方法名称一致)。

public class HomeController : Controller // 继承
    {
        [HttpGet] // 显式声明,默认为都响应
        public ActionResult Index()
        {
            return View();
        }

Model 差异

在 Spring MVC 中,Model 层和普通的 JavaBean 一样,更多的是定义 view 所需要的数据模型

而在 http://ASP.NET MVC ,Model 层位于同一目录下,建立 model 文件时,会自动引入 using System.ComponentModel.DataAnnotations; 可以让我们使用注解配合 jquery.validate.js 在 view 层对数据进行验证或别名展示,在表现层对数据进行多重验证,确保最终获取或发送数据有效。

public class SetPasswordViewModel
    {
        [Required]
        [StringLength(100, ErrorMessage = "{0} 必须至少包含 {2} 个字符。", MinimumLength = 6)] // 定义字段的取值范围以及出错提示信息
        [DataType(DataType.Password)]
        [Display(Name = "新密码")]
        public string NewPassword { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "确认新密码")]
        [Compare("NewPassword", ErrorMessage = "新密码和确认密码不匹配。")]
        public string ConfirmPassword { get; set; }
    }

VIEW 差异

在 Spring MVC 中,可以在 VIEW 层使用 EL 表达式,有限的使用 Java 编写代码,通常以${} 表示,内置了 Page PageScope、Request、RequestScope、Session、SessionScope、Application 等变量。

而 http://ASP.NET MVC 在视图层提供的功能很强大,Razor 标题语法可以任意的 HTML 插入 C# 语句,只需要在 C# 语句前加上「@」符号即可。同时也可以在 C# 语句块中写入 HTML 语句,在页面加载时会只能感知以区分 C# 语句和 HTML 语句。

<ul>
@for (int i = 0; i < 10; i++) {
<li>@i</li>
}
</ul>

同时 http://ASP.NET MVC 也提供了一系列 HTML 辅助方法,减少了 JavaScript 的工作量,更容易和后台交互。

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
            {
                @Html.AntiForgeryToken()
                <h4>使用本地帐户登录。</h4>
                <hr />
                @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                <div class="form-group">
                    @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
                    <div class="col-md-10">
                        @Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
                        @Html.ValidationMessageFor(m => m.Email, "", new { @class = "text-danger" })
                    </div>
                </div>
            }

总结

C# 之前的闭源和 Java 的开源,再加上发布时间的落后于 Java,导致 C# 和 Java 再编程语言的流行排行差异巨大。

还一部份原因是,C# 的社区远不如 Java 活跃,国内除了 MSDN 官方找不到什么合适的学习资源,而 MSDN 官网的资源不是很适合入门。对于入门的人来说,遇到问题不知道该如何解决,也没有合适的学习资源。

C# 对于细节方面屏蔽的更多,程序员只需要关注自己业务的需要即可,很少需要配置,而 Java 的开发相对繁琐(不使用 SpringBoot 手动配置的部分更多),需要注意更多的细节。

总而言之,言而总之,做为个人项目的开发我会选择 C# 因为可以节省更多的时间来开发自己项目,但是要系统的学习后端开发,我更推荐学习 Java,自己手动实现一些细节会让你对项目的理解更为深刻。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值