全端Web开发 使用JavaScript与Java 阅读笔记

计算机科学领域只有两大难题:缓存失效和命名。

REST(Representational State Transfer)技术,他建议一种Web服务消息传递的风格。

第一章:因变而变

企业家总在寻求变化,他们适应变化,并把它当作一种机遇。

J2EE和JSP经过完善变成了JEE和JSF。

现代的客户端-服务器架构里,服务器更大程度上负责相应客户端的请求,提供资源的访问方式(通常使用XML 和JSON交换信息)。在过去的服务器驱动模型中,页面(和与之相关的数据)都在服务器端生成完毕,一起返回客户端在浏览器里面渲染。而在客户端-服务器架构中,服务器先返回一个包含少量数据的初始页面。用户和页面惊醒交互时,页面向服务器发起异步请求,服务器则返回消息,以便页面刷新来响应这些事件。

!Java Server Faces(JSF)是一种基于XML的模板系统和组件框架,导航实行集中化配置;

!Google Web Tookit 是另一种组件化框架,他发挥了Java程序猿的长处,集中精力编写Java,而不用关心HTML/CSS/和JS

浏览器的创新也促成了责任从服务器想向客户端转移。微软开发了Ajax(asynchronous Javascript and XML)对各种WEB页面和服务器进行通信的页面都适用。

但是WEB的本质没有发生变化(还是基于HTTP进行消息传递的客户端-服务器端架构)

C-S的WEB应用的优点

1.按照代码逻辑解耦,增强了原有结构和后续支持系统的内聚性。将客户端和服务器端分层,可以让代码变得可管理,模块化。另外,数据和显示标记能更清晰的分离。可以使用JSON而不是内嵌的方式发布数据。

2.“设计的灵活性”与“使用开源API”

3.原型

4.开发者效率:工作更容易划分,这时唯一的限制就是原来的接口保持可用。

5.应用性能:页面的感知性能对用户的体验影响较大。更快的JS引擎能使客户端可执行计算密集型操作,从而将服务器的压力负荷转移到客户端。Ajax技术能够按需请求较少的数据,这避免了对整个页面的频繁刷新。

第二章:JS和JS工具

核心JS语言需结合两个不同API进行理解:浏览器对象模型(BOM)和文档对象模型(DOM)

JS受到了Perl的直接影响:“不止一种方式去做一件事情”也受到了schema的极大影响。

JS可以在函数中定义其他函数,内部函数可以访问外部函数的变量。一个函数返回一个内部函数时,就形成了闭包。返回的对象既然包含了函数本身,也包含了创建函数时的环境:

function outer(){

var val = "I am in outer space";

function inner(){

return val;

}

return inner;

}

var alien = outer();

console.log(alien());

第三章:REST和JSON

REST是一种架构风格,它有一系列约束组成,描述了WEB应该如何工作。

什么是REST

表述性状态转移(REST)架构是为了建模描述现代WEB如何工作开发的。

资源:REST使用web地址(URI)访问资源,使用动词(HTTP请求)操作资源。

动词:HTTP请求定义了一组动词,来表示对于资源的行为。

统一资源标识符:可进一步划分为:统一资源名(URN)和统一资源定位符(URL)

REST约束:

1.客户端-服务器端

2.无状态:REST要求无状态的设计,会话数据保存在客户端

3.可缓存,无状态的性能问题可以通过缓存来弥补。REST要求给数据打标签,标明其是否可被缓存。

4.统一接口

5.分层

6.按需交付代码

JSON:(JavaScript object Notation)

JSON相比XML的优点:

相应体更小,JSON与WEB的互通性更强。JSON是JS的子集,这使客户端集成变得简单。调用Ajax变得简单。

缺点:

JSON不完全是合法的。

JSON中无法添加注释。

eval()方法是危险的。

HATEOAS:JSON是一种非常简单紧凑的格式。和其他为表示数据提供复杂类型的系统不同,JSON只提供有限几种数据类型。JSON中没有类型表示超链接,特别是REST包含一种超媒体作为应用状态引擎(hypermedia  as the engine of Application state,HATEOAS)

第四章:Java工具

Maven强制程序员遵循标准和规范,这样做节省了资源,让灵活性得以存在于大的团队中。

Maven在犹太语中是“只是渊博的人”,它用来组织项目,并且定义软件开发流程(软件项目管理和理解的工具),他简化了构建流程,提供比创建项目的统一系统(通过声明项目依赖的方式)。他的报告和文档功能负责生产和集中管理所有项目相关的技术产出。

第五章:客户端框架

起点1:响应式WEB设计(Responsive Web Design)

-流体网格(Fluid grid)

-弹性图片(Flexible image)

-CSS媒体查询(CSS media query)

起点2:JS库和框架

从Github下载

第六章:Java Web API服务器

