Java EE 8 MVC:Ozark入门

大约一年前, 针对Java EE 8宣布了一个新的基于动作的MVC框架,简称为MVC。 MVC(在JSR 371中指定)基于JAX-RS,并与Java EE技术(如CDI和Bean验证)集成。 MVC 1.0的参考实现是Ozark 。

这是我计划编写的有关Java EE MVC的多部分教程的第一篇文章。 在本文中,我们将看到如何获取与Ozark一起运行的基本Java EE MVC应用程序。 即将发表的文章将为特定部分提供更多详细信息。

Ozark入门

请注意,MVC规范仍是一个早期草案,最终规范计划于2016年第三季度发布。要了解处于此早期状态的Java EE MVC,我们需要一个最新的夜间版本GlassFish和当前的Ozark里程碑发布。 Ozark团队建议当前的Ozark版本使用GlassFish b13 03-16-2015 。

除了GlassFish,我们还需要以下依赖项来创建MVC应用程序:

<dependencies><dependency><groupId>com.oracle.ozark</groupId><artifactId>ozark</artifactId><version>1.0.0-m01</version><scope>compile</scope></dependency><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>7.0</version></dependency>
</dependencies>

如上所述,Java EE MVC基于JAX-RS。 因此,如果您已经对JAX-RS有所了解,那么您可能会非常熟悉。

要创建我们的MVC应用程序,我们首先需要一个JAX-RS Application类:

@ApplicationPath("getting-started")
public class GettingStartedApplication extends Application {}

javax.ws.rs.core.Application的此子类可用于定义其他JAX-RS组件。 在此示例中,我们不需要任何特殊配置,因此该类可以保持为空。 使用@ApplicationPath,我们定义了应用程序的基本路径。

创建控制器

控制器负责处理传入的请求。 根据传入的请求,它执行业务逻辑,更新模型并返回应呈现的视图。 一个简单的Java EE MVC控制器如下所示:

@Controller
@Path("hello")
public class HelloController {@InjectModels models;@GETpublic String sayHello(@QueryParam("name") String name) {String message = "Hello " + name;models.put("message", message);return "/WEB-INF/jsp/hello.jsp";}
}

Controller类使用@Controller和@Path进行注释。 这表明该类是Java EE MVC控制器,它侦听/ getting-started / hello上的请求。

使用CDI,可以将Models的实例注入到控制器中。 Models类代表MVC模型。 它由控制器填充数据,然后传递到视图。 模型基本上是一个Map <String,Object>,可以包含任意数据。

sayHello()方法处理传入的HTTP GET请求(由@GET表示)。 使用@QueryParam,可以将请求参数绑定到方法参数。 在sayHello()内部,请求参数名称用于创建文本消息,然后将其添加到模型中。 返回的String定义了应呈现的视图的路径。

创建视图

Java EE MVC应用程序中的视图通常是带有CSS和JavaScript文件HTML页面。 在此示例中,我们的视图是一个简单的JSP文件,位于/WEB-INF/jsp/hello.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Getting started</title></head><body><h1>${message}</h1></body>
</html>

在JSP文件中,可以通过EL访问模型属性。 在这里,我们使用$ {message}来访问带有关键消息的模型值。

Java EE MVC规范为视图定义了两个标准模板引擎:JSP和Facelets。 但是,其他模板引擎也可以轻松集成。 我们将在下一篇文章中介绍其他视图技术的集成。

运行应用程序

现在,我们准备启动GlassFish并部署我们的新MVC应用程序。 之后,我们可以将GET请求发送到我们的控制器,并查看返回的内容。 不要忘记控制器需要一个名称参数。

例如, GET /getting-started/hello?name=john将在HTML页面中显示消息Hello John

摘要

Java EE MVC是即将推出的新Java MVC Web框架。 它使用了许多现有的Java技术,例如JAX-RS,CDI和JSP。 该框架本身非常简单且易于理解。 完整的MVC 1.0规范只有33页左右,非常容易阅读。

