日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2023/12/3 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java EE 8 MVC:控制器的详细介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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:控制器的详细介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。