将可重用的组件打包这一点让扩展编程语言的能力成为可能。对于一门特定的语言,打包会影响到部署方式。打包需要考虑标准命名规范、元数据文件、数字签名、代码混淆、代码管理、包含相关的文件/资源,以及压缩机制。

打包会影响到部署。一门语言提供的部署选项能左右一个项目的结构和开发流程,Java尤其如此。Java源文件中名字反映了其包含的公有类的名字;Java的包结构遵循文件系统的目录结构。Java使用了多个不同类型的包格式。一般的代码被打包到Java归档文件(JAR),web应用文件被打包到WEB应用归档文件(WAR),一组相关的WEB应用被打包到企业级应用归档文件(EAR)。WAR可以被部署到哦啊servlet容器中,而EAR需要完整的企业级Java的支持,必须有类似JBoss这样的应用服务器。

基于Java的服务器:

1:Java HTTP 服务器

2:Jetty嵌入式服务器

3:Restlet

4:Roo

5:Netty 嵌入式服务器

6:Play服务器

基于JVM的服务器

Jython

如果已经安装好Python,是使用下述命令启动一个web服务器共享当前目录下文件:

$ python -m SimpleHTTPServer 8000

Jython是Python在JVM上的实现

WEB应用服务器:

比如Tomcat,Tomcat 是一个Servlet容器,因此任何的WEB应用都可以部署在一个WAR包中在其中运行。包含一组WAR包的项目需要被打包成为EAR(或者单独的WAR包需要某些JEE服务),此时就需要一个完整的JEE应用服务器,比如JBoss。

第七章:快速开发实践

优化开发者和团队的工作流程

迭代是一种向着最终目标迈进、不断循环的过程。项目的美一部分都被分解成任务,经过多次迭代开发完成。这种方式适合软件开发的方方面面,包括需求手机、设计、开发、测试和部署。

迭代需要以一种可见成果作为终结。迭代完成的结果需要和上一个状态,以及最终希望的结果进行做比较。从这个意义上讲,可以将迭代看作一种反馈循环,以行动为开始,一可衡量的响应结束。

短周期的迭代能获得更多的反馈。循环的周期越短,越能及时得到反馈,效果就越好。

Boyd迭代定律:在应对复杂分析时,快速迭代几乎总是优于深入分析。

第八章:API设计

解决问题有两种基本方式:由全面的理论开始逐渐深入细节,或者从一个细节开始逐步发展出一套与之相应的理论。

设计的起点:

客户端-服务器模式设涉及的一种具体的设计方法是:通过开发RESTful风格的Web API来将数据传输到客户端视图并且避免在服务器端做视图的渲染。这样带来的一个问题是:如何以一致、可支持的方式来设计最好的Web API。这种类型的设计决策常常引发许多观点,但是总是会在一点达成明确的共识:受REST影响的Web API不应该受到有争议或者不切实际的约束的严格限制。

第九章:jQuery和Jython

有些观点认为jQuery更像是一种内部的DSL(内部领域专用语言),这种观点认为jQuery聚焦于DOM操作,Ajax处理和其他通用的JS任务的小型语言。

服务器端:Jython

Python通常使用比Java更少的代码完成相同的工作。

Jython是一个运行在JVM上的Python实现。这使得能在安装了Java的环境上创建清晰简洁的Python代码。Jython同样可以和Java对象交互,他引入了一系列嵌入Jython或与Java库连结的能力。

Python Web服务器

作为一种脚本语言,Python同样也能以Java开发人员不熟悉的方式使用。例如运行一个简单的静态Web服务器,他不用编写一行原始代码,就可以在任何目录提供文件服务。你可以简单切换到一个文件目录,然后调用如下命令:

python -m simpleHTTPServer

Jython web 服务器

使用上面的SimpleHTTPServer创建基于Web服务器只需要几行代码:

import SimpleHTTPServer

import SocketServer

import os

os.chdir(‘src/main/resources‘)

httpd = SocketServer.TCPServer("",8000),

SimpleHTTPServer.SimpleHTTPRequestHandler)

print "sering at port 8000"

Httpd.serve_forever()

Jython 可以从命令行调用也可以嵌入Java应用中。例如这个Java类中调用的脚本:

Package com.oreilly.jython;

import java.io.File;

import java.io.IOException;

import org.python.util.PythonInterpreter;

import org.apache.commons.io.FileUtils;

public class Server

{

public static void main()

{

new PythonInterpreter().exec(

FileUtils.readFileToString(

new File("python/http_server.py")

)

);

}

}

/* 项目及其依赖可以在 Github

* (https://github.com/java-javascript/client-server-web-apps/tree/master/

* Chapter-9-jQuery-and-Jython/jython-json-REST/rest-json)上获得。

* 可以使用mvn clean install构建,使用mvn exec:java运行

*/

