QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

Java MVC 1.0 规范开始进入公开评审阶段

  • 2018-02-01
  • 本文字数:2687 字

    阅读完需:约 9 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

JSR-371 规范 1.0(Model-View-Controller,MVC)开始进入公开评审阶段。这是在 2017 年 4 月份 Oracle 将其所有权移交给 Ivar Grimstad 之后发布的第一个主要版本。在移交之后不久,来自 Ingenit GmbH 的高级开发工程师与 Christian Kaltepoth 一起领导该规范的制定。后来,JSR-371 将许可协议改为 Apache License 2.0。2017 年 10 月,Grimstad 表示,在 MVC 1.0 最终版发布之后,他想要将它移交给 Eclipse 基金会。

Early Draft Review 2 以来的新特性包括:

  • 国际化——支持 I18N
  • 改进了数据绑定——可通过 @MvcBinding 注解和 BindingResult 类来定义数据绑定和数据验证规则。

规范文档列出了 MVC 1.0 的目标:

  • 基于现有的 Java EE 技术。
  • 集成 CDI( JSR-346 )和 Bean Validation( JSR-349 )。
  • 定义用于构建 MVC 应用程序的方法,但在第一版本中不需要支持所有特性。
  • 尝试在 JAX-RS 之上构建其他层,并重用已有的匹配和绑定层。
  • 提供内置的 JSP 和 Facelet 视图语言。

Eclipse 的 Ozark 项目完整地实现了 JSR-371,支持 RESTEasy Jersey Apache CXF 。Ozark 1.0 版本有望在 2018 年第二季度发布,与 JSR-371 的最终版接轨。

入门

下面的例子使用 @Controller 注解定义了一个 MVC 1.0 的控制器,该控制器会生成一个 JSP 页面。

复制代码
@Path("hello")
@Controller
public class HelloController {
@GET
public String view() {
return "hello.jsp";
}
}

这个方法可以返回各种各样 MVC 1.0 能够处理的类型,如:

  • void——必须与 @View 一起使用(请看下面的例子)。
  • String——返回视图的路径(请看下面的例子)。
  • JAX-RS Response——返回 HTTP 响应消息,包括头部信息(请看下面的例子)。

下面是一个典型的 MVC 1.0 控制器的例子(来自 Grimstad GitHub代码库里的 hello-cli 示例):

复制代码
@Path("hello")
@Controller
public class HelloController {
@Inject
private BindingResult br;
@Inject
private Messages messages;
@Inject
private HelloBean helloBean;
@GET
@View("form.jsp")
public void form() {
}
@POST
public Response formPost(@Valid @BeanParam HelloForm form) {
if (br.isFailed()) {
messages.setErrors(
br.getAllValidationErrors().stream()
.collect(toList()));
return Response.status(BAD_REQUEST).entity("form.jsp").build();
}
helloBean.setFirstName(form.getFirstName());
helloBean.setLastName(form.getLastName());
return Response.status(OK).entity("hello.jsp").build();
}
}

示例中使用 @Inject 将 BindingResult 的实例(用于进行验证)和 Model、Message 和 HelloBean 自动注入到控制器中。被 @View 注解的 form() 方法指定了要渲染的页面 form.jsp。formPost() 方法里会做一些验证,并返回 Response 类型。HelloForm 类定义了用户输入字符串的长度:

复制代码
public class HelloForm {
@MvcBinding
@NotNull
@Size(min = 1, max = 16)
@FormParam("firstName")
private String firstName;
@MvcBinding
@NotNull
@Size(min = 2, max = 24)
@FormParam("lastName")
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}

规范文档对绑定和验证的过程进行了描述:

可以通过给 @FormParam 和 @QueryParam 添加 @MvcBinding 注解来定义绑定规则。在进行 MVC 绑定时,出现验证错误并不会抛出 ConstraintViolationException 异常。相反,ConstraintViolation 会被保存到具有 Request 作用域的 BindingResult 实例中,该实例可以被注入到控制器当中。这样,控制器就可以处理错误,而不是使用全局的异常处理机制来处理错误,比如使用 ExceptionMapper。

运行 hello-cli 示例,form.jsp 经过渲染后就会呈现成下面的样子:

用户输入如下的信息,只要长度符合要求,就会渲染出hello.jsp 页面:

下面是出现验证错误的例子,输入框会被清空,并显示错误消息:

来自Cybercom Group 的首席顾问Grimstad 向InfoQ 透露了MVC 1.0 的最新进展情况。

InfoQ:为什么 Oracle 不想再为 MVC 1.0 提供支持?

Ivar Grimstad:这个问题应该让 Oracle 来回答。不过我认为,Oracle 之所以将 MVC 1.0 从 Java EE 8 中剥离出来,是因为他们认为 MVC 与他们的云应用不相干,因为他们的大部分应用是 headless 的。

InfoQ:你对将 MVC 1.0 集成到 EE4J 中做何期待?在这之前,需要做些什么吗?

Grimstad:我们已经创建了一个提案项目 Ozark,也就是 MVC 1.0 的一个参考实现。具体信息可参看: https://projects.eclipse.org/proposals/eclipse-ozark。