我们可以使用MVC 1.0参考实现的最新里程碑版本Ozark来了解即将到来的Java EE 8框架。

  • 您可以在GitHub上找到示例应用程序的完整源代码。

翻译自: https://www.javacodegeeks.com/2015/09/java-ee-8-mvc-getting-started-with-ozark.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp踩坑指南之坑多到写不完

1、sticky:到达指定位置时&#xff0c;就停留在那里不动了。当发现可以走时&#xff0c;立马就走了。 如果走不了就不会动了&#xff0c;就会一直在那里。 https://www.cnblogs.com/byeyear/p/11999334.html 设置了sticky定位的元素相对于第一个定位不为static的父级元素的位置…

小程序引入百度地图与uni.getLocation的使用

一、小程序引入百度地图 1、当你不需要引入整个地图展示&#xff0c;只需要引入某些功能的时候&#xff0c;可以直接调用服务端api。 2、访问百度地图的任何api都需要密钥。 流程&#xff1a; 3、在小程序端配置请求合法域名&#xff1a;https://api.map.baidu.com 4、直接使…

当年上大学时,编程老师让我们用html+CSS实现一个天猫官网

纯用htmlcss实现一个天猫首页还是挺考验基本功的&#xff0c;完全考验自己的CSS功底。 目录 效果图 项目结构 index.html 源码下载&#xff1a;点我下载 效果图 项目结构 主要由htmlcss组成。 index.html <!doctype html> <html lang"en"><head&g…

微服务实战系列之Dubbo(上)

前言 随着一年一度冬至的到来&#xff0c;2023的步伐也将远去。而博主的系列文章&#xff0c;也将从今天起&#xff0c;越来越聚焦如何构建微服务“内核”上。前序系列文章几乎囊括了微服务的方方面面&#xff0c;无论使用什么框架、组件或工具&#xff0c;皆可拿来用之。 那么…

多线程图解

关于多线程一直是我们学习iOS的一个重点&#xff0c;不仅是面试中经常被问到的问题&#xff0c;而且我们开发过程过程中经常会用到的技术&#xff0c;下面是一张关于多线程的图解&#xff0c;希望可以帮助大家学习多线程的开发。 转载于:https://www.cnblogs.com/lyy-5518/p/53…

spring作业_Spring和石英:多作业计划服务

spring作业作业调度对于应用程序来说是如此重要。 尤其是在大型项目中&#xff0c;处理大量工作可能是一个问题。 Spring和Quartz为解决该问题带来了巨大的好处。 本文展示了如何通过使用Spring和Quartz轻松地计划多个作业。 二手技术&#xff1a; JDK 1.6.0_21 春天3.1.1 石…

react常用知识点总结

1、什么是jsx JSX是JavaScript的扩展语法,这种<></>标签的写法就是 JSX。JSX 编写的组件通过预处理器 babel 解析后,再交给 React 库渲染到指定父容器下,形成最终html页面,供浏览器解析和显示。 JSX会被babel编译为&#xff1a;React.createElement()&#xff0c…

今日工作小结

1)用xib自定义cell写tableviewDemo代码&#xff0c;转模型&#xff0c;cell重用 见本地develop-demo-FriendTableViewDemo 2)textview的内容不定格显示&#xff0c;这好似用导航跳转过去&#xff0c;他会减去64像素&#xff0c;也就是导航的高度都是ScrollView引起的&#xff0…

全球数据一致性,事务,微服务和Spring Boot / Tomcat / Jetty

我们通常会构建需要一起执行以下几项操作的应用程序&#xff1a;调用后端&#xff08;微&#xff09;服务&#xff0c;写入数据库&#xff0c;发送JMS消息等。但是&#xff0c;如果在调用其中之一时出错&#xff0c;会发生什么情况&#xff1f;远程资源&#xff0c;例如&#x…

前端导入导出文件

