博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java MVC 1.0规范开始进入公开评审阶段
阅读量:6625 次
发布时间:2019-06-25

本文共 3987 字,大约阅读时间需要 13 分钟。

\

看新闻很累?看技术新闻更累?试试,每天上下班路上听新闻,有趣还有料!

\
\\

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

\\

自以来的新特性包括:

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

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

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

Eclipse的项目完整地实现了JSR-371,支持、和。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经过渲染后就会呈现成下面的样子:

\\

\\

用户输入如下的信息,只要长度符合要求,就会渲染出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的项目管理委员会成员。

\
\\

其他资源

\\
  • by Ivar Grimstad (May 22, 2017)\\t
  • mvc-samples GitHub by Ivar Grimstad\

查看英文原文

转载地址:http://qatpo.baihongyu.com/

你可能感兴趣的文章
H.264学习笔记之一(层次结构,NAL,SPS)
查看>>
Radware:IP欺诈等让网络攻击难以防范
查看>>
基于Token认证的WebSocket连接
查看>>
【Solidity】2.合约的结构体 - 深入理解Solidity
查看>>
《Drupal实战》——2.6 小结
查看>>
《C语言及程序设计》实践参考——二分法解方程
查看>>
java thread中的wait()和notify()
查看>>
2016最新搜索引擎优化(SEO)重点要素
查看>>
当Web访问性能出现问题,如何深探?
查看>>
【IOS-COCOS2D-X 游戏开发之二】【必看篇】总结阐述COCOS2D-X与COCOS2D-IPHONE区别;
查看>>
eoLinker-API_Shop_通讯服务类API调用的代码示例合集:短信服务、手机号归属地查询、电信基站查询等...
查看>>
前端面试回忆录 - 滴滴篇 - 凉面
查看>>
jxl导入Excel 切割List 并使用MyBatis批量插入数据库
查看>>
小程序开发总结
查看>>
Tomcat监听器设计思路
查看>>
管理ORACLE实例
查看>>
Confluence 6 MySQL 数据库设置准备
查看>>
Ruby 中 0/0.0 = NaN
查看>>
JEESNS数据库表设计结构
查看>>
JavaScript学习笔记:判断变量是否为undefined,判断变量和函数是否声明
查看>>