客户端:jQuery

其追求消除重复工作,令模糊、繁琐的JavaScript变得清晰、简介。

在初次邂逅jQuery时,代码中出现的美元符号令人惊讶。这是因为$代表了jQuery对象在库中的命名空间。

Ajax

jQuery将XMLHttpRequest浏览器对象封装得更简单医用,在不同浏览器下表现一致。jQUery.ajax是一个通用的Ajax请求器可以简单方便地应用于HTTP  GET 和POST方法。由于在Ajax应用中JSON通讯的普及,它提供了getJSON方法,同手还提供通过JSONP来创建调用的能力。

第十章:JRuby和Angular

服务器端:JRuby和Sinatra

使用Ruby和一个名为Sinatra的微型框架可以创建简单、动态的网络API。Sinatra实质上就是应基于Ruby的HTTP包装器。

客户端:AngularJS(简称:Angular)是MV*JS框架

jQuery和AngularJS:AngularJS兼容jQuery。

如果没有用到jQuery,AngularJS会使用内置的jQuery子集。

第十一章:打包和部署

打包Java和JEE应用

Java归档(JAR)文件用来将Java类和资源文件打包成单个归档文件。JAR文件使用ZIP格式压缩,并且包含一个路径名为:META-INF/MANIFEST.MF的Manifest资源配置文件。可以使用JDK提供的jar实用工具(http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/jar.html)来生成JAR文件。简单来说,JAR文件就是一个.ZIP文件,只不过在META-INF目录下包含了一些额外的描述信息。

