java ee编译器

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控制器类和具有MVC控制器方法的混合类需要是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编译器

java ee编译器_Java EE 8 MVC:控制器的详细介绍相关推荐

  1. java 初始化顺序_Java中对象初始化顺序的详细介绍

    前言 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.最近我发现了一个有趣的问题,这个问题的答案乍一看下骗过了我的眼睛.看一下这三个类: package com ...

  2. java compareto 中文_java中的compareto方法的详细介绍

    一.java中的compareto方法 1.返回参与比较的前后两个字符串的asc码的差值,如果两个字符串首字母不同,则该方法返回首字母的asc码的差值 String a1 = "a" ...

  3. Java EE 8 MVC:控制器的详细介绍

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

  4. 怎么用java ee编程_Java EE应用程序入门 - 编程入门网

    Java EE应用程序入门 时间:2011-07-06 netbeans.org 本文将详细介绍使用 EJB 3.0 技术开发企业应用程序的基础知识,而 EJB 3.0 是 Java EE 5 平台的 ...

  5. java输出set集合元素_java Set集合,HashSet类详细介绍

    下面要给大家介绍的就是java Set集合方面的内容,本文主要讲到了HashSet类的一些知识,主要包括了HashSet类的特点,HashSet 类的常用构造方法重载形式以及代码演示了创建两种不同形式 ...

  6. java的annotation_Java Annotation认知(包括框架图、详细介绍、示例说明)

    摘要 Java Annotation是JDK5.0引入的一种注释机制. 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annotation本来很简单的,结果说的人没说清楚 ...

  7. java intent bundle_Android 通过Intent使用Bundle传递对象详细介绍

    Android 通过Intent使用Bundle传递对象 Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法. 被传递的对象需要先实现序列化, ...

  8. java ee空指针_Java EE 7是最终版本。 思想,见解和进一步的指针。

    java ee空指针 我们花了不到三年的时间才推出了下一个Java EE版本 . 今年4月16日, JCP EC对JSR 342进行了投票并获得批准. 这是一个成功的故事,因为在去年八月下旬的最后时刻 ...

  9. java ee技术_Java EE 6与Spring Framework:技术决策过程

    java ee技术 在过去的几个月中,我们经历了这个决策过程:为Java平台上的企业开发选择哪种技术堆栈? 有多种选择. 但是,我们深入讨论的是:纯Java EE 6堆栈与带有Java EE的Spri ...

最新文章

  1. JavaScript中变量的相互引用
  2. u盘安装centos8黑屏_崩溃!电脑突然黑屏无法启动
  3. 清华大学第四届大数据开放日(Big Data Day)
  4. HDU OJ 5437 Alisha’s Party 2015online A
  5. php面向对象及tp框架初识,thinkphp面向对象的问题
  6. Drools 在告警关联分析中的应用
  7. 领域驱动设计理论基础
  8. GYM 101908F - Music Festival
  9. 如何在Ubuntu系统中使用github
  10. Java + OpenCV 实现图片人脸检测
  11. 大华条码秤开发之-快捷键传输
  12. OpenSSL之自签名证书认证
  13. linux nagios 监控,Nagios 监控 Linux 主机
  14. python爬取某音乐歌词,将内容保存制作词云图
  15. 如何使用计算机建模,计算机模拟在数学建模中的应用
  16. 我叫mt4最新服务器,我叫mt4新区开服表 最新新区开服时间汇总分享[多图]
  17. SQL Server数据库开发
  18. google浏览器设置为豆沙绿
  19. 记一次windowns7系统IE闪退恢复解决过程
  20. linux更改终端颜色_如何更改Linux终端的颜色

热门文章

  1. P5488-差分与前缀和【NTT,生成函数】
  2. P4068-[SDOI2016]数字配对【二分,费用流】
  3. jzoj6290-倾斜的线【计算几何,贪心】
  4. 洛谷P3371-【模板】单源最短路【SPFA】
  5. codeforces1493 D. GCD of an Array(数论)
  6. 2017上海金马五校赛 丢史蒂芬妮 博弈问题
  7. SpringCloud Greenwich(六)集成dubbo与openfeign的feignTargeter报错,cannot access its superinterface Targeter
  8. Java并发编程面试题(2020最新版)
  9. Java Web应用的代码分层最佳实践
  10. 【LSB】图片隐写主体函数