精华内容
下载资源
问答
  • 1 [单选题] 下列不属于动态网页格式的是(D)。 A. ASP B. JSP C. ASPX D. VBS 2 [单选题]相对比较早出现的服务器端动态网页技术是(B)。 A. ASP B. CGI C. JSP D. JavaScript 3 [单选题] PHP中采用的模板技术是...

    1 [单选题] 下列不属于动态网页格式的是(D)。
    A. ASP
    B. JSP
    C. ASPX
    D. VBS


    2 [单选题]相对比较早出现的服务器端动态网页技术是(B)。
    A. ASP
    B. CGI
    C. JSP
    D. JavaScript


    3 [单选题] PHP中采用的模板技术是(A)。
    A. Smarty
    B. Smart
    C. Templet
    D. Cache


    4 [单选题]下列技术中控制文档结构的是(A)。
    A. DOM
    B. CSS
    C. JavaScript
    D. XMLHttpRequest


    5 [单选题] 在Ajax的组成技术中, XMLHttpRequest的主要作用是(C)。
    A. 控制页面显示风格
    B. 控制文档结构
    C. 控制通信
    D. 控制其他的三个对象


    6 [单选题]下列语言中,不属于客户机端脚本语言的是(B)。
    A. JavaScript
    B. PHP
    C. VBSript
    D. ActionScript


    7 [单选题]下列构建Web网站的组合中,性价比最高的是(C)。
    A. JSP +IIS +Oracle
    B. ASP . NET+IIS+ Microsoft SQL Server
    C. PHP +Apache +MySQL
    D. PHP+IIS +Oracle


    8 [单选题]下列语言编写的代码中,在浏览器端执行的是(D)。
    A. Web页面中的c#代码
    B. Web页面中的Java代码
    C. Web页面中的PHP代码
    D. Web页面中的JavaScript代码


    9 [单选题] 在ASP . NET中采用Code Behind代码隐藏技术分离HTML显示代码和业务逻辑代码,在PHP中采用的技术是(A)。
    A. 模板技术
    B. 静态缓存技术
    C. PHP引擎技术
    D. 后台编译技术


    10 [单选题]下列关于静态网页和动态网页的描述中,错误的是(D)。
    A. 判断网页是静态还是动态的重要标志是看代码是否在服务器端运行
    B. 静态网页不依赖数据库
    C. 静态网页适合搜索引擎发现
    D. 动态网页不依赖数据库


    11 [单选题]下列关于ASP . NET的描述中,错误的是(D)。
    A. ASP.NET依赖于微软的.NET框架
    B. ASP . NET采用纯面向对象语言比采用脚本语言的执行效率高
    C. ASP . NET采用代码分离技术有利于开发协作
    D. ASP . NET和ASP都采用了JavaScript编程语言


    12 [单选题]关于微软的. NET框架的描述中,正确的是(A)。
    A. .NET框架提供了一个公共语言运行时环境,提供内存管理
    B. .NET框架中的服务框架提供内存管理
    C. .NET框架提供标准语言库,从而提供内存管理
    D. .NET框架提供Windows应用程序模板,从而提供内存管理

    展开全文
  • 四种常用动态网络技术

    千次阅读 2019-10-06 22:59:01
    CGI(Common Gateway Interface,公用网关接口)是较早用来建立动态网页技术。当客户端向Web服务器上指定的CGI程序发出请求时,Web服务器会启动一个新的进程执行某些CGI程序,程序执行后将结果以网页的形式再发送...

    1.CGI

    CGI(Common Gateway Interface,公用网关接口)是较早用来建立动态网页的技术。当客户端向Web服务器上指定的CGI程序发出请求时,Web服务器会启动一个新的进程执行某些CGI程序,程序执行后将结果以网页的形式再发送回客户端。
    CGI的优点是它可以用很多语言编写,如 C 、C++ 、VB和Perl语言。在语言的选择上有很大的灵活性。最常用的CGI开发语言为Perl。
    CGI的主要缺点是维护复杂,运行效率也比较低。这主要由以下几方法原因造成:

    • CGI程序以独立的进程运行,当多个用户要与服务器建立连接时,服务器需要为每个用户响应创建一个CGI程序进程。
    • CGI程序不是常驻内存的,因此,当频繁访问CGI程序时,会导致大量的磁盘I/O操作。
    • 编写访问数据库的程序比较复杂。
      (CGI在嵌入式web中应用:

      一、由于需要在网页中操作I/O口和舵机等硬件,所以要用到CGI(通用网关接口)技术,即在网页中调用位于服务器中的CGI程序,然后在CGI程序中调用具体的硬件操作。CGI在网页中通常是通过表单的action值调用的,如:

      <form action= "xxx.cgi " method=post>
      在表单提交时,就会执行xxx.cgi程序。
      二、 cgi程序执行完毕后通常会返回一新网页,但是有时候我们并不期望这么做,我们希望cgi只执行交给它的任务,并且保持调用它的原网页不变。CGI的输出形式是固定的,通常有三类,以不同的输出头标记:Content-type, Location, 和Status. 其中的Status有就可以实现我们要的效果:只执行规定的程序,其他不做任何变化。一个简单的Bourne Shell版的cgi程序如下:

      !/bin/sh

      do_something
      echo "Status: 204 No Response"
      echo
      exit 0
      三、有时候我们需要当javascript在满足一定条件时自动调用CGI程序,而不需要网页上的鼠标点击按钮,下面的程序就可以实现自动提交表单,从而触发CGI程序:


      2.PHP

      PHP(Personal Home Pages)是一种服务器端的嵌入HTML的脚本语言,可以 运行于多种平台。它借鉴C语言、Java语言和Perl语言的语法,同时具有自己独特的语法。
      由于PHP采用Open Source方式,它的源代码公开,使得它可以不断有新东西加入,形成庞大的函数库,以实现更多的功能。PHP几乎支持现在所有的数据库。
      PHP的缺点是没有像JSP和ASP那样对组件的支持,扩展性较差。

    3.JSP

    JSP(Java Server Pages)是基于Java的技术,用于创建可支持跨平台及跨Web服务器的动态网页。JSP与服务器端的脚本语言JavaScript不一样。JSP是在传统的静态页面中加入Java程序片段和JSP标记,构成JSP页面,然后再由服务器编译和执行。
    JSP主要的优点如下:

    • JSP支持绝大部分平台,包括Linux系统,Apache服务器也提供了对JSP的服务,使得JSP可以跨平台运行。
    • JSP支持组件技术,可以使用JavaBeans开发具有针对性的组件,然后添加到JSP中以增加其功能。
    • 作为Java开发平台的一部分,JSP具有Java的所有优点,这包括“一次编写,处处运行”。
      JSP的主要缺点是编写JSP程序时比较复杂,开发人员往往需要对Java及其相关的技术比较了解。

      4.ASP

    ASP(Active Server Pages)是微软公司提供的开发动态网页的技术,具有开发简单、功能强大等优点,ASP使生成Web动态内容及构造功能强大的Web应用程序的工作变得十分简单。例如,要收集表单中的数据时,只需要将一些简单的指令嵌入到HTML文件中,就可以从表单中收集数据并进行分析处理。对于ASP,还可以便捷地使用ActiveX组件来执行复杂的任务,比如连接数据库以检索和存储信息。
    对于有经验的程序开发人员,如果已经掌握了一门脚本语言,如VBScript、JavaScript或Perl,而且已经了解使用ASP的方法。只要安装了符合ActiveX脚本标准的相应引擎,就可以在ASP页中使用任何一种脚本语言。ASP自身带有VBScript和JavaScript两种脚本引擎。从软件的技术层面看,ASP有如下的特点:

    • 无需编译 ASP脚本嵌入到HTML当中,无需编译或链接即可直接解释执行。
    • 易于生成 使用常规文本编辑器(如Windows下的记事本)即可进行ASP页面的设计。
    • 独立于浏览器 用户端只要使用可解释常规HTML代码的浏览器,即可浏览ASP所设计的主页。ASP脚本是在站点服务器端执行的,用户端的浏览器不需要支持它。因此,不需要通过从服务器下载ASP页面。
    • 面向对象 在ASP脚本中可以方便地引用系统组件和ASP的内置组件,还能通过定制 ActiveX服务器组件来扩充功能。
    • 与任何ActiveX脚本语言兼容 除了可使用VBScript和JavaScript进行设计外,还可通过Plug-in的方式,使用由第三方所提供的其他脚本语言。
    • 源程序码不会外漏 ASP脚本在服务器上执行,传到用户浏览器的只是ASP执行结果所生成的常规HTML码,这样可保证编写出来的程序代码不会外漏。

    转载于:https://www.cnblogs.com/Coeus-P/p/8993763.html

    展开全文
  • 关注公众号:wingjay 第 17 篇 人和人的差距,是下班后的4小时拉开的。 ...读者朋友,你好,我是wingjay。...而目前来看,动态化领域的一大主流技术就是基于JavaScript与Native进行通信,借助...

    关注公众号:wingjay

    第 17 篇

    人和人的差距,是下班后的 4 小时拉开的。

     

     

     

    读者朋友,你好,我是 wingjay。

     

    之前的文章《2019年移动开发,我的求变之路》里,我提到动态化方向是 2019 年移动领域一个重要的方向,也是本公众号着重关注的技术点之一。而目前来看,动态化领域的一大主流技术就是基于 JavaScript 与 Native 进行通信,借助 Js 本身的动态性来实现业务逻辑与视图的动态化。而这背后,离不开一个强大的后盾:JavaScriptCore。

     

    熟悉 Java 或 Android 的读者都知道,Java 代码是运行在虚拟机(如JVM / Davilk)上的,而 JsCore 就相当于是 Js 的虚拟机。它正是这套动态化方案的核心所在。

     

    WebView 大家都清楚,它内部包含两大模块:WebCore 和 JsCore,前者用来解析渲染 Html 和 CSS,后者则是用来解析执行 Js 代码。而 RN 和 Weex 这类技术方案和 WebView 本质区别在于:前者抛弃了繁重的 WebCore 和 Html 语法,而是利用 React/Vue 自己实现了一套Native渲染方式。但两者的共同点,就在于它们都依赖 JsCore 来执行 Js。

     

    换句话说,没有 JsCore,就不会诞生 RN、Weex 这类优秀的动态化技术。而今天,我们就顺着动态化这条路线,一起来学习下 JsCore 的原理。今天的文章来自美团技术团队:唐笛,文章很硬,大家可以收藏起来慢慢品味。

     

    文章所有删减以适合 Android 读者阅读,文末可查看原文。

    正文

    背景

    动态化作为移动客户端技术的一个重要分支,一直是业界积极探索的方向。目前业界流行的动态化方案,如Facebook的React Native,阿里巴巴的Weex都采用了前端系的DSL方案,而它们在移动端系统上能够顺利的运行,都离不开一个背后的功臣:JavaScriptCore(以下简称JSCore),它建立起了 Java 和JavaScript(以下简称JS)两门语言之间沟通的桥梁。无论是这些流行的动态化方案,还是WebView Hybrid方案,JSCore都在其中发挥了举足轻重的作用。作为一名移动端开发工程师,了解JSCore已经逐渐成为了必备技能之一。

    从浏览器谈起

    JSCore作为浏览器引擎WebKit中重要组成部分,这个JS引擎已经存在多年。如果想去追本溯源,探究JSCore的奥秘,那么就应该从JS这门语言的诞生,以及它最重要的宿主-Safari浏览器开始谈起。

    JavaScript历史简介

    JavaScript诞生于1995年,它的设计者是Netscape的Brendan Eich,而此时的Netscape正是浏览器市场的霸主。

    而二十多年前,当时人们在浏览网页的体验极差,因为那会儿的浏览器几乎只有页面的展示能力,没有和用户的交互逻辑处理能力。所以即使一个必填输入框传空,也需要经过服务端验证,等到返回结果之后才给出响应,再加上当时的网速很慢,可能半分钟过去了,返回的结果是告诉你某个必填字段未填。所以Brendan花了十天写出了JavaScript,由浏览器解释执行,从此之后浏览器也有了一些基本的交互处理能力,以及表单数据验证能力。

    而Brendan可能没有想到,在二十多年后的今天。JS这门解释执行的动态脚本语言,不光成为前端届的“正统”,还入侵了后端开发领域,在编程语言排行榜上进入前三甲,仅次于Python和Java。而如何解释执行JS,则是各家引擎的核心技术。目前市面上比较常见的JS引擎有Google的V8(它被运用在Android操作系统以及Google的Chrome上),以及我们今天的主角JSCore。

    WebKit

    我们每天都会接触浏览器,使用浏览器进行工作、娱乐。让浏览器能够正常工作最核心的部分就是浏览器的内核,每个浏览器都有自己的内核,Safari的内核就是WebKit。WebKit诞生于1998年,并于2005年由Apple公司开源,Google的Blink也是在WebKit的分支上进行开发的。

    WebKit由多个重要模块组成,通过下图我们可以对WebKit有个整体的了解:

    å¾ç1

    简单点讲,WebKit就是一个页面渲染以及逻辑处理引擎,前端工程师把HTML、JavaScript、CSS这“三驾马车”作为输入,经过WebKit的处理,就输出成了我们能看到以及操作的Web页面。从上图我们可以看出来,WebKit由图中框住的四个部分组成。而其中最主要的就是WebCore和JSCore(或者是其它JS引擎),这两部分我们会分成两个小章节详细讲述。除此之外,WebKit Embedding API是负责浏览器UI与WebKit进行交互的部分,而WebKit Ports则是让Webkit更加方便的移植到各个操作系统、平台上,提供的一些调用Native Library的接口,比如在渲染层面,在Android系统中,Webkit则是交给Skia。

    WebCore

    在上面的WebKit组成图中,我们可以发现只有WebCore是红色的。这是因为时至今日,WebKit已经有很多的分支以及各大厂家也进行了很多优化改造,唯独WebCore这个部分是所有WebKit共享的。WebCore是WebKit中代码最多的部分,也是整个WebKit中最核心的渲染引擎。那首先我们来看看整个WebKit的渲染流程:

    å¾ç2

    首先浏览器通过URL定位到了一堆由HTML、CSS、JS组成的资源文件,通过加载器(这个加载器的实现也很复杂,在此不多赘述)把资源文件给WebCore。之后HTML Parser会把HTML解析成DOM树,CSS Parser会把CSS解析成CSSOM树。最后把这两棵树合并,生成最终需要的渲染树,再经过布局,与具体WebKit Ports的渲染接口,把渲染树渲染输出到屏幕上,成为了最终呈现在用户面前的Web页面。

    JSCore

     

    概述

    终于讲到我们这期的主角——JSCore。JSCore是WebKit默认内嵌的JS引擎,之所以说是默认内嵌,是因为很多基于WebKit分支开发的浏览器引擎都开发了自家的JS引擎,其中最出名的就是Chrome的V8。这些JS引擎的使命都相同,那就是解释执行JS脚本。而从上面的渲染流程图我们可以看到,JS和DOM树之间存在着互相关联,这是因为浏览器中的JS脚本最主要的功能就是操作DOM树,并与之交互。同样的,我们也通过一张图看下它的工作流程:

    å¾ç3

    可以看到,相比静态编译语言生成语法树之后,还需要进行链接,装载生成可执行文件等操作,解释型语言在流程上要简化很多。这张流程图右边画框的部分就是JSCore的组成部分:Lexer、Parser、LLInt以及JIT的部分(之所以JIT的部分是用橙色标注,是因为并不是所有的JSCore中都有JIT部分)。接下来我们就搭配整个工作流程介绍每一部分,它主要分为以下三个部分:词法分析、语法分析以及解释执行。

    PS:严格的讲,语言本身并不存在编译型或者是解释型,因为语言只是一些抽象的定义与约束,并不要求具体的实现,执行方式。这里讲JS是一门“解释型语言”只是JS一般是被JS引擎动态解释执行,而并不是语言本身的属性。

    词法分析:Lexer

    词法分析很好理解,就是把一段我们写的源代码分解成Token序列的过程,这一过程也叫分词。在JSCore,词法分析是由Lexer来完成(有的编译器或者解释器把分词叫做Scanner)。

    这是一句很简单的C语言表达式:

    sum = 3 + 2; 
    

    将其标记化之后可以得到下表的内容:

    元素标记类型
    sum标识符
    =赋值操作符
    3数字
    +加法操作符
    2数字
    ;语句结束

    这就是词法分析之后的结果,但是词法分析并不会关注每个Token之间的关系,是否匹配,仅仅是把它们区分开来,等待语法分析来把这些Token“串起来”。词法分析函数一般是由语法分析器(Parser)来进行调用的。在JSCore中,词法分析器Lexer的代码主要集中在parser/Lexer.h、Lexer.cpp中。

    语法分析:Parser

    跟人类语言一样,我们讲话的时候其实是按照约定俗成,交流习惯按照一定的语法讲出一个又一个词语。那类比到计算机语言,计算机要理解一门计算机语言,也要理解一个语句的语法。例如以下一段JS语句:

    var sum = 2 + 3;
    var a = sum + 5;
    

    Parser会把Lexer分析之后生成的token序列进行语法分析,并生成对应的一棵抽象语法树(AST)。这个树长什么样呢?在这里推荐一个网站:esprima Parser,输入JS语句可以立马生成我们所需的AST。例如,以上语句就被生成这样的一棵树:

    å¾ç4

    之后,ByteCodeGenerator会根据AST来生成JSCore的字节码,完成整个语法解析步骤。

    解释执行:LLInt和JIT

    JS源代码经过了词法分析和语法分析这两个步骤,转成了字节码,其实就是经过任何一门程序语言必经的步骤--编译。但是不同于我们编译运行OC代码,JS编译结束之后,并不会生成存放在内存或者硬盘之中的目标代码或可执行文件。生成的指令字节码,会被立即被JSCore这台虚拟机进行逐行解释执行。

    运行指令字节码(ByteCode)是JS引擎中很核心的部分,各家JS引擎的优化也主要集中于此。JSByteCode的解释执行是一套很复杂的系统,特别是加入了OSR和多级JIT技术之后,整个解释执行变的越来越高效,并且让整个ByteCode的执行在低延时之间和高吞吐之间有个很好的平衡:由低延时的LLInt来解释执行ByteCode,当遇到多次重复调用或者是递归,循环等条件会通过OSR切换成JIT进行解释执行(根据具体触发条件会进入不同的JIT进行动态解释)来加快速度。由于这部分内容较为复杂,而且不是本文重点,故只做简单介绍,不做深入的讨论。

    JSCore值得注意的Feature

    除了以上部分,JSCore还有几个值得注意的Feature。

    基于寄存器的指令集结构

    JSCore采用的是基于寄存器的指令集结构,相比于基于栈的指令集结构(比如有些JVM的实现),因为不需要把操作结果频繁入栈出栈,所以这种架构的指令集执行效率更高。但是由于这样的架构也造成内存开销更大的问题,除此之外,还存在移植性弱的问题,因为虚拟机中的虚拟寄存器需要去匹配到真实机器中CPU的寄存器,可能会存在真实CPU寄存器不足的问题。

    基于寄存器的指令集结构通常都是三地址或者二地址的指令集,例如:

    i = a + b;
    //转成三地址指令:
    add i,a,b; //把a寄存器中的值和b寄存器中的值相加,存入i寄存器
    

    在三地址的指令集中的运算过程是把a和b分别mov到两个寄存器,然后把这两个寄存器的值求和之后,存入第三个寄存器。这就是三地址指令运算过程。

    而基于栈的一般都是零地址指令集,因为它的运算不依托于具体的寄存器,而是使用对操作数栈和具体运算符来完成整个运算。

    单线程机制

    值得注意的是,整个JS代码是执行在一条线程里的,它并不像我们使用的OC、Java等语言,在自己的执行环境里就能申请多条线程去处理一些耗时任务来防止阻塞主线程。JS代码本身并不存在多线程处理任务的能力。但是为什么JS也存在多线程异步呢?强大的事件驱动机制,是让JS也可以进行多线程处理的关键。

    事件驱动机制

    之前讲到,JS的诞生就是为了让浏览器也拥有一些交互,逻辑处理能力。而JS与浏览器之间的交互是通过事件来实现的,比如浏览器检测到发生了用户点击,会传递一个点击事件通知JS线程去处理这个事件。

    那通过这一特性,我们可以让JS也进行异步编程,简单来讲就是遇到耗时任务时,JS可以把这个任务丢给一个由JS宿主提供的工作线程(WebWorker)去处理。等工作线程处理完之后,会发送一个message让JS线程知道这个任务已经被执行完了,并在JS线程上去执行相应的事件处理程序。(但是需要注意,由于工作线程和JS线程并不在一个运行环境,所以它们并不共享一个作用域,故工作线程也不能操作window和DOM。)

    JS线程和工作线程,以及浏览器事件之间的通信机制叫做事件循环(EventLoop),类似于Android的Looper。它有两个概念,一个是Call Stack,一个是Task Queue。当工作线程完成异步任务之后,会把消息推到Task Queue,消息就是注册时的回调函数。当Call Stack为空的时候,主线程会从Task Queue里取一条消息放入Call Stack来执行,JS主线程会一直重复这个动作直到消息队列为空。

    å¾ç5

    以上这张图大概描述了JSCore的事件驱动机制,整个JS程序其实就是这样跑起来的。这个其实跟空闲状态下的Looper有点像,当基于Port的Source事件唤醒runloop之后,会去处理当前队列里的所有source事件。JS的事件驱动,跟消息队列其实是“异曲同工”。也正因为工作线程和事件驱动机制的存在,才让JS有了多线程异步能力。

    JSCore结构

    实际上,即使同为JSCore,它们之间也存在很多区别。因为随着JS这门语言的发展,JS的宿主越来越多,有各种各样的浏览器,甚至是常见于服务端的Node.js(基于V8运行)。随时使用场景的不同,以及WebKit团队自身不停的优化,JSCore逐渐分化出不同的版本。除了老版本的JSCore,还有2008年宣布的运行在Safari、WKWebView中的Nitro(SquirrelFish)等等。而在本文中,我们主要介绍移动端系统自带的JSCore Framework。

    笔者认为很有必要了解的概念只有4个:JSVM、JSContext、JSValue、JSExport。鉴于讲述这些概念的文章已经有很多,本文尽量从一些不同的角度(比如原理,延伸对比等)去解释这些概念。

     

    JSVirtualMachine

    一个JSVirtualMachine(以下简称JSVM)实例代表了一个自包含的JS运行环境,或者是一系列JS运行所需的资源。该类有两个主要的使用用途:一是支持并发的JS调用,二是管理JS和Native之间桥对象的内存。

    JSVM是我们要学习的第一个概念。官方介绍JSVM为JavaScript的执行提供底层资源,而从类名直译过来,一个JSVM就代表一个JS虚拟机,我们在上面也提到了虚拟机的概念,那我们先讨论一下什么是虚拟机。首先我们可以看看(可能是)最出名的虚拟机——JVM(Java虚拟机),JVM主要做两个事情:

    1. 首先它要做的是把JavaC编译器生成的ByteCode(ByteCode其实就是JVM的虚拟机器指令)生成每台机器所需要的机器指令,让Java程序可执行(如下图)。

    2. 第二步,JVM负责整个Java程序运行时所需要的内存空间管理、GC以及Java程序与Native(即C,C++)之间的接口等等。

    å¾ç7

    从功能上来看,一个高级语言虚拟机主要分为两部分,一个是解释器部分,用来运行高级语言编译生成的ByteCode,还有一部分则是Runtime运行时,用来负责运行时的内存空间开辟、管理等等。实际上,JSCore常常被认为是一个JS语言的优化虚拟机,它做着JVM类似的事情,只是相比静态编译的Java,它还多承担了把JS源代码编译成字节码的工作。

    既然JSCore被认为是一个虚拟机,那JSVM又是什么?实际上,JSVM就是一个抽象的JS虚拟机,让开发者可以直接操作。在App中,我们可以运行多个JSVM来执行不同的任务。而且每一个JSContext(下节介绍)都从属于一个JSVM。但是需要注意的是每个JSVM都有自己独立的堆空间,GC也只能处理JSVM内部的对象(在下节会简单讲解JS的GC机制)。所以说,不同的JSVM之间是无法传递值的。

    值得注意的还有,在上面的章节中,我们提到的JS单线程机制。这意味着,在一个JSVM中,只有一条线程可以跑JS代码,所以我们无法使用JSVM进行多线程处理JS任务。如果我们需要多线程处理JS任务的场景,就需要同时生成多个JSVM,从而达到多线程处理的目的。

    JS的GC机制

    JS同样也不需要我们去手动管理内存。JS的内存管理使用的是GC机制(Tracing Garbage Collection)。不同于OC的引用计数,Tracing Garbage Collection是由GCRoot(Context)开始维护的一条引用链,一旦引用链无法触达某对象节点,这个对象就会被回收掉。如下图所示:

    å¾ç8

     

    总结

    JSCore给App提供了JS可以解释执行的运行环境与资源。对于我们实际开发而言,最主要的就是JSContext和JSValue这两个类。JSContext提供互相调用的接口,JSValue为这个互相调用提供数据类型的桥接转换。让JS可以执行Native方法,并让Native回调JS,反之亦然。

    å¾ç11

    利用JSCore,我们可以做很多有想象空间的事。所有基于JSCore的Hybrid开发基本就是靠上图的原理来实现互相调用,区别只是具体的实现方式和用途不大相同。大道至简,只要正确理解这个基本流程,其它的所有方案不过是一些变通,都可以很快掌握。

    ----

    公众号:wingjay

    人和人的差距,是下班后的 4 小时拉开的。

    长期输出有价值 Android 技术内容,更重要的是,原创文章末尾会有随机抽奖哟

    ----

     

    在上一篇文章《说一件重要的事。》中可查看上一个“一文一题”。

     

    更多文章:

    2019年移动开发,我的求变之路

    Flutter 跨平台实践及原理探秘

    支付宝的 Hybrid 架构是如何建设起来的?

    Android 架构之长连接技术

    展开全文
  • 动态网页开发基础

    千次阅读 2019-03-11 23:45:10
    动态网页开发基础 什么是动态网页 动态网页是指在服务器端运行的,使用程序语言设计的交互式网页,它们会根据某种条件的变化,返回不同的网页内容。 动态网页需要使用服务器脚本语言 动态网页的优势是什么? 交互...

    动态网页开发基础

    什么是动态网页

    • 动态网页是指在服务器端运行的,使用程序语言设计的交互式网页,它们会根据某种条件的变化,返回不同的网页内容。
    • 动态网页需要使用服务器脚本语言
    动态网页的优势是什么?
    • 交互性:即网页会根据用户的要求和选择而动态的改变和显示内容
    • 自动更新:即无需改变页面代码,便会自动生成新的页面内容,可以大大节省工作量
    • 随机性:即当不同的时间,不同的人访问同一网址产生不同的页面的效果
    动态网页是静态网页的替代品?
    • 不是,静态网页集合动态网页各有特点,网站采用动态网页还是静态网页主要取决于网站的功能需求和网站内容的多少。
    如何实现动态网页
    • 动态网页需要使用服务器端的脚本语言,如使用Java脚本语言的JSP技术。

    为什么学习B/S框架技术

    • CS(Client/Server)客户端/服务器端架构
    1. 在客户端安装软件 , 通过网络与服务器端通信 ;

    2. 如果软件进行了微小的改动 , 维护人员都需要给这个已经安装的软件进行升级 , 工作量会很大 ;

    3. 随着Internet的普及与大规模应用 , 受制于C/S架构的应用程序存在很多缺点 , BS(Browser/Server)随之应运而生 ;

    • BS(Browser/Server)浏览器/服务器架构
    1. 基于B/S架构的Web应用程序由于不再受安装客户端的下限值 , 访问极其简便 , 但B/S架构并不是对C/S架构的否定 , 而是对其的一种变化或者改进 ;

    2. 在B/S架构下 , 应用系统完全放在应用服务器上 , 并通过应用服务器同数据库服务器进行通信 , 系统界面通过浏览器进行展现 ;

    • C/S架构和B/S架构的对比
    1. C/S架构的每一个客户端都需要安装和配置客户端软件 , 如果系统发生变化 , 则需要对每一个客户端去进行升级 ; 但在B/S架构中 , 软件应用的业务逻辑完全放在应用服务器端中 , 所有的客户端只是浏览器 , 不需要做任何的维护 , 客户端重新访问页面 , 使用的就已经是最新版本的软件了 , 系统维护人员只需要关注服务器的软件升级即可 ;

    2. B/S架构相对于C/S架构来说 , 也存在劣势 , 就是界面没有C/S友好 , 难以做出界面丰富的软件 , 在速度和安全性上需要花费巨大的设计成本 , 另外由于B/S架构的交互式请求/响应的模式 , 一旦数据信息发生变化则需要刷新页面才能看到 ;


    B/S架构的原理
    • 浏览器接收用户的输入 :例如用户输入的登录名、密码等信息;

    • 浏览器向服务器端发送请求 :浏览器把请求消息发送到服务器端 , 等待服务器端的响应 ;

    • 数据处理 : 服务器端通常使用服务器端脚本语言 , 进行数据库的访问 , 查询 , 并返回查询结果 ;

    • 发送响应 : 服务器向浏览器发送响应信息(一般是动态生成的HTML页面) , 并由浏览器解释HTML文件 , 呈现结果页面 ;


    什么是URL

    URL(Unifform Resource Locator)的意思是统一资源定位符,用于完整的描述Internet上网页和其他资源的地址的一种表示方法。简单的说,URL就是常说的网址

    在Internet上的所有资源都是独一无二的URL地址

    URL的组成

    • 协议
    • 服务器域名或IP
    • 端口号
    • 路径
    最常用的URL组成部分
    1. 第一部分:使用的传输协议,如最常用的HTTP协议(目前www中应用最广的协议)。
    2. 第二部分:主机IP地址(有时包含端口号,默认端口号是80),指请求的服务器的IP地址,这个地址是唯一的,也可以使用域名来代替IP地址发送请求。
    3. 第三部分:路径(包含请求的资源),由零个或者多个“/”隔开的字符串表示,一般用来表示服务器上的一个目录或文件地址。而请求的资源指请求内容的文字,可以是一个HTML页面,也可以是一个图像等服务器能提供的资源。
    提示

    第一部分和第二部分之间用 “: //” 隔开,第二部分和第三部分用 “/” 隔开。其中第一部分和第二部分是不可缺失的,第三部分有时可以省略。当第三部分省略时,大多数服务器会访问系统默认的欢迎页面。

    部署简单的Web应用

    Tomcat服务器

    • Apache Jakarta的开源项目
    • JSP/Servlet容器

    Tomcat的目录结构

    在这里插入图片描述

    Tomcat 的启动和停止

    • 启动服务:bin目录下的startup.bat
    • 关闭服务:bin目录下的shutdown.bat
    Tomcat服务启动检测
    • 在IE地址栏中输入http://localhost:端口号
    • 页面进入到Tomcat启动成功界面

    Tomcat端口号配置

    1. 在Tomcat目录结构下找到子目录conf。
    2. 在conf目录中端口server.xml文件。
    3. 在打开的文件中,找到<Connector>节点,然后修改端口号。
    4. 保存设置
    	<Connector port="8080" 
    		protocol="HTTP/1.1 " 
    		connectionTimeout="20000" 
    	   redirectPort="8443 " 	
    	/>
    
    	<Connector port= "6060" 
    		protocol="HTTP/1.1 " 
    		connectionTimeout="20000" 
    	   redirectPort="8443 " 	
    	/>
    

    Web应用的目录结构

    在这里插入图片描述

    创建,部署和发布项目

    1. 编写Web应用的代码

    2. 在webapps目录下创建应用文件目录

    3. 将创建的页面复制到应用目录下

    4. 启动Tomcat服务并进行访问

    配置访问页面

    在这里插入图片描述

    • 假定在web应用(news)下存在一个index.jsp页面,输入http://localhost:8080/news地址时,web容器会默认调用index.jsp页面

    JSP简介

    • JSP (Java Server Pages):在HTML中嵌入Java脚本代码,当用户通过浏览器请求访问Web应用时,使用JSP容器对请求的JSP进行处理和运行,然后将生成的页面返回客户端浏览器从进行显示;

    • JSP 与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言。

    • JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。

    • JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。

    • JSP文件后缀名为 *.jsp 。

    • JSP开发的WEB应用可以跨平台使用,既可以运行在 Linux 上也能运行在 Windows 上

    JSP页面组成

    • JSP页面的组成:静态内容、指令、表达式、小脚本、声明、标准动作、注释等。

    静态内容

    • 静态内容是JSP页面中的静态文本,其基本是HTML文本,与Java和JSP无关;

    JSP指令元素

    • JSP 指令元JSP 指令元素的作用是通过设置指令中的属性,在 JSP 运行时,控制 JSP 页面的某些特性;
    • JSP 指令一般以 <%@ 开始, 以 %> 结束。
    <%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=UTF-8" %>
    

    在这里插入图片描述

    1. language

    指定当前页面的脚本语言,当前JSP版本只能使用Java作为脚本语言。默认就是Java作为脚本

    1. import

    在实际开发中使用频繁,通过import属性可以在JSP文件的脚本中引用类。如果一个import属性引入多个类,需要在多个类之间用逗号隔

      <%@ page import=“java.util.*,java.text.*”%>
    

    上面的引用格式也可以分为以下两部分:

    	<%@ page import=“java.util.*”%>
    	<%@ page import=“java.text.*”%>	
    
    1. contentType

    该属牲的设置在开发过程中是非常重要的,而且经常被用到,中文一直是困扰开发者的一个问题,而 cantentType 属性可以对编码格式进行设置,

    这个设置告诉 Web容器在客户端浏览器上以何种格式及使用何种编码方式显示响应的内容;contemType 属性的具体设置格式:

     <%@ page contentType=”text/html;chaeset=UTF-8”%>
    
    • text/html 和 charsetzUTF-8 的设置之间使用分号隔开,它们同属于 contentType 属性值,当置为 text/html 时,表示该页面以 HTML 页面的格式进行显示 charset=UTF-8 表示在浏览器中将以UTF-8的编码方式显示内容;

    JSP脚本元素

    • 在JSP 页面中,将小脚本 (scriptlet)、表达式 (expression) 、声明 (declaration) 统称为 JSP元素,用于在 JSP 页面中嵌入 Java 代码,实现页面的动态处理;
    1. 什么是小脚本

    小脚本可以包含任意的 Java片断,形式比较灵活 , 通过在 JSP 页面中编写小脚本可以执行复杂的操作和业务处理,编写方法是将 Java 程序片断插入<%%>标记中;

    1. 什么是表达式

    表达式是对数据的表示,系统将其作为一个值进行计算和显示,当需要在页面中输出一个Java变量或者表达式值时,使用表达式是非常方便的;

    Web容器遇到表达式时,会先计算嵌入的表达式值或者变量值,然后将计算结果输出到面中;

    	<%=Java 变量表达式%>
    
    1. JSP声明

    在编写 JSP 页面程序时, 有时需要为 Java 脚本定义成员变量和方法,这时就需要使用 JSP 声来实现;

    	<%! Declaration; [Declaration].....%>
    
    JSP中的注释
    • HTML 注释方法; 其使用格式是 <!-- 注释内容–>。 其中的注释内容在客户端浏览器中查看源代码时可以看到,这种注释方法是不安全的,而且会加大网络的传输

    • JSP注释标记:其使用格式是 <%-- 注释内容–%>,在客户端通过查看源代码看不到注释的内容,安全性比较高;

    • 在JSP脚本中使用注释:在脚本中进行注释和在 Java 类中进行注释的方法是一样的,其使用格式是 <% //单行注释%>、<%/多行注释/%>

    JSP的执行过程

    Web容器处理JSP文件请求需要经过3个阶段:

    • 翻译阶段:当 Web 容器接收到 JSP 请求时,首先会对 JSP 文件进行翻译 , 将编写好的 JS文件通过 JSP 容器转换成可识别的 Java 源代码

    • 编译阶段:经过翻译后的 JSP 文件相当于编写好的Java源文件,此时仅有 Java 源文件是不够的,必须将Java源文件编译成可执行的字节码文件;

    • 执行阶段:经过翻译和编译两个阶段,生成了可执行的二进制字节码文件,此时进入执阶段,当执行结束后,把生成的结果页面返回客户端浏览器显示;

    一旦 Web 容器把 JSP 文件翻译和编译完成,Web 容器就会将编译好的宇节码文件保存在内存中,当客户端再次请求相同的 JSP 时,就可以重用这个编译好的字节码文件,而不会把同一个 JSP 重进行翻译和编译。这就大大提高了 Web 应用系统的性能。如果对 JSP 进行了修改,再次访问该 JS页面, Web容器会重新执行翻译和编译。所以. JSP 在第一次请求时会比较慢, 后续访问的速度很快;

    使用集成开发工具创建Web应用

    总结在这里插入图片描述

    展开全文
  • Nginx动态网站LNMP

    千次阅读 2020-01-11 17:55:37
    什么是LNMP ...LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。 即Linux+Nginx+Mysql+PHP网站服务器架构 这四种软件均为免费开源软件,组合到一起,成为一个免费、...
  • 动态注入技术

    千次阅读 2016-08-30 11:57:52
    我们在讨论动态注入技术的时候,APIHook的技术由来已久,在操作系统未能提供所需功能的情况下,利用APIHook的手段来实现某种必需的功能也算是一种不得已的办法。在Windows平台下开发电子词典的光标取词功能,这项...
  • 图像识别技术原理和神经网络的图像识别技术

    万次阅读 多人点赞 2019-03-03 19:44:58
    图像识别技术是信息时代的一门重要的技术,其产生目的是为了让计算机代替人类去处理大量的物理信息。随着计算机技术的发展,人类对图像识别技术的认识越来越深刻。图像识别技术的过程分为信息的获取、预处理、特征...
  • 程序动态切片技术研究

    千次阅读 2016-08-31 21:16:06
    动态程序切片主要是指在某个给定输入的条件下,源程序执行路径上所有对程序某条语句或兴趣点上的变量有影响的语句。 面向对象技术仍是目前软件开发方法的主流,其中封装、继承、多态、并发等特
  • 网页防篡改技术比较

    千次阅读 2014-12-03 10:11:39
    目前市场上常见的网页防篡改技术以下三种:   1)外挂轮询技术   用一个网页读取和检测程序,以轮询方式读出要监控的网页,与真实网页相比较,来判断网页内容的完整性,对于被篡改的网页进行报警和恢复。 ...
  • 网站设计技术(JSP)期末题库第一章 javaweb入门1、简述动态网站和静态网站的区别,及常用的动态网站技术第二章 servlet基础1、重定向与请求转发的区别第三章 servlet核心接口1、获得ServletContext对象的两种方式第...
  • 《JSP网站开发技术》课程考试试题(A卷) 题号 一 二 三 总分 得分 阅卷教师 ...
  • 在AI时代,我们希望计算机能够拥有视觉、听觉、行动以及语言的智能,而相对于听和看以及行动,语言是我们人类区别于其他动物的最重要特征之一。语言是我们思维的载体,也因此...自然语言处理技术在百度已经有悠久...
  • 文章目录论述自然语言处理的技术范畴(基本全貌) 一、前言二、主要技术范畴1、语音合成(Speech Synthesis)2、语音识别(Speech Recognition)3、中文自动分词4、词性标注5、句法分析7、文本分类7、文本挖掘8、信息抽取9...
  • 了解静态网站动态网站的区别 掌握动态网站的不同实现方式 在阿里云上如何搭建 wordPress网站以及 wordPress 网站的管理和优化 二.网站搭建的类型 1.网站的主要类型 静态网站:指全部由 HTML 代码格式页面组成的...
  • 大型电商网站架构案例和技术架构【推荐】

    万次阅读 多人点赞 2018-05-17 10:14:24
    大型网站架构是一个系列文档,欢迎大家关注。本次分享主题:电商网站架构案例。...本次分享大纲电商案例的原因电商网站需求网站初级架构系统容量估算网站架构分析网站架构优化架构总结电商网站案...
  • 上一节说到了网络协议欺骗,这一节我们将一起来学习:诱骗式攻击。大家需要注意这两者的区别。  诱骗式攻击是指通过伪造... 诱骗式攻击与我们昨天学习的网络协议欺骗是一样的,不同之处在于,网络协议欺骗利用
  •  静态网页:对于动态网页而言,是指没有后台数据库、不含程序和可交互的网页。你编的是什么它显示的就是什么、不会有任何改变。静态网页相对更新起来比较麻烦,适用于一般更新较少的展示型网站。  静态网页是...
  • 什么是docker?什么是容器技术

    千次阅读 2019-12-18 20:04:31
    IBM DeveloperWorks网站关于容器技术的描述十分准确:它是一种内核轻量级的操作系统层虚拟化技术。可以有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟...
  • 随着人类生活全面向互联网转移,大数据时代将会可避免的到来!   作为全球互联网的前沿概念,大数据主要包括两方面特征:一方面整个社会的信息量急剧增长,另一方面个人可获取的信息也呈指数增长。从科技发展...
  • Web网站技术架构总结

    千次阅读 2017-09-13 19:25:03
    随着系统的的上线,用户量也会逐步上升,很明显一台服务器已经满足了系统的负载,这时候,我们就要在服务器还没有超载的时候,提前做好准备。 由于我们是单体架构,优化架构在短时间内是现实的,增加机器是一个...
  • 手把手教你利用爬虫爬网页(Python代码)

    万次阅读 多人点赞 2019-05-14 14:34:48
    网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。实际的网络爬 虫系统通常是几种爬虫技术相结合实现的。 搜索引擎(Search Engine),例如...
  • 物联网的基础技术,主要有哪些?

    千次阅读 2019-03-29 23:32:48
    互联网技术,物联网是互联网的延伸和扩展,因此互联网技术是物联网发展的核心技术,在互联网发展的过程中,主要包含以下几方面的技术:局域网技术、广域网技术、Internet技术、传输控制协议/网间协议(TCP/IP)及后期...
  • 零信任架构的3大核心技术

    千次阅读 2021-02-04 09:59:24
    无论“零信任”如何饱受争议,但事实证明随着相关技术的发展它都已然成为当下企业最好的选择。 研究人员说: “我们估计,这份报告中披露的战役是伊朗迄今所揭示的最连续,最全面的战役之一。”,“揭露的战役被用作...
  • 对于物联网的产业链,具体可细分为标识、感知、信息传送和数据处理这4个环节,其中包括的核心技术主要有射频识别技术,传感技术,网络通信技术、嵌入式系统技术和云计算等五项,以下分别对这五项物联网核心技术逐一...
  • 技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同...
  • 网页抽取技术和算法

    千次阅读 2018-01-18 20:13:27
    基于机器学习的网页抽取基于正则或CSS选择器(或xpath)的网页抽取都基于属于基于包装器(wrapper)的网页抽取,这类抽取算法的通病就在于,对于不同结构的网页,要制定不同的抽取规则。如果一个舆情系统需要监控10000个...
  • 随着Web 越来越规范和标准的统一,Web组件化技术不断革新,移动端开发不断升华,以下是一些常见开源前端框架: Bootstrap 主流框架之一,Bootstrap 是基于 HTML、CSS、JavaScript的,它简洁灵活,使得 Web ...
  • 下列选项中不属于CSS 文本属性的是( ) A. font-size B. text-transform C. text-align D. line-height 答案:D 16.在CSS 中不属于添加在当前页面的形式是( ) A. 内联式样式表 B. 嵌入式样式表 C. 层叠式样式表 ...
  • 想要成为一名合格的Web前端开发工程师,首先需要做好的就是熟练掌握Web前端开发技术,那么Web前端开发技术包括哪些呢? 前端开发工程师就业前景如何? 1、HTML HTML称为超文本标记语言,是一种标识性的语言,制作...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 119,175
精华内容 47,670
关键字:

以下不属于动态网页技术的是