您的位置:首页 > Web前端 > JavaScript

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

2016-05-10 21:08 211 查看
全端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中的镜像可以有父镜像,但基础镜像没有父镜像。
第十三章:测试和文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: