war3必须安装的游戏组件_在单独的WAR组件中对SPA资源和API实现进行分区

war3必须安装的游戏组件

单页应用程序正Swift吸引人们的注意力,以实现基于Web的丰富,健壮和移动友好的应用程序。 从本质上讲,这需要更改应用程序体系结构,在该体系结构中,整个应用程序用户界面都是使用JavaScript来实现的,而服务器端代码则为服务器端应用程序逻辑和数据访问提供了基于RESTful,基于JSON的API。 该模型如下所示:

例子1

单独的客户端和服务器端部署组件的案例

这种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动态行为)

这是此拓扑的图片:

例子2

怎么样?

由于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层实现可重用服务的可用性。

  • 代码项目

参考: Keyhole Software博客上的JAR合作伙伴 David Pitt 将SPA资源和API实现划分为单独的WAR组件 。

翻译自: https://www.javacodegeeks.com/2014/02/partitioning-spa-resources-and-api-implementations-in-separate-war-components.html

war3必须安装的游戏组件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab 矩阵jocobi迭代_高校MATLAB被禁用,掀起中国本土软件脆弱的冰山一角

近日哈工大、哈工程高校被美国禁止用正版的MATLAB软件&#xff0c;此消息一出可谓使得全体用过MATLAB的工作者为之震撼。因为少了这款软件&#xff0c;无异于缺失了有力的左膀右臂&#xff0c;如何才能游刃有余地遨游在科研和工作领域呢&#xff1f;然而对于外行人却不知道这款…

controll层跳转页面_java web开发中的各种层

java后端开发前&#xff0c;还是应该将各种层划分好&#xff0c;知道各自的作用&#xff0c;今天做一下总结。Dao层、Entity层、Service层、Controller层、view层1、Dao层(持久层、数据访问层)功能&#xff1a;只负责与数据库的数据进行交互&#xff0c;dao层是在Mybatis框架下…

图像的灰度级数越多越好_MATLAB-数字图像处理 图像直方图归一化

图像直方图归一化图像直方图概念&#xff1a;图像直方图是反映一个图像像素分布的统计表&#xff0c;其实横坐标代表了图像像素的种类&#xff0c;可以是灰度的&#xff0c;也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。图像是由像…

JDK 13:什么是AggressiveOpts?

JVM 11中已弃用Java VM标志-XX:AggressiveOpts [请参见JDK-8199777和JDK-8199778 ]“因为其行为是不明确的。” JDK-8199778的“问题”部分进一步说明了&#xff08;我添加了重点 &#xff09;&#xff1a; AggressiveOpts已被用作实现各种实验性能功能的包罗万象的方法&#…

擦地机器人修理_自带眼睛还有嘴,喷水式擦地机器人效果实测

小时候家里大扫除时&#xff0c;我最喜欢抢着扫把扫地&#xff0c;因为扫地相对比较轻松&#xff0c;快速扫完灰尘和垃圾就能跑出去玩。而擦地板相比扫地就麻烦多了&#xff0c;大面积的地板需要蹲下来一块一块擦&#xff0c;还要来回清洗擦布&#xff0c;现在父母年龄大了&…

pv实现前趋图_Excel 数据透视图实现简易交互式数据面板

美国Ebay公司成立于1995年的圣何塞&#xff0c;是一家可让全球民众上网买卖物品的线上拍卖及购物网站。本文将结合Ebay&#xff08;某类体育用品的&#xff09;在线拍卖数据&#xff0c;主要使用Excel数据透视表为工具&#xff0c;来实现简易的交互式数据面板以求对数据进行可视…

input不可编辑属性_谁不喜欢图文并茂呢:基于多模态信息的属性抽取

0. 前言最近做属性抽取&#xff0c;并且基于多模态信息&#xff08;文本图片&#xff09;那种&#xff0c;然后发现了一个比较经典的论文“Multimodal Attribute Extraction”。正好就顺着这个论文的思路&#xff0c;捋一下这个任务&#xff0c;复现一下&#xff0c;再记录一下…

HDMI高清光端机产品介绍

HDMI高清光端机对视频音频发布等起到传输作用&#xff0c;HDMI光端机由发送器和接收器组成&#xff0c;能通过单根光纤把计算机主机的音频&#xff0c;视频&#xff0c;USB延长到远端&#xff0c;用户可以在远端实时收听到电脑主机的图像和声音&#xff0c;并使用电脑控制。接下…

全局变量求平均分最高分最低分_想去江苏读大学,2021届山东考生需要多少分?...

