Java EE MVC是为Java EE 8规划并在JSR-371中指定的基于动作的新MVC框架。 这是我的Java EE 8 MVC教程的第二篇文章。 第一篇文章介绍了基础知识,并展示了如何开始使用 Java EE 8 MVC参考实现Ozark 。

在本文中,我们将更详细地介绍MVC控制器。

MVC控制器

控制器负责处理传入的请求。 它调用业务逻辑,更新模型并返回应呈现的视图。 MVC控制器是用@Controller注释的JAX-RS资源方法。 如果使用@Controller注释类,则该类的所有资源方法都将被视为控制器。

以下示例显示了一个简单的Controller,该Controller呈现给定产品ID的产品详细信息页面:

@Path("product")
@Controller
public class ProductController {@Injectprivate Models models;@Injectprivate ProductService productService;@GETpublic String getProductDetailPage(@QueryParam("id") long productId) {Product product = this.productService.getProduct(productId);models.put("product", product);return "/WEB-INF/jsp/productDetailPage.jsp";}
}

该控制器使用ProductService解析产品ID(作为ID请求参数传递给产品)。 将获得的产品添加到模型中,并返回视图的路径。 然后使用存储在模型中的信息渲染视图。

像JAX-RS中一样,@Path批注用于定义URL路径。 可通过如下所示的URL访问此控制器:

/<application-path>/product?id=42

下面的示例显示了一个混合类,具有一个MVC控制器方法和一个传统的JAX-RS资源方法:

@Path("hybrid")
public class HybridController {@GET@Path("jaxrs")public Response jaxrs() {return Response.status(200).build();}@Path("mvc")@GET@Controllerpublic String mvc() {return "/WEB-INF/jsp/hello.jsp";}
}

控制器方法的工作方式与JAX-RS资源方法非常相似。 但是,有两个小区别:

  • Controller方法上String的返回类型被解释为视图路径。 使用JAX-RS资源方法,返回的String被解释为文本内容。
  • Controller方法的默认响应媒体类型是text / html。 像在JAX-RS中一样,可以使用@Produces批注来更改媒体类型。

MVC Controller类和具有MVC Controller方法的混合类需要是CDI管理的bean。 像JAX-RS资源类一样,每个请求都实例化MVC控制器类。 对于每个请求,都会创建一个新的Controller类实例。

像在JAX-RS中一样,受支持的HTTP动词由注释定义。 如果控制器方法应侦听HTTP POST请求,则需要使用@POST而不是@Get进行注释。

例如:

@Controller
@Path("http")
public class PostController {@POST@Path("post")public String post() {return "/WEB-INF/jsp/hello.jsp";}
}

控制器返回类型

MVC控制器方法支持四种不同的返回类型:

  • 字符串–返回的字符串值被解释为视图路径。
  • void –在这种情况下,需要使用@View批注定义视图
  • 可视的–一种抽象,包括有关视图,模型和使用的视图引擎的信息。
  • 响应– JAX-RS响应。 响应的实体类型必须为String,void或Viewable。

下列类使用不同的返回类型定义了四种控制器方法。 所有方法都返回相同的响应:

@Controller
@Path("return-types")
public class ReturnTypesController {@GET@View("/WEB-INF/jsp/hello.jsp")@Path("return-void")public void returnVoid() {}@GET@Path("return-string")public String returnString() {return "/WEB-INF/jsp/hello.jsp";}@GET@Path("return-string")public Viewable returnViewable() {return new Viewable("/WEB-INF/jsp/hello.jsp");}@GET@Path("return-response")public Response returnResponse() {return Response.status(Response.Status.OK).entity("/WEB-INF/jsp/hello.jsp").build();}
}

返回JAX-RS响应是最灵活的方法。 这样,可以使用JAX-RS响应构建器来修改HTTP状态代码,响应标头等。

如果将void用作返回类型,则需要使用@View批注定义视图。 @View可以应用于方法(如前面的示例)和类。 如果使用@View注释类,则该视图将应用于该类中的所有控制器方法。 类级别的@View批注可以由方法级别上的更特定的视图定义覆盖,如以下示例所示:

@Controller
@Path("views")
@View("/WEB-INF/jsp/foo.jsp")
public class ViewController {@GET@Path("first")public void first() {// renders foo.jsp}@GET@Path("second")@View("/WEB-INF/jsp/bar.jsp")public void second() {// renders bar.jsp}@GET@Path("third")public String third() {// renders baz.jspreturn "/WEB-INF/jsp/baz.jsp";}
}

摘要

@Controller批注可用于方法和类。 当在类上使用时,该类的所有方法均被视为控制器。 控制器方法调用业务逻辑并确定应呈现的视图。 具有Controller方法的类是CDI管理的Bean。 对于每个请求,将创建一个新的类实例。 传统的JAX-RS资源方法可以与同一类中的MVC Controller方法结合使用。

在有关Java EE 8 MVC的下一篇文章中,我们将介绍参数绑定和验证。

