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

\

看新闻很累?看技术新闻更累?试试下载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。\\t
  • 改进了数据绑定——可通过@MvcBinding注解和BindingResult类来定义数据绑定和数据验证规则。\

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

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

Eclipse的Ozark项目完整地实现了JSR-371,支持RESTEasyJerseyApache 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一起使用(请看下面的例子)。\\t
  • String——返回视图的路径(请看下面的例子)。\\t
  • 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经过渲染后就会呈现成下面的样子:

\\

c84c8cbf755d7d76bb37d82e30d5ba8d.png

\\

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

\\

b1dcb1493d231a4774a532ec5eb9a400.png

\\

e9b6cd1869b0bcaa1bf082640ac6bd8c.png

\\

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

\\

ed2595d072d1fbd8bbd4e2d7f0c88b04.png

\\

来自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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值