JAR并不专属与JEE,他是标准的JDK的一部分,其规范(http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#JAR Manifest)可以在JDK文档中找到。JEE描述了JAR文件的几种使用方式。JEE应用客户端模块和EJB模块被打包成JAR文件。JEE的其他打包格式也基于JAR。根据功能和内容不同,JEE其他归档文件其实也是JAR文件,知识文件后缀名不同而已。可以手动构建JEE归档文件,但是一般使用诸如:Ant、Maven或者Gradle这样的构建工具。

Web模块是JEE中最小的部署单元,该模块包含Web组件和资源文件,主要是静态内容。Web模块可以被打包成一个Web归档文件,或称WAR。WAR文件有一个/WEB-INF目录,该目录下有一个web.xml文件,它定义了Web应用的结构和对归档文件中其他资源的应用,WAR文件极其灵活,可以被部署到只支持很小一部分JEE规范规范的Web容器中。

常用的Web容器有Tomcat和Jetty。各个容器都有自己不同的特性。

企业级归档文件(EAR文件),包含了WAR、JAR和一个application.xml文件,该文件引用了包含的模块,定义了安全角色,为企业机应用而产生,必须部署在应用服务器中。和Web容器相比,应用服务器支持更多的JEER规范。EAR文件不能再Web容器内运行,他需要EJB支持和一些其他服务。应用服务器有JBoss,WebSphere、WebLogic Server

JEE的部署:

[ {(Web应用) 应用服务器} 服务器]

JEE中的角色描述了参与开发流程的人的分工,包括部署者和系统管理员。部署者负责在运行环境中配置应用、验证模块是否遵循JEE规范,以及在一台或者多台服务器上安装应用模块。

非JEE应用的部署:

服务器在应用之外

当需要将应用部署至已运行应用服务器的内部系统中,或者希望将多个Web应用和JEE包打包进一个应用时。

服务器和应用并行

不事先安装应用服务器的情况下

服务器在应用里面,在应用代码里包含一个Java服务器库。服务器在Web应用里面运行。

发布时仅需要创建和部署一个可执行JAR包。

第十二章:虚拟化

虚拟机的现实:VMWare、VirtualBox、Amazon EC2

虚拟机的管理:Vagrant、Packer、DevOps配置管理

容器:

LXC:LinuX Container(LXC)虚拟化可用于Linux系统,允许一台服务器上运行多个彼此独立的容器。

Docker:扩展了LXC,提供了更高级别的API。和其他容器技术类似,Docker试图简化应用的打包和部署,为终端用户创建彼此独立的私有环境。

用Docker术语来说,运行的容器基于镜像。对于给定的容器,其文件系统状态和退出值被保存下来,但是保存的不是内存状态。容器可以被启动、停止和重启。容器也可以通过Docker的commit命令导出为一个镜像,这个镜像随后可以被用作新容器的蓝本。

Docker中的镜像可以有父镜像,但基础镜像没有父镜像。

第十三章:测试和文档

时间: 2024-07-29 14:24:35

全端Web开发 使用JavaScript与Java 阅读笔记的相关文章

全端Web开发:使用JavaScript与Java

这篇是计算机类的优质预售推荐>>>><全端Web开发:使用JavaScript与Java> 编辑推荐 近几年来,用户习惯.技术和开发方法极大地改变了Web应用的设计,但是Web本身并没有变化.本书展示了如何开发出遵循Web底层架构的应用. 作为一名Java程序员,在以客户端-服务器端架构开发Web应用时,如何应对各种难题?这本内容详尽的指南将告诉你如何使用各种Java工具.客户端技术和Web API开发Web应用.作者首先概括了客户端-服务器端技术,然后详细介绍了很多实

javascript高级程序设计阅读笔记(一)

javascript高级程序设计阅读笔记(一) 工作之余开发些web应用作为兴趣,在交互方面需要掌握javascript和css.HTML5等技术,因此读书笔记是必要的. javascript简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能. 文档对象模型 DOM doc

12款简化 Web 开发的 JavaScript 开发框架

前端框架简化了开发过程中,像 Bootstrap 和 Foundation 就是前端框架的佼佼者.在这篇文章了,我们编制了一组新鲜的,实用的,可以帮助您建立高质量的 Web 应用程序的 JavaScript 框架清单. 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果[附源码] 分享35个让人惊讶的 CSS3 动画效果演示 十分惊艳的8个 HTML5 & JavaScript 特效 Web 开发中很实用的10个效果[源码下载] 12款经典的白富美型 jQuery 图片轮播插件 1.

Web开发,PHP与java的选择

用过几年java,也用过很多年的php,云助航holison认为: php真正使开发变得简单,让企业开始不用关注过于复杂的架构,随着业务的发展,php同样有处理复杂架构的诸多成熟方案.php真正为web而生. 我们大学里学的很多都把编程复杂化了,其实像数据结构是应当等应用复杂到一定程度的时候再去深入嫁接过来(只是可以先了解),或者说要做一个特别强大.底层的应用可以深入了解下数据结构.但往往这种级别的应用需要大的资金支持. java一开始就让人试着做一个复杂的架构,以兼顾未来高并发的访问量或者复杂

想做web开发 就学JavaScript

有一天我被问到,为了快速地在 web 开发工作上增加优势,应该学习什么语言.我的思绪回到了大学,那时候我用 Pascal.Fortran.C和汇编语言,不过那个时候有不同的目标. 鉴于当前的状况和趋势,答案相对容易给出来:学习 JavaScript.四周看看,曾经低端的浏览器脚本语言现在变得随处可见,从服务器端到客户端,每天好像有更多的选择. 出身低微 我记得数年前投入 web 开发,学习了 HTML.用 Perl 开发 CGI 脚本.Netscape 在其 2.0 版本的浏览器里引入了一种叫做

JavaScript高级程序设计 - 阅读笔记

(本博客为原创:http://www.cnblogs.com/HeavenBin/) 前言: 大致花费了一个星期的时间把这本书认真看了半本,下面是我做的阅读笔记,希望能够让看这本书的人有个大致的参考.目前可能写得较乱不够全面,后续我会整理添加.(2017-7-17) 第一章 JavaScript简介 第二章 HTML中使用JavaScript 第三章  基本概念 3.1.语法 区分大小写 标识符(建议用驼峰大小写myCar) 注释// /**/ 严格模式(use strict) 语句 建议var

15款加速 Web 开发的 JavaScript 框架

JavaScript 可以通过多种方式来创建交互式的网站和 Web 应用程序.利用 JavaScript,可以让你移动 HTML 元素,创建各种各样的自定义动画,给你的访问者更好的终端用户体验. 对于开发人员你来说,有无数的 JavaScript 框架可选择,往往是很难选择最适合您需要的.所以在这篇文章中,我收集了15个有用的和流行的 JavaScript 框架,旨在简化前端应用程序开发. 您可能感兴趣的相关文章 期待已久的2013年度最佳 jQuery 插件揭晓 小伙伴们都惊呆了!8个超炫的

Web开发技术&mdash;&mdash;Javascript Window BOM

JavaScript Window - 浏览器对象模型 浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器"对话". 浏览器对象模型 (BOM) 浏览器对象模型(Browser Object Model)尚无正式标准. 由于现代浏览器已经(几乎)实现了 JavaScript 交互性方面的相同方法和属性,因此常被认为是 BOM 的方法和属性. Window 对象 所有浏览器都支持 window 对象.它表示浏览器窗口. 所有 JavaScript 全局对象.函数以及变量

Web开发技术&mdash;&mdash;JavaScript语法4(分支语句、循环语句)

JavaScript If...Else 语句 条件语句用于基于不同的条件来执行不同的动作. 条件语句 通常在写代码时,您总是需要为不同的决定来执行不同的动作.您可以在代码中使用条件语句来完成该任务. 在 JavaScript 中,我们可使用以下条件语句: · if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码 · if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码 · if...else if....else 语句 - 使用该语