MVC 1.0是一个基于动作的Model-View-Controller Web框架,它将成为将来的Java EE 8的一部分。它将与基于组件的JSF框架并存,并提供构建面向HTML + javascript的应用程序的替代方法完全控制网址。

这篇文章总结了使用Facelets代替默认的JSP作为MVC框架的视图技术需要做什么。

介绍

尽管MVC是一个全新的框架,但大多数示例中使用的默认视图技术(JSP)相当古老,有时会很麻烦。 另一方面,哥哥JSF已经建立在更现代,更灵活的Facelets上。

幸运的是,MVC框架旨在支持现成的许多替代视图技术,包括Facelets。

入门

尽管Java EE 8尚未发布,但是可以在某些Java EE 7服务器中使用MVC框架,因为名为Ozark的MVC规范的参考实现已经几乎完成。

据报道,Ozark与应用服务器Glassfish 4.1.1和Payara 4.1一起使用 。 我建议在其中一个应用程序上运行该应用程序,否则您可能会四处走动。

在发布Java EE 8之前,有必要使用Java EE 7 API之上的默认范围compile功能来添加对ozark maven工件的依赖关系:

pom.xml中的依赖项

<dependency><groupId>javax</groupId><artifactId>javaee-web-api</artifactId><version>7.0</version><scope>provided</scope></dependency><dependency><groupId>org.glassfish.ozark</groupId><artifactId>ozark</artifactId><version>1.0.0-m02</version><scope>compile</scope></dependency>

这就是设置项目所需要的。 现在,您可以将新的MVC框架与Java EE结合使用了!

控制者

MVC框架基于JAX-RS构建,并与CDI和Bean验证集成。 因此,MVC Controller是一个JAX-RS资源,仅使用@javax.mvc.annotation.Controller了注释:

HeloController.java

@Path("/hello")
@Controller
@RequestScoped
public class HelloController {@Injectprivate Models model;@GETpublic String doGet() {model.put("hello", "Hello MVC 1.0");return "hello.xhtml";}
}

控制器包含业务逻辑,并将模型粘贴到视图上。

该视图仅由控制器操作返回的字符串标识。 要使用facelets,只需指定一个路径即可,该路径将被映射到Facelets servlet(按照惯例,我们使用xhtml后缀)。

该模型由注入的Models对象表示。

这里要注意几件事。 首先,由于控制器是JAX-RS资源,因此还必须创建JAX-RS应用程序配置-扩展javax.ws.rs.core.Application的类。