点击链接查看详情&#xff1a;https://mp.weixin.qq.com/s/A1-e97_D4jbC_BRJtPIN2A​mp.weixin.qq.com江苏省2020年在山东普通批次本科招生66所院校。1027个专业&#xff1b;共4310人&#xff0c;最低分南通理工学院的船舶与海洋工程专业&#xff0c;464分&#xff0c;位次2437…

Thymeleaf的Spring数据

介绍 今天&#xff0c;我将讨论更具体的问题。 这次没有设计模式或算法&#xff1a;-)。 我们并不总是从头开始设计软件组件。 通常&#xff0c;我们必须尝试使现有软件组件协同工作。 Spring Boot是Java世界上最好的免费软件之一。 它解决了Spring的许多配置问题。 它非常灵活…

如何有效维护PDH光端机的常见故障?

众所周知&#xff0c;在PDH光端机的使用过程中&#xff0c;出现的故障可分为永久性故障和间断性故障。而永久性故障是指反映告警一直保持&#xff1b;间断性故障则是指故障时有时无&#xff0c;有时还可自动恢复。但无论是哪种故障&#xff0c;都与传输网有着密不可分的关系。接…

转为字符数组_数组的20种常用的方法?

1.shift 删除数组中的第一个元素2.pop 删除数组中的最后一个元素3.unshift 增加元素在数组的前面4.push 增加元素在数组的后面5.map 循环&#xff0c;并且返回新的数组6.forEach 循环&#xff0c;遍历7.filter 过滤&#xff0c;筛选出数组中的满足条件的&#xff0c;并且返回新…

Profibus-DP光端机产品功能特点及技术参数详解

Profibus DP总线光端机&#xff0c;符合Profibus DP协议&#xff0c;采用大规模FPGA设计&#xff0c;采用独创技术&#xff0c;可同时支持1路Profibus-DP到光纤中继&#xff0c;通信速率0-12Mpbs。支持多种光纤网络拓扑结构&#xff1a;点对点通讯、链型网络、星型网络及冗余环…

jenkins编译java_在Window上使用Jenkins自动发布Java工件

jenkins编译java这篇文章将展示如何使用Jenkins Continuous Integration自动执行Java Web应用程序&#xff08;使用MYSQL DB和基于Hibernate ORM在基于REST的Jersey2 Spring环境中开发的学生申请应用程序&#xff09;的发布过程-上载发布工件到发布存储库。 如上一篇文章《在Wi…

工业级光纤收发器九大技术优势介绍

光纤收发器主要是通过光纤来进行传输的那些100M以太网或1000M以太网&#xff0c;不过也被大家称之为光纤交换机&#xff0c;简而言之&#xff0c;可以将我们要发送的电信号转换成光信号发送出去&#xff0c;同时将接收到的光信号转换成电信号&#xff0c;输入到我们的接收端&am…

TellDontAsk的扩展

五年多来&#xff0c;Martin Fowler在他著名的TellDontAsk文章中指出了面向对象编程中的最大问题之一。 在他的著作中&#xff0c;他提醒程序员&#xff0c;他们应该信任自己的对象来为他们执行工作&#xff0c;而不是要求对象提供以后可以使用的数据。 我非常同意这一点&…

网管型光纤收发器产品功能特性详解

飞畅科技生产的网管型光纤收发器机架&#xff0c;吸收了国内外同类产品的优点&#xff0c;产品更具灵活性和实用性。网管光纤收发器采用结构灵活的机架模块化设计&#xff0c;十六槽2U机箱、电源模块及标准的热插拔模块组成&#xff0c;机箱内置双容错电源及无源背板总线&#…

使用函数_使用TEXT函数生成中文大写金额

为满足《中华人民共和国票据法》中对中文大写金额的书写要求&#xff0c;可以使用TEXT函数将数字格式转换为中文大写金额。图中A列是小写的金额&#xff0c;需要在B列使用公式将其转换为中文大写金额。生成中文大写金额在B2单元格中输入以下公式&#xff0c;向下复制到B6单元格…

光端机各种类型的接口介绍

光端机的接口类型还是比较多的&#xff0c;常见的物理接口类型有BNC接口、光纤接口、RJ-45接口、RS-232接口、RJ-11接口。那么&#xff0c;你对这五种典型的物理接口类型是否有所了解呢&#xff1f;接下来就由飞畅科技的小编一起来详细了解下吧&#xff01; 光端机的典型物理接…

五金反引号

五种琴弦 从Java 1.0开始&#xff0c;我们就有了字符串文字"like this" 。 我们还想要其他什么字符串&#xff1f; 其他编程语言为我们提供&#xff1a; 表达式插值&#xff1a; s"I am ${age - 10} years old." 插值格式&#xff1a; f"Price: $pr…