写点什么

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

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

关注

评论

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

从德勤“小勤人”说起:财务RPA如何革新财务工作全流程?

Techinsight

RPA 财务管理 财务办公 Agent智能体

TechSmith Snagit v2024.4.1 中文版 mac/win最强截图工具

Rose

AI口语练习APP的对话练习

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

软件外包公司 AI口语练习 AI口语学习

Typora:极简主义者的Markdown写作神器

Rose

MacDroid Pro for mac(安卓手机数据传输助手)2.3激活版

Rose

当我用DeepSeek写了这篇公众号,全是梗

kookeey代理严选

小红书 ChatGPT DeepSeek DeepSeek-R1、 跨进电商

Elasticsearch:使用阿里云 AI 服务进行向量化和重新排名

阿里云大数据AI技术

人工智能 elasticsearch Qwen DeepSeek

人工智能丨ChatGPT 免费开放网络搜索,能否挑战 Google 的搜索霸主地位?

测试人

干货!RPA 化解电商对账复杂流程全解析

Techinsight

电商 电商节 AI Agent

Red Giant for Mac2025(红巨人调色插件套装包含Trapcode、Magic Bullet、VFX)

Rose

Capture One 23 Pro:专业摄影师的终极RAW编辑工具

Rose

消防行业如何借助时序数据库 TDengine 打造高效的数据监控与分析系统

TDengine

tdengine 时序数据库 数据库‘’

观测云产品更新 | 可用性监测、场景图表、指标管理等优化

观测云

产品迭代

浅谈Tox之一

天翼云开发者社区

Python 自动化测试 Tox

AI口语练习APP的发音评测

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

软件外包公司 AI口语练习 AI英语口语

秒验:重构APP用户体验与运营效率

MobTech袤博科技

国际专线宽带是什么?有什么优势?

Ogcloud

国际专线 国际网络专线 网络专线 国际专线宽带

2025新趋势:传统车企数字化转型有新招啦!

Techinsight

AI RPA 车企 车企数字化 Agent智能体

Color Wheel for Mac(mac色轮工具)v8.5中文激活版

Rose

课程质量评估系统(源码+文档+讲解+演示)

深圳亥时科技

绕过 RAG 实时检索瓶颈,缓存增强生成(CAG)如何助力性能突破?

Baihai IDP

程序员 AI LLMs GenAI CAG

「工业4.0」智慧化工厂解决方案,智慧化工园区总体规划设计方案

金陵老街

智慧园区 智慧化工园区

Beyond Compare 5:文件对比与同步的终极工具

Rose

秒验三网合一,打破运营商壁垒的用户增长加速器

MobTech袤博科技

法院信息化 4.0 版,RPA 如何革新司法流程?

Techinsight

法院 信息化建设 RPA Agent Agent智能体

开源创意点亮生态未来 第二届OpenHarmony创新应用挑战赛圆满收官

科技热闻

服装智能制造软件平台(源码+文档+讲解+演示)

深圳亥时科技

百度百舸 DeepSeek 企业套件上线,加速 DeepSeek 融入企业生产业务

Baidu AICLOUD

百度百舸

JetBrains WebStorm v2024.3.4 (JavaScript集成开发环境) 中文激活版

Rose

加快培育新质生产力,天翼云息壤智算一体机引领国产AI新征程

科技热闻

AI口语练习APP的模拟考试

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

软件外包公司 AI口语练习 AI口语学习

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