GVKun编程网logo

Web应用程序的开发步骤(web应用程序的开发步骤包括)

8

在本文中,我们将详细介绍Web应用程序的开发步骤的各个方面,并为您提供关于web应用程序的开发步骤包括的相关解答,同时,我们也将为您带来关于2019测试指南-web应用程序安全测试(二)指纹Web应用

在本文中,我们将详细介绍Web应用程序的开发步骤的各个方面,并为您提供关于web应用程序的开发步骤包括的相关解答,同时,我们也将为您带来关于2019测试指南-web应用程序安全测试(二)指纹Web应用程序、angular – 共享混合移动应用程序和桌面Web应用程序的代码、java – 用于演示Web应用程序的Slim应用程序服务器?、javascript – 从Qt应用程序转换为Web应用程序的建议的有用知识。

本文目录一览:

Web应用程序的开发步骤(web应用程序的开发步骤包括)

Web应用程序的开发步骤(web应用程序的开发步骤包括)

Web应用程序的开发步骤

研发

  如今已进入了web2.0高速发展的互联网时代,各种互联网的Web应用程序如雨后春笋般出现。那么作为一名Web开发人员,怎样去开发一款优秀的Web应用程序呢?这个问题没有一个简单的答案,甚至那些教育机构都未必能清楚的知道。所以,像大多数在这个领域里的web开发人员一样,我们只是通过去做,去实验才学会了这些。没有人告诉我们如何去做,我们从给自己做点什么东西开始,学会如何开发web应用程序是在这个过程中的一个副产品。这是学习任何语言的一个非常有效的方法。

  Web应用程序与网站之间的区别

  首先,我要说明,开发一个web应用程序跟开发一个网站是不一样的。虽然在总体上有很大相似之处,但开发它们所需要的时间有巨大的差别。那究竟web应用程序和网站有什么不同呢?通常,维基百科能帮助我们解释这个问题,让我们来看看维基百科是如何定义应用软件的:

  应用软件,通常也被称作应用,指的是专门为帮助用户去执行一个或多个相关特定任务而设计的计算机软件。企业软件,会计软件,办公套件,绘图软件,媒体播放器等都属于这种软件。

  跟应用软件相对照的是系统软件和中间件,它们管理计算机效能,管理如何跟计算机集成,但通常这些工作并不会直接反映到使用户受益的任务执行上。举个例子,一个不是很恰当的实体类比,应用软件跟系统软件之间的关系就好比一个电灯泡和一个发电厂之间的关系,发电厂(系统软件)只是产生电能,它自己没有任何真正的用途,除非利用一个电灯泡这样的应用工具才能为用户提供服务。

  Web应用程序的开发过程

  现在特征已经弄清楚了,我们就可以开始定义开发一个web应用程序的整个过程了。当然,这依赖于工程的大小,过程中的某些步骤可能很小,在你的脑海里就能完成这种工作,但把事情整个的了解一下总是有好处的。同时还有一点很重要的你要明白,这篇文章并不会对每个步骤进行深层次的描述。

  步骤一:分析

  开发一个web应用的第一步是分析你的需求。你此时应该定义出一个尽量周全的你的应用应该提供的功能清单。如果是你为一个客户做这些工作,你需要明白他们想要什么(要确保你们对方都知道对方在说些什么)。从你们的讨论中,你能总结出需求和软件规格。你即使是为自己开发,我也建议你把希望这个web应用能够做的功能写下来。

  步骤二:设计

  一旦你弄清楚了这个web应用需要做哪些事情,你就可以开始设计了。这个步骤通常会反反复复进行很多次,每一次都把设计细化一些。你第一要做的是画出页面流程图(画在纸上,或使用软件工具,凭各自所好吧。我喜欢用纸,这样我可以做更快速的改变)。页面流程图通常是很抽象的黑白绘画,画出你将要实现的web应用的样子(你可以加一些色彩,但尽量保持简单)。

开发

  这个步骤能够让你知道你的应用最终会是个什么样子。跟37signals倡导的相反,我建议使用一些词语描述,适度细化。当我想到一个很好的想法时,或想到事情该如何做时,我会把它标注到纸上(例如,当点击这个按钮时应该使另外一个元素改变或隐藏,我会把这写在流程图上)。

  当你对做出的草图满意后,你可以开始制作实体模型了。