我们希望在 MVC 1.0 最终版发布之后,尽快将其剩余部分集成到 EE4J 中。我们计划在今年的第二个季度完成这项工作。我们之所以要这么做,是因为我们希望 MVC 能够在发布最终版之后再将其移交给 Eclipse 基金会。

InfoQ:Rest Client 1.0 和 JAX-RS 2.0 已经被集成到 MicroProfile 1.3 中,那么 MVC 1.0 API 也适合被集成进 MicroProfile 吗?

Grimstad:从技术方面来看,MVC 1.0 应用程序可以运行在 MicroProfile 上。不过,MicroProfile 的目标是为微服务优化企业版 Java,所以我不确定 MVC 被集成到 MicroProfile 中是否是一个明智之举。它只是一项额外的补充技术,因为是运行在相同的技术栈上,所以在这方面没有什么问题。不过,MVC 更适合被放在 EE4J 中。

InfoQ:MVC 1.0 接下来会有哪些动作?

Grimstad:MVC 1.0 的下一件大事就是它的公开评审,评审开放时间为 2 月 6 号至 2 月 12 号。在完成评审之后,我们会继续完成剩下的工作。目前计划在 2018 年第二季度发布最终版。

可以查看如下信息来了解我们的进度,或者加入到我们的工作中: https://github.com/mvc-spec https://www.mvc-spec.org/ https://twitter.com/mvc_spec

InfoQ:你的本职工作是什么?或者说,你日常都做些什么?

Grimstad:我的本职工作是瑞士 Cybercom Group 的首席顾问。我们每天都会写代码,并通过参与开源项目和参加技术大会保持技术上的与时俱进。我是 JCP 执行委员会成员,也是 EE4J 的项目管理委员会成员。

其他资源

查看英文原文 Public Review of Java MVC 1.0 Specification is Now Open

2018-02-01 18:004919
用户头像

发布了 322 篇内容, 共 146.2 次阅读, 收获喜欢 148 次。

关注

评论

发布
暂无评论
发现更多内容

OceanBase开发者大会2023届视频及PPT汇总

菜根老谭

oceanbase

基于CH32V103的多功能推杆设计

芯动大师

单片机 CH32V10

Final Cut Pro中文版 导出视频的教程(含fcpx安装包)

Rose

Final Cut Pro中文版 FCPX下载 fcpx Final Cut Pro教程 Mac软件视频编辑

ownips数据获取工具全面测评

Yan-英杰

TCP

事业-最佳实践-编码-注解使用规范

南山

最佳实践 代码质量 注解

Linux 设备驱动系列(一)——设备驱动介绍

Linux内核拾遗

Linux内核 设备驱动

(含永久密钥)无缝衔接,畅享多系统!体验VMware虚拟机的强大功能

Rose

虚拟机软件 VMware Fusion 虚拟机 VM虚拟机密钥

探索人工智能在测试领域的新纪元:AI编写测试用例的前景

霍格沃兹测试开发学社

掌控基础设施,加速 DevOps 之旅:IaC 深度解析

SEAL安全

DevOps 运维 IaC

事业-最佳实践-编码-源代码文件组织

南山

最佳实践 代码质量 代码组织 代码风格

Partisia Blockhain:兼顾区块链不可能三角的创新系统

股市老人

Partisia链:兼顾去中心化、安全性与可扩展性的创新区块链系统

石头财经

苹果专业的视频下载器Downie 4 for mac的主要功能和优势

Rose

Mac 软件 视频下载工具 Downie 4许可证 Downie 4 Mac版

Parallels Desktop 18:Mac上的Windows体验再升级,游戏、工作两不误

Rose

pd18虚拟机 Mac虚拟机下载 Parallels Desktop 18破解 Parallels 激活码 PD18安装教程

如何使用Microsoft Remote Desktop for Mac微软远程?

Rose

Mac软件 microsoft remote desktop 微软远程管理

前端代码规范 - JavaScript 部分规范

南城FE

JavaScript 前端 代码规范

✅真实对账系统是如何设计并优化的

派大星

互联网大厂面试 java 架构

Partisia Blockhain:兼顾区块链不可能三角的创新系统

BlockChain先知

wasm 系列之 WebAssembly 和 emscripten 暴力上手

工匠若水

前端 Wasm WebAssenbly

软件开发流变史:从瀑布开发到敏捷开发再到DevOps

敏捷开发

DevOps 敏捷 敏捷转型 瀑布模型 IT 运维

探索Photoshop 2024新功能,让设计更出彩!

Rose

Photoshop 2024破解版 Photoshop 2024直装版 ps2024新功能 ps2024中文版

SketchUp Pro草图大师2023中文直装版下载 mac/win

Rose

草图大师2023下载 SketchUp Pro 2023下载 SketchUp Pro 2023破解

如何基于Django中的WebSockets和异步视图来实现实时通信功能

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号2024年4月PK榜

Java MVC 1.0规范开始进入公开评审阶段_Java_Michael Redlich_InfoQ精选文章