其次,除非您将bean.xml包含在bean发现模式 all ,否则您需要使用范围定义注释(例如@RequestScoped标记控制器,以打开CDI注入Models模型。

模型

该模型包含由String键标识的对象,这些对象在视图页面中被转换为变量。

有两种方法可以定义模型。 首先是将javax.mvc.Models注入到控制器中,该控制器实际上是一个映射。 然后,控制器动作将对象放入String键下的注入模型中。

JSP和Facelets还支持带有@Named CDI限定符的任意CDI bean。 这样,您只需将@Named注释放在模型上,就可以将任何CDI bean变成模型。

视图

现在到本文的核心–我们将使用facelets在模型中显示数据。 实际上,使用Facelets作为视图技术与使用JSP一样容易。 它只需要正确设置Facelets servlet。

web.xml中的FacesServlet配置

<servlet><servlet-name>Faces Servlet</servlet-name><servlet-class>javax.faces.webapp.FacesServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Faces Servlet</servlet-name><url-pattern>*.xhtml</url-pattern></servlet-mapping>

FacesServlet需要映射到*.xhtml 。 所有xhtml页面都应位于Web应用程序内的WEB-INF/views文件夹内,MVC框架在其中搜索视图文件。

就是这样! 现在,您可以开始使用facelet编写页面,并按path引用它们,它们以xhtml结尾。

Hello facelet页面示例:

hello.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://xmlns.jcp.org/jsf/html"><h:head><title>Facelet Title</title></h:head><h:body><h1>#{hello}</h1></h:body>
</html>

为了显示hello.xhtml,只需从控制器操作中返回"hello.xhtml"

摘要

一旦了解了JAX-RS和CDI的基础知识,就可以很容易地开始使用MVC框架。 唯一的要求是在支持Ozark参考实现的应用程序服务器之一上运行应用程序。 使用各种视图技术作为默认JSP的替代品也非常容易。

MVC框架包括对许多视图技术的支持,并能够在其之上插入其他技术。 配置Facelets仅需要在web.xml中配置Faces servlet –设置JSF时需要做的相同的事情。

这篇文章的灵感来自Bennet Schulz的另一篇文章。 如果您想了解有关新MVC框架的更多信息,请访问他的博客。

翻译自: https://www.javacodegeeks.com/2016/02/mvc-1-0-java-ee-8-getting-started-using-facelets.html

Java EE 8中的MVC 1.0:使用Facelets入门相关推荐

  1. facelets_Java EE 8中的MVC 1.0:使用Facelets入门

    facelets MVC 1.0是一个基于动作的Model-View-Controller Web框架,它将成为将来的Java EE 8的一部分.它将与基于组件的JSF框架并存,并提供了构建面向HTM ...

  2. 在 Java EE 组件中使用 Camel Routes

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:你可以通过集成 Camel 和 WildFly 应用服务器(使用 WildFly-Camel 子系统)在 Java EE ...

  3. Java EE 7中包含哪些JSR?

    我开始填写所有应该加入Java EE 7的Java规范请求的表. 由于平台版本仍在确定中,因此某些细节很难确定. 完整的Java EE 7 EJB产品具有以下标准组件和API: 名称 版 描述 JSR ...

  4. react api_使用Java EE 8中的React式API加速服务

    react api 服务通常可以通过异步处理进行优化,即使不改变其对外界的行为. 某些服务效率不高的原因是,它们需要等待其他服务提供结果才能继续下去. 让我们看一下如何在不等待外部REST服务的情况下 ...

  5. 使用Java EE 8中的反应式API加速服务

    服务通常可以通过异步处理进行优化,即使不改变其对外界的行为. 某些服务效率不高的原因是,它们需要等待其他服务提供结果才能继续下去. 让我们看一下如何在不等待外部REST服务的情况下调用它们,并独立进行 ...

  6. js ajax 访问java函数,将url分配给Java EE项目中的ajax(js)函数

    我正在Ajax中尝试使用我的第一个项目,并且在分配指向要从服务器中获取的文件的绝对URL时遇到问题.将url分配给Java EE项目中的ajax(js)函数 这是我的函数: function fetc ...

  7. java ee jms_在Java EE 7中自动配置JMS资源

    java ee jms JMS 2.0(Java EE 7平台的一部分)引入了许多不错的功能 . 其中之一是能够声明JMS资源以进行自动部署. Java EE 7之前的版本 使用@Resource注入 ...

  8. java ee各类组件_在Java EE组件中使用骆驼路线

    java ee各类组件 从现在开始我一直在与Camel合作,我真的很喜欢它的简单性. 在Java EE之上使用它一直是一个挑战,我最近发表了一篇关于如何做到这一点的演讲,而在Java EE中引导Cam ...

  9. 在Java EE 7中自动配置JMS资源

    JMS 2.0(Java EE 7平台的一部分)引入了许多不错的功能 . 其中之一是能够声明JMS资源以进行自动部署. Java EE 7之前的版本 使用@Resource注入连接工厂 使用@Reso ...

最新文章

  1. 一次业务网关用ASP.NET Core 2.1重构的小结
  2. Ubuntu20.04 安装VMware Tools
  3. pythin怎么根据月份获取月初和月末_数据统计丨7月份塑料市场明显回暖,8月份是否延续乐观行情?...
  4. 哥斯拉Godzilla webshell管理工具
  5. MATLAB读写Excel数据
  6. 数据库连接和乱码问题
  7. Go语言的flag库、os库、strconv库
  8. oracle drop purge
  9. 红黑树与平衡二叉树_大佬用这近百张图来给我解释红黑树,看完直接跪了!
  10. 《嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜》——01-06 工作内容:做个工程师,而非程序工人...
  11. 发动机冒黑烟_发动机冒黑烟的原因和解决方法
  12. 长见识了: 一篇文章带你看懂 硬盘数据恢复软件的原理
  13. 一个简单的BitTorrent客户端实现(三):同步事件分离器
  14. 大司、小司、外包公司
  15. pandas的自带数据集_python数据分析万字干货!一个数据集全方位解读pandas
  16. 震撼【超高细节地球】GIS相关引擎,速看。。。
  17. 教你手把手基于java实现兼职招聘系统、基于SSM+mysql的Web校园招聘网站
  18. 新浪和腾讯微博教程(一)
  19. 手机上怎么把图片转成PDF?操作起来很简单
  20. 简单说一下Flutter框架

热门文章

  1. Oracle入门(十四F)之PL/SQL定义变量
  2. Java命令学习系列(三)——Jmap
  3. java8 hash算法
  4. ssh(Spring+Spring mvc+hibernate)——Dept.hbm.xml
  5. FE助手 json格式化 reslet client
  6. java中iscontinue意思_Java 中return、continue和break的区别
  7. 单件模式(单例模式)
  8. java分布式对象——远程方法中的参数和返回值+远程对象激活
  9. Servlet---注解开发
  10. 一篇总结的很好的Spring data jpa 文章,里面包含多种查询方式,可以结合api使用