war3必须安装的游戏组件_在单独的WAR组件中对SPA资源和API实现进行分区
war3必須安裝的游戲組件
單頁應用程序正Swift吸引人們的注意力,以實現基于Web的豐富,健壯和移動友好的應用程序。 從本質上講,這需要更改應用程序體系結構,在該體系結構中,整個應用程序用戶界面都是使用JavaScript來實現的,而服務器端代碼則為服務器端應用程序邏輯和數據訪問提供了基于RESTful,基于JSON的API。 該模型如下所示:
單獨的客戶端和服務器端部署組件的案例
這種SPA轉移為用戶帶來了體驗和性能上的好處,并提供了將用戶界面與服務器端邏輯完全分離的機會。 從代碼分區的角度來看,我們通過應用模型視圖控制器(MVC)模式將UI與應用程序邏輯分離。 從部署應用程序生命周期的角度來看,它們仍然是耦合的-也就是說,應用程序是在一個組件中與靜態客戶端元素和服務器端元素一起打包和部署的。
似乎自然的本能是將客戶端和服務器端元素都打包到單個JEE WAR組件中。 這可以使應用程序的生命周期更簡單,但是,應用程序的構建似乎自然地組織了使用UI的開發人員和使用服務器端API的開發人員,并且由于使用了兩種不同的開發語言,因此更為自然。 因此,將應用程序分為用于UI和服務器端API元素的單獨的可部署WAR,而不是一個WAR,可以帶來以下好處:
- API對于UI開發保持穩定(不是移動目標)
- UI控制何時引入服務器端API更改
- 支持UI和API層的并發開發人員路徑
- 可以測試對UI的更改并將其移至質量檢查和生產環境中,而無需重新測試API層
- 可以更改底層API實施/技術,而不會影響UI
- UI實現/技術可以更改而不會影響API
- 在運行時引入UI元素的機會(利用JavaScript動態行為)
這是此拓撲的圖片:
怎么樣?
由于UI是使用動態JavaScript實現的,因此不必使用JEE WAR組件來容納UI資源。 可以使用任何Web服務器,例如Apache或非常流行的Node.js服務器 。 但是,已經支持JEE的企業將獲得對WAR的生命周期支持,這為使用服務器端動態行為進行資源的初始加載,身份驗證以及以動態方式集成或中介事物打開了大門。
例如,代替使用index.html初始加載SPA,可以使用index.jsp將某些用戶/客戶端特定的邏輯應用于加載過程。
Servlet解決方案
支持SPA API /端點的一種解決方案是在靜態內容SPA WAR中實現Servlet,該Servlet將API URL路由重定向到端點所駐留的服務器。 這是通過在web.xml中定義一個servlet以及到服務器的API調用的映射來實現的。
這是一個示例web.xml配置,該配置處理以API開頭的URI:
<servlet><servlet-name>api</servlet-name><display-name>api</display-name><servlet-class>com.khs.spa.servlet.ApiServlet</servlet-class><init-param><param-name>redirect</param-name><param-value>localhost:8080/khs-command-ref</param-value></init-param></servlet><servlet-mapping><servlet-name>api</servlet-name><url-pattern>/api/*</url-pattern></servlet-mapping>Servlet將根據上面顯示的重定向初始化參數值中定義的URL重定向到API WAR。
重定向API HTTP GET / POST / PUT / DELETE請求的API Servlet實現如下所示:
package com.khs.spa.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ApiServlet extends HttpServlet {private static final long serialVersionUID = 4345668988238038540L;private String redirect = null;@Overridepublic void init() throws ServletException {super.init();// load redirect for servletredirect = getServletConfig().getInitParameter("redirect");if (redirect == null) {throw new RuntimeException("redirect value not set in servlet <init-param>");}}private void doService(HttpServletRequest request,HttpServletResponse response) throws RuntimeException, IOException {// you could do extra stuff here, i.e. logging etc...String path = request.getRequestURI().split(request.getContextPath())[1];String route = redirect + path;response.sendRedirect(route);}@Overrideprotected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doService(request, response);}@Overrideprotected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doService(request, response);}@Overrideprotected void doPut(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doService(request, response);}@Overrideprotected void doDelete(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doService(request, response);}@Overrideprotected long getLastModified(HttpServletRequest req) {return super.getLastModified(req);}@Overrideprotected void doHead(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {super.doHead(req, resp);}@Overrideprotected void doOptions(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {super.doOptions(req, resp);}@Overrideprotected void doTrace(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {super.doTrace(req, resp);} }注意事項
此方法假定無狀態API實現。 由于涉及重定向,因此如果API WAR基于會話,則除非采用某種聯合會話機制,否則它將不起作用。 身份驗證和授權機制可以在客戶端SPA UI-WAR和/或API層進行。 同樣,如果需要為SPA訪問多個API服務或企業系統,則仍可以在SPA UI-WAR中應用它們。
單頁應用程序不僅使我們能夠實現豐富/響應的用戶界面,而且還促進了對數據和應用程序邏輯的輕量級易用的寧靜API的使用。 用戶界面的這種物理運行時解耦使“廢棄”用戶界面的概念更加切合實際,并且可以通過API層實現可重用服務的可用性。
- 代碼項目
翻譯自: https://www.javacodegeeks.com/2014/02/partitioning-spa-resources-and-api-implementations-in-separate-war-components.html
war3必須安裝的游戲組件
總結
以上是生活随笔為你收集整理的war3必须安装的游戏组件_在单独的WAR组件中对SPA资源和API实现进行分区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有手机软件可以模拟dj打碟的吗推荐一下
- 下一篇: 避免在Cassandra中使用清单