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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EE Servlet 3:如何在Web应用程序中设置后端服务

發布時間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EE Servlet 3:如何在Web应用程序中设置后端服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Web應用程序中,提供用戶界面(UI)通常只是工作的一半。 許多應用程序都有后端服務支持的要求。 后端服務的一些示例是調度程序進程(批處理),偵聽隊列并在消息進入時作出響應,或者是簡單的事情,例如存儲供整個應用程序使用的信息。 這些全局數據通常需要在所有Servlet類(對于每個請求處理器)之間共享。 在這里,我將向您展示如何在基于Servlet的應用程序中以及在何處添加此類后端服務。

在開始之前,我想解釋一下Servlet應用程序如何存儲數據變量(畢竟所有后端服務只是Java對象)。 您可以在3個主要區域中添加和共享數據(我們有時將這些區域稱為不同的“空間”,“范圍”或“上下文”)。 您可能還會將每個區域都視為具有唯一鍵和數據值的哈希映射。

  • 應用程序范圍 –這是為您的Web應用程序實例分配的全局,應用程序范圍的存儲映射空間。 每個Web應用程序都有其獨特的空間。 即使將相同的WAR文件部署到域服務器中,它們每個都將獲得自己的空間。 您可以通過實現javax.servlet.ServletContextListener接口來獲取此空間。 此接口還具有兩個回調方法,當您的應用程序啟動(初始化)或關閉(銷毀)時將調用它們。 使用這些方法,您可以執行自己的一次性應用程序或服務設置和清理邏輯。 您可以使用ServletContext#setAttribute(key, value)方法存儲任何Java對象。 此存儲在外部不是持久性的,而僅在服務器內存中。 因此,添加的內容越多,所需的內存就越多(通常您只想保留對服務對象的引用,因此通常不會出現內存問題)。 這是您應該在其中創建后端服務并對其進行初始化,然后將實例添加到該空間中的位置,以便稍后可以檢索它。

    您還可以使用Singleton Pattern創建一個Application范圍的上下文區域,以將您自己的業務服務作為空間保存,但是如果需要在Web應用程序環境中對其進行初始化,則仍然需要ServletContextListener 。

  • 請求范圍 –這是單個HTTP請求過程存儲映射空間,僅針對特定請求或臨時退出。 該地圖空間也不是持久的。 您可以通過處理一種HTTP操作方法來訪問Servlet代碼中的該空間。 您將使用HttpServletRequest#setAttribute(key, value)方法添加數據。 通常,這些存儲的數據用于傳遞到VIEW處理層(例如JSP)以構造HTML輸出。 您已經看過我的一些預覽文章,該文章在Servlet組件中使用了該文章。

    還要注意,在處理請求的Servlet方法內部,您還將可以使用HttpServletRequest#getServletContext()#getAttribute(key)方法訪問上述“應用程序空間”方法。

  • 會話范圍 –這是一個特殊的空間,您可以在其中跟蹤特定的用戶與應用程序的交互,作為一系列的會話請求,或稱為用戶會話。 請記住,HTTP請求是無狀態的,因此,如果要存儲一些數據以在多個請求之間共享,則將需要此空間,但是對于每個客戶端瀏覽器用戶,它們應該是隔離的。 通常在應用程序中實現用戶登錄和資源限制時使用。 您可以使用Serlvet類中的HttpServletRequest#getSession(true)#setAttribute(key, value)方法添加到此空間。 每次針對該特定客戶端用戶, application服務器將自動為您返回相同的會話對象或空間。
  • 但是,處理用戶會話可能很棘手,因此您必須花時間并仔細設計應用程序,以實現需要的適當解決方案。 我將在未來寫一篇單獨的文章,介紹如何使用Session作用域,但是現在,我可以向您展示如何使用內部自定義服務初始化Web應用程序的示例。 您可以在我的servlet3-example中找到此代碼。

    package zemian.servlet3example.web;import javax.servlet.ServletContext; import zemian.servlet3example.service.Application; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import zemian.service.logging.Logger;@WebListener public class WebAppStartup implements ServletContextListener {private static final Logger LOGGER = new Logger(WebAppStartup.class);@Overridepublic void contextInitialized(ServletContextEvent event) {LOGGER.debug("WebApp is starting up.");Application app = Application.getInstance();app.init();// Store the app instances. event.getServletContext().setAttribute(Application.SERVLET_CONTEXT_KEY, app);LOGGER.info("WebApp initialized."); }@Overridepublic void contextDestroyed(ServletContextEvent event) {Application app = Application.getInstance();app.destroy();LOGGER.info("WebApp destroyed.");} }

    有了這個,我可以輕松地在Application類中添加任何自定義業務后端服務,然后讓任何Servlet代碼訪問它。 注意,我使用的是Servlet 3的@WebListener批注,因此不需要配置。 您只需將WAR應用程序打包在一起,它將被EE應用程序服務器檢測到!

    翻譯自: https://www.javacodegeeks.com/2015/01/ee-servlet-3-how-to-setup-backend-services-in-a-web-application.html

    總結

    以上是生活随笔為你收集整理的EE Servlet 3:如何在Web应用程序中设置后端服务的全部內容,希望文章能夠幫你解決所遇到的問題。

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