  • 您可以在GitHub上找到示例源代码。

翻译自: https://www.javacodegeeks.com/2015/10/java-ee-8-mvc-a-detailed-look-at-controllers.html

Java EE 8 MVC:控制器的详细介绍相关推荐

  1. java ee编译器_Java EE 8 MVC:控制器的详细介绍

    java ee编译器 Java EE MVC是为Java EE 8计划并在JSR-371中指定的基于动作的新MVC框架. 这是我的Java EE 8 MVC教程的第二篇文章. 第一篇文章介绍了基础知识 ...

  2. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

    转载自  Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 第1部分 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与 ...

  3. JAVA中JVM的重排序详细介绍(写得很明白)

    刚刚在研究volatile变量的时候,涉及到重排序的概念,于是发现了这篇很好的文章,写得很简短很明白.所以转载一下. 原文地址:JAVA中JVM的重排序详细介绍 原文贴出来: 重排序通常是编译器或运行 ...

  4. Java EE 8 MVC:使用查询参数

    在上一篇有关新Java EE MVC框架的文章中,我们详细介绍了Controllers . 在本篇和以下文章中,我们将看到如何在MVC控制器中访问各种类型的请求数据. Java EE MVC大量使用了 ...

  5. Java EE 8 MVC:Ozark入门

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

  6. Java EE 8 MVC:使用表单参数

    在前两篇文章中,我们了解了如何在即将到来的Java EE MVC框架中使用查询和路径参数 . 这篇文章重点介绍表单参数. 当您使用发布请求提交Web表单时,表单值将作为请求正文的一部分发送. 媒体类型 ...

  7. Java EE 8 MVC:全局异常处理

    在之前的先前文章中,我们了解了在Java EE MVC中访问请求信息(例如查询或路径参数 )的各种方法. 这篇文章显示了如何将全局异常处理应用于MVC应用程序. 假设我们有一个控制器方法可能抛出Ill ...

  8. Java EE 8 MVC:使用路径参数

    在上一篇文章中,我们看到了如何在Java EE MVC中使用查询参数 . 这篇文章继续与一个非常相似的主题:路径参数. 路径参数是请求路径的动态部分,可以使用@Path注释指定. 例如: @Contr ...

  9. Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例

    概要 这一章,我们对HashSet进行学习. 我们先对HashSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashSet.内容包括: 第1部分 HashSet介绍 第2部分 Has ...

最新文章

  1. JPA不同包下同类名查询出错
  2. 为SQL Server 2005启用对 4 GB 以上物理内存的支持
  3. js改变style样式和css样式
  4. 雅克比迭代法求方程组的解(Python实现)
  5. Q学习(Q learning) 强化学习
  6. 中国煤化工行业运行现状与前景规划动向预测报告2022-2028年
  7. 算法与数据结构(六):堆排序
  8. Java CyclicBarrier介绍
  9. js中使用HTML模板字符串
  10. mysql注入转义绕过_SQL注入防御绕过
  11. ps2键盘测试软件,PS2键盘51测试程序1
  12. 英特尔cpu天梯图排名(附台式机CPU天梯图2022年3月份最新版精简图)
  13. u8、u16、u32、s8、s16、s32、Size_t是什么类型?
  14. 我只是个普通大学生,想进BAT究竟有多难?
  15. (转)Linux——pv、vg和lv的概念
  16. 解决IE浏览器低版本兼容性问题的最快方法
  17. Win 2003 IE 增强的安全配置应该如何关闭
  18. poi word转html 根号,#根号分治,树上倍增#洛谷 3591 [POI2015]ODW
  19. Python 高德地图经纬度与地址相互解析
  20. 天猫登录 post java_天猫登录POST问题

热门文章

  1. Jodd - Java界的瑞士军刀轻量级工具包
  2. 《白鹿原》金句摘抄(六)
  3. ssh(Spring+Spring mvc+hibernate)——EmpController
  4. 2017蓝桥杯省赛---java---A---1(迷宫)
  5. 向上类型转换VS向下类型转换
  6. 如何显示服务器控件,Panel Web 服务器控件概述
  7. os引导程序boot 在根目录区寻找os加载程序文件loader 对应的根目录条目
  8. 一文理清RocketMQ顺序消费、重复消费、消息丢失问题
  9. jcmd_jcmd,大约JDK 11
  10. java ldap操作实例_Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法...