一、导出 1、返回值是url&#xff1a;创建个a标签即可 printRecord(params).then((response) > {if (response.success) {let a document.createElement(a);//创建a标签//从新页面打开&#xff0c;下载的话不需要这个&#xff0c;打开一个图片需要从新页面打开a.setAttrib…

选取文档元素的API

除了现在常用的选取API 1 document.getElementById() 2 document.getElementsByName() 3 document.getElementsByTagName() 4 ... 新增的API 主要是  document.querySelector(div>ul)  document.querySelectorAll(div>ul>li) 这两个API的强大之处在于能像CSS选…

vue进阶

1、vue-cli 使用 在开发中&#xff0c;需要打包的东西不止是js、css、html。还有更多的东西要处理&#xff0c;这些插件和加载器如果我们一一去添加就会比较麻烦&#xff0c;vue官方提供了一个快速搭建vue项目的脚手架&#xff0c;使用它能快速的构建一个web工程模板。 官网&…

每天一个linux命令(1):ln 命令

每天一个linux命令&#xff08;35&#xff09;&#xff1a;ln 命令 ln 是linux中又一个非常重要命令&#xff0c;它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录&#xff0c;用到相同的文件时&#xff0c;我们不需要在 每一个需要的目录下都放…

ehcache 程序_将Ehcache添加到Openxava应用程序

ehcache 程序介绍 本文介绍如何在Openxava应用程序上快速启用Ehcache&#xff0c;从而提高性能。 查看实体及其图形时&#xff0c;将加载关系。 添加第二级缓存可加快关联元素的检索速度&#xff0c;因为已加载的元素是从缓存而不是数据库中检索的。 最终&#xff0c;该页面解…

Diff 算法核心原理

什么是虚拟DOM 讲Diff算法前&#xff0c;我先给大家讲一讲什么是虚拟DOM吧。这有利于后面大家对Diff算法的理解加深。 虚拟DOM是一个对象&#xff0c;一个什么样的对象呢&#xff1f;一个用来表示真实DOM的对象&#xff0c;要记住这句话。我举个例子&#xff0c;请看以下真实…

比较Java 8中的命令式和功能性算法

Mario Fusco的流行推文令人印象深刻&#xff0c;显示了类似算法的命令性和功能性方法之间的主要区别实际上是&#xff1a; 势在必行–功能分离pic.twitter.com/G2cC6iBkDJ — Mario Fusco&#xff08;mariofusco&#xff09; 2015年3月1日 两种算法都做同样的事情&#xff0…

mvc的视图中显示DataTable的方法

mvc的视图中显示DataTable的方法&#xff1a; 不断的循环画出table {ViewBag.Title "ShowDataTable"; } using System.Data; model Models.ConModel{var table Model.ExcelTable as DataTable; }<script src"~/Scripts/My97DatePicker/WdatePicker.js"…

rem,em,px,rpx等

1、任意浏览器的默认字体高都是16px。谷歌浏览器显示的最小字体大小是12px。 exp&#xff1a;突破谷歌浏览器显示12px限制。 &#xff08;1&#xff09;、<div>文本</div> 文本嵌套块标签&#xff0c;这是因为缩放只对有宽高的标签有效&#xff0c;缩放的时候也是…

python 列表 字典 读写文件:pickle模块的基本使用

建议大家使用cPickle&#xff0c;速度更快&#xff01;&#xff01;&#xff01; python数据持久存储&#xff1a;pickle模块的基本使用&#xff08;转载&#xff09; 作者: pzxbc出处: http://pzxbc.cnblogs.com/本文版权归作者和博客园共有&#xff0c;欢迎转载&#xff0c;但…

first-child、first-of-type等属性的差别

1、xxx:first-child 伪类 xxx作为第一个子元素 //p元素作为第一个子元素的都会变色 p:first-child { background:yellow; } //p作为父元素的 第一个子元素。不要求第一个元素的类型 p>:first-child {background:yellow; }//p作为父元素的 第一个子元素。要求第一个元素的类…