实体模型仍然是些图案,但有色彩和细节。最终的实体模型看起来应该像你将要实现的web应用的一个截屏图。如果你为一个客户开发,他会看看这些东西,并给你他的认可。然而,很多人都喜欢跳过这一步(大多数都是非设计人员),他们喜欢直接奔向网页原型。

  原型是用HTML开发出来,使用CSS渲染(有时也是有。这一步非常的重要,因为这里所有的东西都能用于你最终的应用中。如果允许的话,在你的原型上做一些可用性测试,从长期的效果来看,这能使你避免大量的失误。

  在这个步骤的最后,你基本上就知道了你的web应用是如何组织到一起的了。登录页面有些什么,用户如何从主页转向到各个页面。

  步骤三:实现 选择一个框架

  现在我们已经知道了要去开发什么东西,那就要把它做出来。这一部分的工作很多,你大部分的时间都要花在这个上面。你第一个要做的决定是如何着手,采用什么样的技术,什么框架。你有很多选择的余地,你需要选出一个适合你的。下面是一个最常用的框架的列表:

  • ASP.NET
  • PHP 上的任何一个流程的框架
  • Python with Django
  • Ruby on Rails

  没有一个明确的标准说哪个框架最好。它们都各有不同,每个都有自己的长处。最重要的是你要知道它们任何一个都能让你开发出好用的web应用。

  开发

  一旦你知道了如何去开发,那就要甩开臂膀开干了。这个开发工作可以看作有很多块,但说到底,这都是标准的编程活动了。在后台,你要创建类,对象,服务,过程,以及持久层来把这些对象保存到数据库中。后台是整个应用的核心,对任何应用来说,它跟普通的编程没有什么区别。接着是前台的开发,你现在编写的代码才是真正给用户使用的操作界面。你把后台的程序和原型界面集成到一起,把系统各部分集成到一起。你还可以把你在开发过程中想到的一些很炫的小功能用JavaScript实现。

  再说一次,有很多种途径可以实现后台程序。建议你去读一读跟你选择的框架相关的资料,弄清楚如何实现这一部分的工作。通常,这些知识会跟面向对象编程有关,但有些框架正在慢慢的向领域驱动设计发展。

  步骤四:打磨抛光

  现在应用程序已经开发出来,各个独立的模块也集成到了一起。你需要通过测试来确保你在步骤一中定义的需求和软件规格是否被实现(这个问题在你开发的整个过程中都要记在脑中)。你要确保那些愚蠢的用户不能通过试图做一些你还没有实现的操作而把你的应用弄坏(参考白盒和黑盒测试)。你同时还要确保你的程序能够在各种浏览器里(希望不是IE6)都能正确的运行。

  现在也是你做一些小的调整,改进你的应用程序给人的感觉的时候,让它趋于完美。

  步骤五:发布和后续工作

  这最后一步(但不是就此完结)是发布你的应用,让用户能够真正使用它(如果这个应用是个公众开发的应用,别忘了做新闻宣传)。如果你愿意,先发布一个Beta版,这样只有一小部分用户能够发现你的应用里的大问题(因为你的程序里肯定会有bug),他们会帮助你改进程序的质量。不要忙着增加功能,要专注于把你目前的程序变的稳固。

  当经过了beta阶段,你的程序已经变得十分的稳固,听取用户反馈的意见,自己试用一下自己的应用,你可以开始思考如何使应用变的更好。找出不和谐的地方,消除掉。以后每次的迭代都要经过上面所说的五个步骤,但就像我最初说的,你现在已经有了一个可以运行的应用程序,你很容易直接在心里完成这些步骤,直接奔向在代码里测试你的功能。

  恭喜,你已经自豪的成为一个web应用程序的作者了。

  英文原文:How to develop web applications

  中文翻译:晨露博客

2019测试指南-web应用程序安全测试(二)指纹Web应用程序

2019测试指南-web应用程序安全测试(二)指纹Web应用程序

在阳光下没有任何新东西,几乎每一个人们​​都可能想到开发的Web应用程序已经开发出来了。随着世界各地积极开发和部署的大量免费和开源软件项目,应用程序安全测试很可能面临完全或部分依赖于这些众所周知的应用程序的目标站点(例如Wordpress, phpBB,Mediawiki等)。了解正在测试的Web应用程序组件对测试过程有很大帮​​助,并且还将大大减少测试期间所需的工作量。这些众所周知的Web应用程序具有已知的HTML标头,cookie和目录结构,可以枚举这些标识符以识别应用程序。

 

测试目标

确定Web应用程序和版本,以确定已知漏洞以及在测试期间使用的相应漏洞。

 

如何测试

饼干

识别Web应用程序的一种相对可靠的方法是使用特定于应用程序的cookie。

请考虑以下HTTP请求:

GET / HTTP / 1.1 
用户代理:Mozilla / 5.0(Windows NT 6.2; WOW64; rv:31.0)Gecko / 20100101 Firefox / 31.0 
接受:text / html,application / xhtml + xml,application / xml; q = 0.9,* /*;q=0.8 
接受语言:en-US,en; q = 0.5 
''''''Cookie:wp-settings-time-1 = 1406093286; wp-settings-time-2 = 1405988284'''''' 
DNT:1 
连接:keep-alive 
主持人:blog.owasp.org

已自动设置cookie CAKEPHP,它提供有关正在使用的框架的信息。常见cookie名称列表显示在Cpmmon应用程序标识符部分中。但是,可以更改cookie的名称。

 

HTML源代码

此技术基于在HTML页面源代码中查找某些模式。通常,人们可以找到许多信息,这些信息可以帮助测试人员识别特定的Web应用程序。其中一个常见标记是直接导致应用程序泄露的HTML注释。更常见的是,可以找到某些特定于应用程序的路径,即指向特定于应用程序的css和/或js文件夹的链接。最后,特定的脚本变量也可能指向某个应用程序。

从下面的元标记中,可以轻松了解网站及其版本使用的应用程序。注释,特定路径和脚本变量都可以帮助攻击者快速确定应用程序的实例。

<meta name =“generator”content =“WordPress 3.9.2”/>

更频繁地,此类信息放在<head> </ head>标记之间,<meta>标记中或页面末尾。然而,建议检查整个文档,因为它可用于其他目的,例如检查其他有用的注释和隐藏字段。

特定文件和文件夹

除了从HTML源收集的信息之外,还有另一种方法可以极大地帮助攻击者高精度地确定应用程序。每个应用程序在服务器上都有自己的特定文件和文件夹结构。有人指出,人们可以从HTML页面源看到特定的路径,但有时它们没有明确地显示在那里,仍然驻留在服务器上。

为了揭示它们,使用了称为dirbusting的技术。Dirbusting强制目标具有可预测的文件夹和文件名,并监视HTTP响应以计算服务器内容。此信息既可用于查找默认文件,也可用于攻击它们,也可用于对Web应用程序进行指纹识别。Dirbusting可以通过多种方式完成,下面的示例显示了借助于Burp Suite的已定义列表和入侵者功能,对WordPress驱动的目标进行了成功的dirbusting攻击。

Wordpress dirbusting.png

我们可以看到,对于一些特定于WordPress的文件夹(例如,/ wp-includes /,/ wp-admin /和/ wp-content /),HTTP响应是403(禁止),302(找到,重定向到wp-login .php)和200(OK)。这是一个很好的指标,目标是WordPress驱动的。同样可以dirbust不同的应用程序插件文件夹及其版本。在下面的屏幕截图中,可以看到Drupal插件的典型CHANGELOG文件,该文件提供有关正在使用的应用程序的信息,并公开了易受攻击的插件版本。

Drupal botcha disclosure.png

提示:在开始dirbusting之前,建议先检查robots.txt文件。有时也可以在那里找到特定于应用程序的文件夹和其他敏感信息。下面的屏幕截图显示了此类robots.txt文件的示例。

机器人-INFO-disclosure.png

每个特定应用程序的特定文件和文件夹都不同。建议在渗透测试期间安装相应的应用程序,以便更好地了解所呈现的基础结构以及服务器上可能留下的文件。但是,已经存在几个好的文件列表,一个很好的例子是可预测文件/文件夹的FuzzDB单词列表(http://code.google.com/p/fuzzdb/)。

通用应用程序标识符

饼干

亚历克 phpbb3_
WordPress的 WP-设置
1C-的Bitrix BITRIX_
AMPcms AMP
Django CMS Django的
DotNetNuke的 DotNetNukeAnonymous
E107 e107_tz
EPiServer EPiTrace,EPiServer
涂鸦CMS graffitibot
Hotaru CMS hotaru_mobile
ImpressCMS ICMSession
编号Indico MAKACSESSION
InstantCMS InstantCMS [LOGDATE]
Kentico CMS CMSPreferredCulture
镆铘 SN4 [12symb]
TYPO3 fe_typo_user
Dynamicweb Dynamicweb
轻子 LEP [some_numeric_value] +的sessionid
维克斯 域名= .wix.com
VIVVO VivvoSessionId

 

HTML源代码

应用 关键词
WordPress的 <meta name =“generator”content =“WordPress 3.9.2”/>
亚历克 <body id =“phpbb”
Mediawiki的 <meta name =“generator”content =“MediaWiki 1.21.9”/>
的Joomla <meta name =“generator”content =“Joomla! - 开源内容管理”/>
Drupal的 <meta name =“Generator”content =“Drupal 7(http://drupal.org)”/>
DotNetNuke的 DNN平台 - http://www.dnnsoftware.com

更多信息https://www.owasp.org/index.php/Web-metadata

工具

下面列出了一般和众所周知的工具。还有许多其他实用程序,以及基于框架的指纹识别工具。

 

WhatWeb

网站:http : //www.morningstarsecurity.com/research/whatweb
目前市场上最好的指纹识别工具之一。包含在默认的Kali Linux版本中。语言:用于指纹识别的Ruby匹配用于:

  • 文本字符串(区分大小写)
  • 常用表达
  • Google Hack数据库查询(有限的关键字集)
  • MD5哈希
  • URL识别
  • HTML标记模式
  • 用于被动和激进操作的自定义ruby代码


示例输出显示在下面的屏幕截图中:

Whatweb-sample.png

 

BlindElephant

网站:https ://community.qualys.com/community/blindelephant
这个伟大的工具基于静态文件校验和的版本差异原则,从而提供非常高质量的指纹识别。语言:Python

成功指纹的示例输出:

pentester $ python BlindElephant.py http:// my_target drupal 
Loaded /Library/Python/2.7/site-packages/blindelephant/dbs/drupal.pkl包含145个版本,478个区分路径和434个版本组。
在http:// my_target 

点击drupal版本启动BlindElephant指纹点击http://my_target/CHANGELOG.txt 
文件产生不匹配。错误:检索到的文件与已知指纹不匹配。527b085a3717bd691d47713dff74acf4 

点击http://my_target/INSTALL.txt 
文件无法匹配。错误:检索到的文件与已知指纹不匹配。14dfc133e4101be6f0ef5c64566da4a4 

点击http://my_target/misc/drupal.js 
基于结果的可能版本

:7.12,7.13,7.14点击http://my_target/MAINTAINERS.txt
文件产生不匹配。错误:检索到的文件与已知指纹不匹配。36b740941a19912f3fdbfcca7caa08ca 

点击http://my_target/themes/garland/style.css 
基于结果的可能版本:7.2,7.3,7.4,7.5,7.6,7.7,7.8,7.9,7.10,7.11,7.12,7.13,7.14 

... 

指纹识别结果:
7.14 


最佳猜测:7.14

 

Wappalyzer

网站:http: 
//wappalyzer.com Wapplyzer是一款Firefox Chrome插件。它仅适用于正则表达式匹配,除了要在浏览器上加载的页面之外不需要任何其他内容。它完全在浏览器级别工作,并以图标的形式给出结果。虽然有时会出现误报,但在浏览页面后立即使用哪些技术构建目标网站的概念非常方便。


插件的示例输出显示在下面的屏幕截图中。

OWASP-wappalyzer.png

 

参考

白皮书

  • Saumil Shah:“HTTP指纹识别简介” - http://www.net-square.com/httprint_paper.html
  • Anant Shrivastava:“Web应用程序指纹” - http://anantshri.info/articles/web_app_finger_printing.html

 

整治

一般建议是使用上述几种工具并检查日志,以更好地了解攻击者确切地帮助披露Web框架的内容。通过在更改隐藏框架轨道后执行多次扫描,可以实现更高级别的安全性并确保自动扫描无法检测到框架。以下是框架标记位置和一些其他有趣方法的一些具体建议。

 

HTTP标头

检查配置并禁用或混淆所有披露技术使用信息的HTTP标头。这是一篇关于使用Netscaler进行HTTP-header混淆的有趣文章:http: //grahamhosking.blogspot.ru/2013/07/obfuscating-http-header-using-netscaler.html

 

饼干

建议通过更改相应的配置文件来更改cookie名称。

 

HTML源代码

手动检查HTML代码的内容并删除明确指向框架的所有内容。

一般准则:

  • 确保没有透露框架的可视标记
  • 删除任何不必要的评论(版权,错误信息,特定框架评论)
  • 删除META和发电机标签
  • 使用公司自己的css或js文件,不要将它们存储在特定于框架的文件夹中
  • 如果必须使用默认脚本,请不要在页面上使用默认脚本或对其进行模糊处理。

 

特定文件和文件夹

一般准则:

  • 删除服务器上任何不必要或未使用的文件。这意味着文本文件也公开了有关版本和安装的信息。
  • 限制对其他文件的访问,以便在从外部访问时实现404响应。这可以通过修改htaccess文件并在那里添加RewriteCond或RewriteRule来完成。下面介绍两个常见WordPress文件夹的此类限制的示例。
RewriteCond%{REQUEST_URI} /wp-login\.php$ [OR] 
RewriteCond%{REQUEST_URI} / wp-admin / $ 
RewriteRule $ / http:// your_website [R = 404,L]


但是,这些并不是限制访问的唯一方法。为了使该过程自动化,存在某些特定于框架的插件。WordPress的一个例子是StealthLogin(http://wordpress.org/plugins/stealth-login-page)。

 

其他方法

一般准则:

  • 校验和管理这种方法的目的是击败基于校验和的扫描仪,而不是让它们通过哈希来公开文件。通常,校验和管理有两种方法:
    • 更改这些文件的放置位置(即将它们移动到另一个文件夹,或重命名现有文件夹)
    • 修改内容 - 即使稍微修改也会产生完全不同的哈希值,因此在文件末尾添加单个字节不应该是一个大问题。
  • 控制混乱

    一个有趣而有效的方法,涉及从其他框架添加虚假文件和文件夹,以欺骗扫描仪和混淆攻击者。但要小心不要覆盖现有的文件和文件夹,并打破当前的框架!

angular – 共享混合移动应用程序和桌面Web应用程序的代码

angular – 共享混合移动应用程序和桌面Web应用程序的代码

我想构建一个全新的应用程序,应该作为混合移动应用程序和桌面Web应用程序进行部署.

大多数情况下,两个应用程序的逻辑和用户界面非常相似.
除了一些差异:

>移动设备的屏幕尺寸优化(例如,移动设备中隐藏的侧面菜
>移动中的触摸手势(3DTouch)与桌面中的悬停功能
>触摸移动设备中某些元素的反馈
>移动中的页面导航与桌面中的路由导航

我想过将angular-material组件用于桌面,将Ionic组件和移动导航用于两者都建立在角度之上.

当然,我的目标是尽可能多地共享代码,逻辑以及UI容器组件.

因此,我尝试在为桌面UI,移动UI,共享UI和逻辑创建单独的Angular模块时考虑构建项目的好方法:

一种选择是为两个应用程序提供一个核心模块,导入逻辑和共享UI模块.然后在为每个平台构建时在特定平台UI模块之间切换.在此选项中,特定于平台的UI组件将具有相同的选择器和@Inputs,但在其呈现的UI中会有所不同.

第二个选项是为每个将导入逻辑模块和共享UI组件模块的平台应用程序提供单独的核心模块.

也许有人有这样做的经验,可以分享他对涵盖所有这些的最佳项目结构的看法?

或者我建议哪个项目结构更好?

解决方法

根据我的经验,有效的是以下内容

>使用单独的文件结构创建2个单独的“前端”项目
在单独的目录中,使用特定的“命令行工具”
框架(Angular CLI,Ionic CLI,NativeScript CLI).
>创建一个包含要共享的公共模块的公共项目
通过’前端’项目
>从代码库导入共享模块到’前端
结束’项目(例如在名为’shared’的目录下) – 确保
您将前端项目与相同的通用版本保持一致
‘共享’项目

真正的技巧是设置“共享”模块的边界,以便在不增加代码复杂性的情况下最大化重用(例如,通过在’共享’代码中检查环境 – 我避免使用环境变量来定义是否代码以Ionic或Angular运行,并根据该变量做出决定.

对我来说,经验法则是“前端”项目定义所有组件(即组件不共享).

组件具有非常浅的逻辑,通常类似于以下内容

>他们在构造函数中定义他们使用的服务
>在ngOnInit()方法中,他们订阅了Observables
服务方法返回的兴趣 – 订阅逻辑
填充包含视图中显示的数据的变量
>在ngOnDestroy()中,他们取消订阅订阅
>组件定义管理前端事件的方法 – 例如
方法通常在共享服务上调用方法

编码时会出现正确的设计.我的意思是,一旦你建立了基本结构(即’前端’项目和’共享’项目),你开始编码一个前端(例如浏览器的Angular).一些决策很容易采取(例如,查询后端的所有逻辑通常都是共享的).其他一些决定更棘手,而且越接近前端表面的逻辑越真实.一旦你看到组件中的逻辑变得越来越厚,那么你就开始想知道是否有值得分享的东西,因为对于另一个’前端’也许是常见的(让我们说Ionic).如果是这种情况,那么您重构,将代码移动到“共享”服务.

还要记住通过测试充分保护“共享”服务.

我希望它有所帮助

java – 用于演示Web应用程序的Slim应用程序服务器?

java – 用于演示Web应用程序的Slim应用程序服务器?

我有一个小宠物网络应用程序项目我想向那些自己没有应用程序服务器的人(以及谁对应用程序服务器没有任何线索).

使用零配置运行WAR文件的最简单,最快捷的方法是什么,最好是我可以随WAR文件一起发送或捆绑的文件?例如,Jetty是否有精简版?别的什么?

解决方法

您可以轻松自己创建精简版本.

http://docs.codehaus.org/display/JETTY/Embedding+Jetty

http://jetty.mortbay.org/xref/org/mortbay/jetty/example/LikeJettyXml.html

要运行嵌入式Jetty,您只需要在类路径上使用以下jar:

* servlet-api-2.5-6.x.jar
* jetty-util-6.x.jar
* jetty-6.x.jar


/usr/local/jetty-6.1.4/lib> ls -la servlet-api-2.5-6.1.4.jar jetty-*
-rw-rw-r--  1 wwwrun admin 476213 2007-06-15 08:42 jetty-6.1.4.jar
-rw-rw-r--  1 wwwrun admin 128026 2007-06-15 08:40 jetty-util-6.1.4.jar
-rw-rw-r--  1 wwwrun admin 131977 2007-06-15 08:40 servlet-api-2.5-6.1.4.jar

很轻…

或者,Maven plugin也可以使用.

javascript – 从Qt应用程序转换为Web应用程序的建议

javascript – 从Qt应用程序转换为Web应用程序的建议

我目前有一个基于Qt的GUI应用程序,它只提供一个图形仪表板(语言,图形等),通过TCP连接显示另一个应用程序提供的实时数据.出于体系结构和安全原因,我被告知不再允许我的TCP连接,并且HTTPS websocket将是我唯一的管道.有人建议我使用 HTML5和 Javascript将我的应用程序转换为webapp.但是,我不是网络程序员,但可能会认为这是学习新技术的机会.在做出决定之前,我想更好地了解景观.所以,我认为我的选择是:

>将我的应用程序转换为Web应用程序,为我提供基于Web的应用程序的所有优点/缺点.对我来说更多的工作,因为这是一项新技术,我已经有了Qt / TCP版本正常工作.如果这是建议的方法,那么对于开发环境/工具的任何建议都将受到赞赏.
>将我当前的Qt应用程序转换为客户端HTTPS连接而不是TCP连接.不确定这是可能的.从我读过的内容来看,QtWebKit可能无法做到这一点.好像很奇怪?

也许我还没有考虑另一种选择?

解决方法

您也可以使用WT库使用混合方法.这是基于(和QT启发)的.
它有一个很好的工具包,并支持websockets.

http://www.webtoolkit.eu/wt/examples/

关于Web应用程序的开发步骤web应用程序的开发步骤包括的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于2019测试指南-web应用程序安全测试(二)指纹Web应用程序、angular – 共享混合移动应用程序和桌面Web应用程序的代码、java – 用于演示Web应用程序的Slim应用程序服务器?、javascript – 从Qt应用程序转换为Web应用程序的建议的相关信息,请在本站寻找。

本文标签: