写点什么

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:004881
用户头像

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

关注

评论

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

基于Flexus X实例安装YesPlayMusic在线音乐播放器

平平无奇爱好科技

电商平台API与ERP的无缝对接:策略与实践探索

代码忍者

ERP系统 API 策略

稳定性方法论:可灰度 & 可监控 & 可回滚

京东科技开发者

2024 京东零售技术年度总结

京东科技开发者

NocoBase 本周更新汇总:详情区块联动规则

NocoBase

开源 低代码 零代码 无代码 版本更新

酒店有数,人间有味,伙伴有华为

脑极体

AI

爆肝整理!一文带你吃透软件测试

测试人

软件测试

解锁电商新境界,在华为云Flexus上快速部署并运行Magento电商系统

平平无奇爱好科技

WordPress部署

平平无奇爱好科技

华为云弹性云服务器FlexusX实例下的Nginx性能测试

平平无奇爱好科技

车联网服务平台的数据安全监测、共享、流通

芯盾时代

车联网 物联网 智能汽车

《CPython Internals》阅读笔记:p152-p176

codists

CPython Internals

WebGL 开发框架及其分析

北京木奇移动技术有限公司

数字孪生 软件外包公司 webgl开发

Flexus云服务器X实例实践:安装SimpleMindMap思维导图工具

平平无奇爱好科技

部署个人知识管理系统SiyuanNote

平平无奇爱好科技

基于Flexus X实例搭建Nginx网站服务

平平无奇爱好科技

抓住小红书上的美国人,狠劲赚一波

陆通

广州11号线地铁智慧公厕案例:光明源智能科技的智慧创新实践

光明源智慧厕所

智慧厕所 智慧公厕

在Flexus X实例上安装JDK和Tomcat保姆教学

平平无奇爱好科技

基于华为云Flexus X实例部署Uptime-Kuma服务器监控面板

平平无奇爱好科技

如何通过物化视图加速数据湖查询?

镜舟科技

sql 数据湖 数据分析 StarRocks 物化视图

华为云Flexus X实例性能实测:速度与稳定性的完美结合

平平无奇爱好科技

前端怎么做好稳定性保障体系建设?精准搞定“白虎”,不用叫“广智”!

京东科技开发者

0 Token 间间隔 100% GPU 利用率,百度百舸 AIAK 大模型推理引擎极限优化 TPS

百度Geek说

百度云 大模型、 #GPU

Three.js 开发框架的主要特点

北京木奇移动技术有限公司

three.js 软件外包公司 webgl开发

使用sysbench对Flexus X实例对mysql进行性能测评

平平无奇爱好科技

部署在线文档应用程序CodeX Docs

平平无奇爱好科技

阿里云 EMR 发布托管弹性伸缩功能,支持自动调整集群大小,最高降本60%

阿里云大数据AI技术

大数据 阿里云 弹性伸缩 EMR

游戏直播软件网站开发:这套源码强大功能为平台注入活力

软件开发-梦幻运营部

API对于程序员的多元用法:从基础到实战

科普小能手

学习 编程语言 编程学习 API 接口 Python API

COB LED屏幕在小间距显示时代的机遇与挑战

Dylan

cobra LED显示屏 全彩LED显示屏 led显示屏厂家 市场

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