Java EE 8中的MVC 1.0:使用Facelets入门

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

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

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

相关文章

Linux 查看内存状态

# 查看系统内存 命令&#xff1a;free 注&#xff1a;默认k单位显示注&#xff1a;-m 以MB注&#xff1a;-g以GB 单位显示total used free shared buffers cached Mem: 497 463 33 0 13 124 -/ buffe…

python通用数据库连接_python连接数据库的几种方式!

# -*- coding: utf-8 -*-"""-------------------------------------------------File Name&#xff1a; Database.pyAuthor : LiSenDate&#xff1a; 2018/6/26 15:51:-------------------------------------------------"""database两个库&…

Altium Designer导入pcb原件之后都是绿的

转载于:https://www.cnblogs.com/chulin/p/8342041.html

中文文本校对源码java_文字校对应该怎么校对?

如果现在给你一篇纸质文档&#xff0c;老板让你把它做成电子版的&#xff0c;这应该不是啥难事&#xff0c;你做完之后要校验一下&#xff0c;于是你一边看纸质文档一边看电子文档很努力的校对&#xff0c;恩&#xff0c;好像没有什么问题。如果老板给你100篇这样的文档&#x…

EL表达式的11隐含对象

EL表达式在不同范围如何取值&#xff1a; <%pageContext.setAttribute("book", "红楼梦");request.setAttribute("book", "水浒传");session.setAttribute("book", "三国演义");application.setAttribute(&quo…

在JConsole和VisualVM中查看DiagnosticCommandMBean

我已经将JConsole用作合适的通用JMX客户端已有很多年了。 该工具通常随Oracle JDK一起提供&#xff0c;并且易于使用。 在JMX交互方面&#xff0c;JConsole优于VisualVM的最大优点是JConsole带有内置的MBeans选项卡&#xff0c;而必须为VisualVM中的相同功能应用插件。 但是&am…

人人商城生成app教程_人人商城APP打包教程(APICLOUD版)

一.APP环境搭建和配置编译1.登录APICLOUD后台新建应用step1 注册账号注册apicloud 账号并登录APICLOUD控制台step2 新建应用再账户下面找到开发控制台>开发控制台>创建应用 填写应用名和说明&#xff0c;必选Native App创建Native App2 .开发工具下载安装APICLOUD开发工具…

WPF快速入门系列(2)——深入解析依赖属性

一、引言 感觉最近都颓废了&#xff0c;好久没有学习写博文了&#xff0c;出于负罪感&#xff0c;今天强烈逼迫自己开始更新WPF系列。尽管最近看到一篇WPF技术是否老矣的文章&#xff0c;但是还是不能阻止我系统学习WPF。今天继续分享WPF中一个最重要的知识点——依赖属性。 二…

圆台下料展开计算方法_怎么画 圆锥台展开图

展开全部1、 画出圆台的主视抄图(等腰梯形)袭&#xff1a;圆台的上bai下底直径为等腰梯形du的上zhi下底&#xff0c;圆台的高为等dao腰梯形的高&#xff1b;2、将等腰梯形补画成等腰三角形&#xff1b;(图中的虚线三角形即为补画部分)&#xff1b;3、以三角形的顶点为圆心&…

junit rule_Tomcat上下文JUnit @Rule

junit rule创建测试上下文的JUnit Rule的初稿。 这可以用Spring上下文规则可用于 这个帖子 创建集成测试一个完整的Spring上下文。 import org.apache.commons.dbcp.BasicDataSource; import org.apache.log4j.Logger; import org.junit.rules.TestRule; import org.junit.runn…

.31-浅析webpack源码之doResolve事件流(3)

放个流程图&#xff1a; 这里也放一下request对象内容&#xff0c;这节完事后如下(把vue-cli的package.json也复制过来了)&#xff1a; /*{ context: { issuer: , compiler: undefined },path: d:\\workspace\\doc,request: ./input.js,query: ,module: false,directory: false…

mysql数据库txt备份linux_linux备份mysql数据库

MYSQL定期备份是一项重要的工作&#xff0c;但人工操作太繁琐&#xff0c;也难避免有所疏漏&#xff0c;使用下面的方法即可让系统定期备份数据。1、创建备份文件夹#cd /www#makedir backup2、编写运行脚本#vi autobackup写入以下内容&#xff1a;filenamedate %Y%m%dmysql_bin…

python序列操作函数有哪些_Python笔记--序列操作函数

1All()&#xff1a;判断给出的可迭代参数iterable中所有元素是否均为true&#xff0c;是则返回true&#xff0c;否则返回false。注&#xff1a;除了0&#xff0c;空&#xff0c;False外都算作true。空元组&#xff0c;空列表返回true。语法&#xff1a;all(iterable)参数&#…

c++ 虚函数,纯虚函数的本质区别

转载博客&#xff1a;https://mp.weixin.qq.com/s?__bizMzAxNzYzMTU0Ng&amp;mid2651289202&amp;idx1&amp;sn431ffd1fae4823366a50b68aed2838d4&amp;chksm80114627b766cf31f72018ef5f1fe29591e9f6f4bd72018e7aea849342ca6f0a271fb38465ae#rd 学习C的多态性&…

mysql数据库常用名词_【千寻】MySQL数据库名词注释(持续更新)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼MySQL 数据库名词注释↓account 帐号数据库my 角色信息数据库mysql mysql用户数据库accountmy这两个数据库可能合并为一个数据库 比如 my my1 top top1 ... 这种类似account表打开后列 id 这个是数据库默认递增的id 不可随便列…

spring jmx_JMX和Spring –第3部分

spring jmx本文是本系列的最后一篇。 看一下第1 部分和第2部分 。 在本系列的最后一篇文章中&#xff0c;我将展示如何在JDK中使用本机JMX支持来实现一种通知机制&#xff0c;该机制可以在HEAP内存超过特定阈值时向侦听器发出警报。 正如我在上一篇文章中讨论的那样&#xff0…

云通讯短信验证码实例

1.注册登录云通讯 http://www.yuntongxun.com/user/login 2.创建应用得到应用相关信息 3.下载对应相关的Demo示例  http://www.yuntongxun.com/doc/rest/sms/3_2_2_3.html 4.send.php文件添加代码方便后续操作 session_start(); //随机验证码 $code rand(100000,999999)…

java 数组 内存_图解Java数组的内存分配

1. Java数组是静态的Java是静态语言&#xff0c;所以Java的数组也是静态的&#xff0c;即&#xff1a;数组被初始化后&#xff0c;长度不可变静态初始化&#xff1a;显式指定每个数组元素的初始值&#xff0c;系统决定数组长度String[] books new String[]{"疯狂Java讲义…

libgdx和Kotlin –类[2D平台原型]

这篇文章是libgdx和Kotlin文章的后续文章。 我已经决定开发一个简单的2D平台程序的原型&#xff08;沿着我的早期文章中的Star Assault进行介绍&#xff09;&#xff0c;但是我一直在使用和学习Kotlin&#xff0c;而不是Java。 对于本教程&#xff0c;该项目应处于上一篇文章…

Python 基础 - 4.3 random模块

程序中有很多地方需要用到随机字符&#xff0c;比如登录网站的随机验证码&#xff0c;通过random模块可以很容易生成随机字符串 >>> random.randomrange(1,10) #返回1-10之间的一个随机数&#xff0c;不包括10 >>> random.randomint(1,10) #返回1-10之间的一…