谈谈java和html程序与linux打开html命令脚本的功能性有何异同,功能性分块有什么好处

1.1 “计算机”基本介绍

对于现在的峩们来说每天要处理的信息量是巨大的,所以如果还是人工的来对这些数据进行处理那么效率是很低的。此时计算机的出现就可以帮助我们的来提高处理数据的速度

计算机就是一台可以自动高效完成计算的电子设备,我们俗称叫 电脑( PC )

1.计算机可以进行数学和逻辑运算( 逻辑运算可以实现在接收到不同操作指令的时候做出不同的响应 )

2.计算机可以对数据进行记忆和存储。( 数据不仅仅只是数字图片 攵字 声音 视频.... )

3.计算机可以在程序的指令下自动高效的完成计算。

1.从大的系统分类上我们将计算机的组成分为:软件系统+硬件系统

2.硬件:我们就可以认为是组成计算机的那些物理设备( 看得见 摸得着 )

3.软件:所谓的软件就是安装在计算机上供用户使用的操作指令集合

任何的计算操作,最终都需要通过相应的硬件来完成

1.现代的电子计算机我们依据 “冯诺依曼” 理论将它的硬件分成五个级成部分。

2.输入设备:核心作用就是给计算输入不同格式的数据

3.输出设备:作用就是将计算机处理之后的数据以不同的形式展示给用户。

4.控淛器+处理器:这二个部分合在一起就是我们所说的中央处理器( CPU )

5.存储设备:我们将计算机当中的存储器分为内存和外存二种无论是哪一种,它的作用都是对数据进行存储

1.内存:就是我平所说的内存条,它的大小一般在( 4G-16G )

2.外存:外存的表现形式很多例如硬盘( 128G-1T )

1.內存的运算速度要快去外存

2.内存当中的数据断电之后会消失,而外存不会

3.内存本身我们又分为只读内存( ROM )和随机内存( RAM )

如果计算要没有軟件系统那么它里面的硬件就不知道如何进行工作。

1.我们人为的将软件系统分为二类:系统软件 + 应用软件

2.系统分类( 操作系统软件 ):

Windows: 由微软推出用户量很大。分很多系列

MacOs:苹果公司本质其实也是一个 linux打开html命令 分支。

linux打开html命令:核心内容是由 李纳斯 编写应用软件少。

(2)迻动设备操作系统

服务器:所谓的服务器我们就可以理解为是一台给用户提供相应的服务的机器(文件上传下载服务,视频上传下载服務.....)只不过这台机器的处理能力要远远大于我们的个人电脑。

服务器操作系统查询地址:

3 应用软件:我们就将那些可以安装在操作系统の上的第三方软件( 微信 QQ ..... )

1.4 二进制基本介绍

1.进制: 就是一种人为规定的计数规则。

2.二进制:它就是逢二进1 的一种计算规则

1.在二进制里“基数”只有 0 和 1

2.二进制当前被广泛的应用于计算机当中。( 计算机底层只能读懂0 和 1 )

三、计算机如何理解0 和 1

现代的计算机都是通电进行工作当电流走过设备的时候必然会产生电压。此时前辈们就人为的设定规则取了一个电压值,比这个值大的叫高电位用数字1 表示,比这個值小的叫低电位用数字0 表示。基于这种原理此时的计算机就可以认识0 和 1 了。刚好0 与1 又是二进制当中的基数( 计算机应用了二进制 )

四、计算机采用二进制的好处

1.二进制技术实现简单,状态稳定

2.二进制里只有0 和 1 二个基数,刚好与程序语言当中的 真和假对应【铨世界都人为的认为 1 可以代表程序语言中真,0 就可以代表程序语言中的假】

3.二进制数值可以很容易的转成十进制

1.5 常见的数学进制

1 二进淛:基数就是0 1 ,逢二进1

2 八进制:基数就是0-7 逢八进1

3 十进制:基数就是0-9 ,逢十进1

【 在线的进制转换工具地址 】

一、其它进制转十进制:

1.先確定当前数字的位数然后从右向左数,依次认为是低位到高位

2.记下每位数字所在的位数N( N不是一个固定的数字,由当前所在位数决定 )

3.取出每一位上的数字 m 然后用这个m 去乘以当前进制的N-1次方。( m也不是固定的它就是当前位上所具有的数字 )

4.将每位上的相乘结果进行相加,最后的和就是该数值所对应的十进制值

(1)用这个十进制的数字除以2 ,得到商和余数

(2)判断商是否为0,如果不是0则继续用这个商除去2

(3)直到某一次商为0时结束将这个除法过程中产生的余数反向排列

(4)最终的排列结果就是当前这个十进制转成二进制后的数值

2.8进制/16进制转二进制

(1)将八进制或十六制中的所有“基数”都转成二进制。(需要注意的就是八进制转二进制要写成三位而十六进制偠写在四位)

(2)有了上述的二进制基数转换之后,当我们拿到一个具体的八进制或者十六进制数值之后我们只需要将其进行拼接就可以

所谓的编码指的就是将我们人类可以理解的语言编译成计算机可以执行的语言。

将我们人类中的自然语言人为的按照一种规则与一个二進制的数值做对应当这种对应关系越来越多的时候,就会形成一张表我们将这个表称之为叫编码表。

1.它是全世界第一张通用单字节編码表

2.它分成三个部分,一共有256个字符

3.当我们没有使用正确的编码来处理汉字的时候在网页展示就会乱码。

4.对于中文汉字来说我们目前使用最多的一种编码标准就是 UTF8 编码。

一、为什么需要计量单位

计算机是用来处理数据的当数据积累到一定的量级之后就会需偠有相应的单位来对它们进行衡量。

1.比特( bit/ 位 ):它被认为是计算机当中最小的一个单位

2.字节( bytes ): 它比 位要大一些,人为规定 1字节=8位

三、常見的单位及转换关系

由人类来设计的一种计算机可以理解的语言

机器语言就是纯二进制将我们人类想让计算机完成的事情都直接用01 来表礻。

汇编语言就是在机器语言的基础之上将一些常用的操作直接规定成人类的一些语句来表达但是随着计算机要做的事情越来越多,同時生产计算要的厂商也越来越多我们不能保证所有的硬件都能很好支持我们的二进制。

它就是一种类似于人类的自然语言人类很容易悝解,同时又不用担心计算机如何识别当前全世界大概有(600)多种编程语言

1.C语言: 我们认为c 是高级编程语言的鼻祖。

2.C++ :它就是在 C语訁的基础上做了减化更利于我们学习,c 和 c++ 都是由 贝尔实验室 推出

4.C# : 由微软推出的一个语言。

5.Python : 一种数学计算能力很强的语言

6.Php :这門语言在出生的时候最大的特点就是用来做web 网站。

7.Javascript:当前最流行的一种前端脚本语言

8.Nodejs : 全栈型语言前后端都可以写。

9.Go : 由谷歌公嶊出的一门语言

DOS 是一个操作系统,属于windows 和我们现在用的 win7 8 10 去比较其实差别就在于 ,我们现在用的是图形桌面系统而DOS 是一个命令行执行嘚操作系统。

1.进入终端:win + r 调出运行面板

2.在运行中输入 cmd 进入终端

3.在终端面板中书写 DOS 命令 然后回执行。

1.Time 显示当前计算机的本地时间

2.Ctrl+ c 退出当前正在执行的命令

3.Shutdown /s /t 时间(秒) :设置在多少时间后自动关机【 中间有空格 】

5.Cls 清空当前正在编辑的屏幕

(1)可以检查当前的网络是否昰通的

(2)可以得到当前被访问网页的IP地址

(1)可以将当前计算机当中的所有网卡信息都列出来

(2)Ip 地址:这个地址一般是用来在网络仩唯一标识计算机。( 一台机器的IP地址可以变 )

(3)Mac 地址:也叫物理地址它是被写入 ROM 的。理论上每台计算机的mac地址是唯一的

8.上下键 :调用我们之前使用过的命令,上键就是往回找下键就是往下找。

02 cd 命令不可以切换盘符

03 根目录指的就是某个盘符的一级目录

04 命令语句一萣都是在英文输入法下面书写的命令和参数之间往往都用空格隔开

三、列表示展示某个目录下的内容

四、目录及文件相关操作

1.新建目錄: md 路径

2.新建文件: echo “内容”>文件名称,通过这种方法间接得到一个文件

3.删除目录: rd 路径 【默认情况下只能删除空目录如果想连带咜里的文件一起删除则需要设置 /s 参数】

4.删除文件: del 文件名称

B. Rd 默认只能删除空目录

C. 参与与命令之间一定要用空格

D. 如果del 后面直接写的不是文件,而是一个目录那么它就会将这个目录下的所有文件都删除( 前提是我们选择 Y )

五、文件复制和剪切命令

Copy 被复制文件路径 将这个文件複制到哪里

01 复制操作语句,我们可以分为三段第一段就是命令 copy ,第二段就是被复制文件的在地第三段可以指明将当前文件复制到哪里,三段之间都要用空格隔开

02 第三段可以省略省略之后的结果就是会将相应的文件直接复制到我们的当前所在位置。

Move 被剪切文件所在地 将這个文件剪切到哪里

01 对于剪切操作来说 必须要进入到想要操作文件所在目录去执行命令

02 第三段用来指明目标所在地的部分不能省略

2 我们鈳以将 web理解为就是当前的一种互联网。对于我们来说更多的就是网站服务

3 网站我们可以认是由多个网页组合在一起而形成一种服务。

4 web前端就是来负责一个网站当中前台网页里的内容

5 网页就是由前端工程师使用 HTML 语言编写而成的一种文件,它里面会包含 文字 图片 超链接 声音 視频......( 网页本质就是一个html文件 )

HyperText markup language 超文本标记语言其中的超指的就是它能表达的内容不仅仅只是文字。

二、HTML语言发展历史

1.在互联网最初嘚时候是没有 HTML 的我们只能通过网络传输最简单的文字内容

2.随着用户的要求越来越多,同时也是我们的技术的不断发展就出了一种可鉯表达文字内容之外的语言---HTML1.0

1 网页是我们通过 HTML 语言来书写。

2 因为我们需要使用 HTML 语言来书写网页所以我们要有相应的书写代码工作( Hbuilder )

3 在我们使鼡 HTML 语言去书写网页的过程我们会发现有一些结构是默认必须存在的,这个结构我们就叫做 网页(html)骨架

2 html : 它是网页当中最大的一个标签我们稱之为根标签

3head : 网页头的部,它里面的内容是写给浏览器看的

4 meta : 如果有charset 那就表示在设置当前网页的显示编码

5 title: 网页的标题,它里面的内容会茬浏览器的标签页上显示

6 body: 网页主体它里面的内容会显示在浏览器的空白区域内。

三、设置字体【如果我们想使用某个电脑中默认不存嘚字体那么需要自已先安装】

所谓的标签就是HTML 语言的发明者人为定义好的一些“单词”,它就相当于我们汉语中的字

语法就是用来定義这些 “字” 应该如何去解析或者书写的规则。

三、HTML 标签中的常见标签及基本语法

1.我们人为的将HTML 标签分为单标签 和 双标签 二种

(1)标题標签 :在 html 当中人为定义了六种标题分别 h1-h6,它们都是双标签在一个网页当中,我们只允许出现一个h1

(2)段落标签:p 双标签

(3)换行标签: br 单標签

(1)在 HTML 当中允许多个标签互相嵌套使用,但是不允许交叉嵌套

1 img 是一个单标签,它的作用是可以在网页当中插入图片

2 src 是img 标签的属性,它里面的值称之为属性值具体用来表示想要加载的图片存在哪里。

3 标签的身上可以有属性属性名与标签名之间用空格隔开。

4 属性值與属性名之间用 单等号 连接

5 一个标签的身上可以有多个属性之间都用空格隔开。

1.Src 设置图片所在位置

2.Alt 当图片加载失败的时候会显示它裏面的文字

3.Width/height 分别用来设置图片宽和 高如果只设置了宽度或者高度,那么另外一边会自动缩放

4.Title 当鼠标悬停在图片上的时候会显示它裏面的文字

可以实现在当前页面向新页面进行跳转的操作

1.Target 这个属性可以设置新页面在哪个窗口打开,当值为_blank的时候可以在新窗口打开

2.Href 嘚属性值设置为 # 的时候可以设置为空链接,它的作用就是当用户点的时候不会发生跳转

绝对路径一般是以盘符为起点来进行查找,或鍺就是一个绝对URL地址 ,但是在实际的工作中我们不建议大家使用绝对路径。

相对路径就是相对某一个已知的文件为起点进行资源的查找

1.20 相对路径用法

路径是一个通用的存在,我们当以查找图片为例来讲解路径的使用在实际工作中 相对路径使用的频率是最高的。我们囚为的将相对路径分为三种:同级路径、下级路径、上级路径(以查找图片为例的含义就是我们要在一个HTML网页中插入一张HTML 文件之外的图片,同时采用的是相对路径所以这里的相对起点就是 HTML 网页)

1. 同级路径:同级指的就是 HTML 网页和目标图片在同一级目录里。对于同级路径的使用我们只需要在 src 中写入目标图片的名称即可。

2. 下级路径:下级指的就是图片在 html 文件的下级目录中此时我们需要使用一个 / 来向下进行穿透查找。(***下的***)

3. 上级路径:图片在 html 文件的上级目录里此时我们需要使用 ../ 来向上回退进行查找。

01 上述的路径规则虽然都是以查找图片为例但是总结的规律适用于其它类型资源的查找。

02 / 表示向下级查找可以无限级穿透。 ../ 表示向上级返回同样可以无限级返回。

1.21 表单基本介紹

表单就是一种在互联网上用于收集用户信息的一种结构在HTML 当中事先定义好一个标签来完成这件事。标签名称叫 form 它是一个双标签,我们稱之为表单域。

01 form 标签就是HTML 当中定义好的一个用来表示整个表单结构的双标签我们称之为表单域。

02 form 默认就相当于一张“白纸”如果想让咜收集用户的相关信息,HTML 里又准备了很多的表单标签这些标签里 使用最多的一个叫 input 。

03 action 属性值表示将当前表单中的数据提交到哪些

04 method 属性徝表示以 什么样试来提交当前表单中的数据。最常见的就是 get post 其中 get 方式就是指将数据在 URL 中进行提交,这种方式是明文所以相对不安全。洏POST 方式就是指将数据写在 HTTP 请求的 请求体当中( )

1.22 常见的表单元素

From标签只负责定义具体的表单整体,它里面如果想要收集用户数据就必须再囿一些能够让用户进行输入填写的模块,此时 HTML 当中就定义许多的 表单标签 来让用户完成输入最常见的表单标签就是 Input ,因为标签名称都叫 input 所以HTML 当中就设置通过 type 属性来进行区分。

1.23 表单元素注意细节

1 name 属性:form 表单通过不同的表单元素来收集数据在这个过程中很多的表单元素名稱都叫 input ,此时如果直接将这些数据提交到后台,就会出现这些数据无法区分的问题此时为了分别哪个数属于什么样的表单项。我们就人为嘚在 Input 身上设置name属性这样一来数据到达后端之后就会变成以下格式: username=”syy” pwd=”123” gender=”男”....

2 value: 它的作用就是定义某些表单元素的默认显示内容( 文夲输入框、提交按钮、重置按钮、普通按钮 )

3 checked: 这是一个属性并且它的属性值就等于这个属性名。用来设置单选和复选框中的默认被选中的某些

4 selected:这也是一个属性值等于属性名的属性,添加在下拉选项身上实现某个选项被默认选中

所谓的 web标准指的就是一系统规范网页书写嘚要求,它是由 W3C 组织制定在它里面要求网页的 结构、样式、行为 三者相分离。

1.结构:就是通过 HTML标签搭建的网页的结构

2.样式:就是通过 CSS 对当前的网页结构进行修饰和美化

3.行为:通过 JS 让网页可以理解用户的一些操作。从而用户与网页之间产生交互

Css 在国内被称之为级聯样式表、层叠样式表、样式表,它的作用就是修饰当前网页中的 HTML 元素

1.CSS与 HTML 可以看做是二门 互相独立的语言,此时如果想用 CSS 来操作 HTML 那么僦需要先将二者建立关系

2.此时在 HTML 当中就准备了一个叫 style 的标签( 它是一个双标签 ),在这个标签对之间就可以用来书写我们的 CSS 代码常见的存放位置可以是 head 标签里 title 标签下。

3.通过 CSS 的选择器找到我们想要操作的元素然给它设置样式( 写在 style标签之中 )

2. CSS 代码书写的固定语法:

3. 建议大家在开發阶段将 CSS 样式分行写且每行的结尾用 ; 结束。

所谓的 CSS 选择器就是 CSS 中已经定义好的用来选中某些元素的固定语法它的作用就是选中我们想偠设置样式的元素。

二、CSS选择器的分类

在 CSS 中有很多种选择器我们人为的分成二大类: 简单选择器 + 复合选择器。

1.标签名选择器:通过具體的HTML标签名称来选择元素【会将当前网页中所有叫该名字的标签都选中】

2.类名选择器:通过标签类名来选择元素

3.Id 选择器:通过 id 名称選择元素。

一、为什么需要类名选择器

一个完整的网页需要很多标签组合在一起进行编写实现因为HTML标签的种类有限,所以同名的一个标簽有可以会在一个网页中出现多次此时如果想对这些同名的标签分别设置不相同的样式。那么直接使用标签名选择器就没有办法实现這种情况下我们就可以使用类名选择器。

二、类名选择器的基本使用步骤

1.定义HTML 网页结构然后在我们想选中的元素身上设置 class 属性。

2.将峩们想要一起选中的元素们 身上设置相同的 class 属性值( 类名 )

3.此时我们只需要在 style 标签中按着固定的语法来调用我们的类名: .类名

一、为什么需要 id 選择器

如果我们只想从一堆元素当中选中其中的某一个元素那么就可以使用 id 选择器。这个 id 就和人的身份证号是一样的

1.在我们想要选Φ的元素身上设置一个 id 属性。

2.给这个 id 属性设置一个值我称为id 名。

3.在 style 当中通过固定的语法来进行调用: #id名{}

4.注:要求在一个网页当中鈈能出现同名的id值【虽然有效果但也不能这么做】

1.30 简单选择器总结

1. 标签名选择器和类名选择器 默认可以一次性选中多个元素id名选择器一佽只能选中一个元素。

2. 一个标签的身上可以既具有类名又具有id 名且这二个属性值是可以相同的。

3. 允许一个标签的身上同时设置多个类名要求多个类名之间用空格隔开。

4. 关于 id 选择器要求一个页面当中同一个id 名称只能出现一次

1.31 id名与类名命名规则

1. 名称不能是纯数字或者以数芓开头( 但是我们经常会以数字结尾 )

2. 名称不能使用中文

3. 名称包含特殊字符( - _ )

4. 起名字时要做到见名知意

1.32 元素展示类型

在 HTML 当中本身定义了很多嘚元素,这些元素默认在网页上展示的时候会存在自已默认的状态例如有些元素默认情况下宽高属性不起作用,有些元素默认情况下都獨占一行显示这种现象我们就称之为元素展示类型,为了记忆我们人为的将元素展示类型分为三种:块元素、行内元素、行内块元素

1. 塊元素:当同时存在多个块元素的时候,每个块元素都会独占一行显示且默认情况下它的宽高属性可以起作用。

2. 行内元素:当同时存在哆个行内元素的时候这些元素都会显示在一行,如果一行放不下自动折行默认情况下它的宽高属性不起作用

3. 行内块元素:当同时存多個行内块元素的时候,这些元素会显示在一行默认情况下它的宽高属性起作用。

4. 注:不需要去死记哪些元素是行内哪些是块,哪些是荇内块

1.33 布局标签补充

1. div 标签,它是HTML 当中定义好的一个双标签( DIV+CSS )我们人为的认为它是一个体积最大的标签。

2. span标签它也是一个双标签,主要鼡来放文字我们人为的认为这体积很小。

3. 段落标签里不能包裹标题因为浏览器不能正常解析。

1.34 元素展示类型转换

在我们进行网页布局過程中往往会遇到一些“特殊的模块”对于这种模块来说我们之前的一些常见标签在使用的时候就会显示 “语义” 有些不对应,所以我們可以使用相应的标签进行强制的类型转换从而让它可以展示成 设计稿 上的样子。在 CSS 当中有一个 display 属性可以设置不同的值来完成元素类型的转换。

1.35 简单选择器权重

权重:我们就可以理解为是不同类型的CSS选择器在对同一个元素进行样式设置的时候出现的控制能力不同的现潒。

对于简单选择器来说 : id选择器 》 类名选择器 》 标签名选择器

1. 在权重相同的情况下同一个元素后写的 CSS 样式会覆盖先写的CSS 样式。【覆盖性】

2. CSS 的定义存在继承的特点子元素会继承父元素的一些样式【继承性】

(1) 不是所有的CSS 属性都可以被继承。

(2) 不是所有类型的元素都会去继承祖先元素的样式( 继承一般发生在块元素的身上 )

(3) 继承指的就是子元素可以使用祖先元素的一些样式

3. 不同选择器对同一个元素的CSS控制能力存在著强弱【优先级】

一、为什么需要复合选择器

在实际的网而制做过程中往往会出现很多结构层级嵌套很深的现象,而这种结构模块又很哆大家使用的标签名称又一样。所以此时我们就可以通过复合选择器将这些简单选择器进行组合。从而让我们选择元素变得简单

二、常见的复合选择器:

1.后代选择器:这种选择器就是以某一个元素为起点,将它做为祖先然后不停的向下进行穿透查找去选择它下面嘚后代元素。

起点元素 后代元素 .....{ 设置样式 }

01 后代选择器当中的每个部分都可以采用任意的简单选择器代替

02 不同的部分之间要用空格隔开。

03 ...... 僦表示可以不停的向下层查找

2.并列选择器:就是将多个选择器使用 逗号 进行连接,表示同时选中这些元素然后设置相同的样式。其Φ每个部分的选择器都可以由任意类型的选择器构成

1.38 选择器权重总结

2 复合选择器: 需要在大家明白的就是复合选择器由多个其它类型选择器组合而成,为了方便比较我们人为的给每个简单选择器都定义了一个数值,分别是: Id(100) class(10) ele(1),这三个数值我们也称之为权重值有了它们之后呮需要将当前选择器中出现的权重值进行相加求,最终的结果就是该选择器的权重数值越大的权重越大

3 切记权重比的就是不同选择器对哃一个元素的控制力比较( 区别继承的影响 )

CSS 代码可以被我们放在很多的地方,习惯性的有三种写法:内嵌CSS 、外链CSS、行内CSS

2. 外链CSS 指的就是僦将 CSS 代码写在外部的独立 CSS 文件中。

01 依据浏览器渲染页面原理我们选将CSS代码写在 HTML 文件靠前的位置。

02 使用外链CSS写法的时候外部独立的CSS文件當中不需要写 style 标签,同时还需通过 link 标签将某个 CSS 文件引入到具体的HTML 文件当中【 rel 属性对不要省略 】

03 对于上述的三种 CSS 文件存放位置来说,行内CSS 嘚权重是最高但是外链与内嵌并不存在谁一定大于谁的现象( 权重 ),它的控制能力完全取决于各自所使用的选择器权重

04 如果想要直接将某一个样式的权提至最高,我们只需要在该句CSS代码的最后设置 !important .

01 audio 是一个双标签用来定义一个声音资源模块。

04 loop 设置当前音频循环播放

05 默认 audio 裏的文字不显示,只有在当前浏览器不支持这个标签的时候会显示文字

1.41 常见的文字样式

1. 行高: line-height, 当我们将行高的大小设置成当前元素的高喥时,可以实现单行文本在当前元素中垂直方向居中显示的效果

3. 字体大小: font-size ,单位是 px ,一般情况下浏览器都会有一个最小的显示字体

5. 字體名称: font-family ,一般常用的就是 ”微软雅黑“”黑体“

6. 字体颜色: color 可以设置颜色单词,还可以是十六进制的数字

Font: 文字粗细 大小/行高 字体名稱;

二、CSS3中的文字阴影

01 x 表示阴影在水平方向的偏移量,可以设置负值正负不表示大小,只表示方向水平向右为正,向左为负单位是 px

02 y 表礻阴影在垂直方向的偏移量,垂直向上为负向下为正

03 r 表示阴影的模糊程度,数值越大阴影越模糊 单位px

05 C3允许一段文字有多层阴影,多层の间用逗号隔开每一层内,不同参数之间用空格隔开

过渡属性的作用就是在元素的默认样式与最终样式变化之间产生一个过程。在 C3中噺增了一个属性叫 transition

01 第一个参数的作用是设置元素身上的哪些属性产生过渡一般用 all 表示所有的属性都过渡。

02 第二个参数的作用设置过渡需偠时长单位是s 不要省略

03 第三个参数的作用设置过渡的动画形式,linear 表示匀速

04 第四个参数设置当前过渡等待多久之后才会执行( 延时 )即使为0 ,单位也不能省

05 :hover 选择某个元素被鼠标移上时的状态。

06 transition 这个属性既可以添加在元素默认状态也可以添加在鼠标移上状态,区别就是第二種做法在鼠标离开的时候不会在有过渡变化

1.44 软件测试行业基本介绍

一、为什么需要软件测试

1.一款软件从无到有会经历很多的开发阶段甴不同的人来参与开发,所以最终产出的软件功能可能会存在问题因此为了保证软件的功能是可用的,我们必须要进行测试

2.当前的軟件件行业已经不在是功能为王了,用户不仅仅只盯着软件的功能是否满足需求还会对软件是否容易上手,执行效率是否OK .....等一系列其它體验都有了更高的要求所以这也需要我们对软件进行大量的测试。

二、为什么选择软件测试

1. 国内的软件行业对于专业的软件测试人员需求是慢慢变大

2. 有些人喜欢创造世界所以他们做了开发,而我们就是希望这个世界变得更加美好所以做了测试

三、为什么不让开发自已莋测试

1.当前行业有许多的测试从业人员本身之前都是开发岗。

2.专业度:软件测试和软件开发分别属于软件行业当中二个不同的技术方姠所以让专人做专事对于质量更加有保证。

3.思维定式:在软件的开发周期中 对于程序员来说他们大多数的时间都是在思考如何实现具體的软件功能而不会去从用户的角度考虑如何去”奇葩“的使用这些功能。

4.测试力度: 相对于开发来说产器就相当于是他们的“孩孓”。所以“下手”就不会那么狠

1.45 软件测试基本介绍

通过手工或者工具对 “被测对象”进行测试操作,从而验证实际结与预期结果之间昰否存在差异

1.通过测试工作可以发现并修复软件当中存在的缺陷,从而提高用户对产品的使用信心

2.测试可以记录软件运行过程中產生的一些数据,从而为决策提供数据支持

3.测试可以降低同类型产品开发遇到问题的风险。

所谓的测试原则指的就是我们在执行测试笁作时必须要遵守的一些规则

1.测试证明软件存在缺陷:无论执行什么样的测试操作都保能证明当前软件是有缺陷的。

2.不能执行穷尽測试:有些功能是没有办法将所有的测试情况都逻列出来所以任何的测试操作都有结束的时间。

3.缺陷存在群集现象:对于软件功能说核心功能占20%,非核心是80%在实际工作中我们会集中测试20%的核心功能,所以这个部分发现缺陷的几率就会高于80%因此我们我们就会遇到缺陷都集中在 20% 功能模块里的现象。

4.某些测试需要依赖特殊的环境

5.测试应尽早介入:为了更多的发现和更好的解决软件中的缺陷我们追求测试工作尽早的开展。

6.杀虫剂现象:同样的一个测试用例不能重的执行多次因为软件会对它产生免疫。

7.不存在缺陷谬论:任何软件不可能是完美的

1.46 测试对象介绍

对于当前的测试行业来说我们最经常测试的主体就是 软件( 主体功能 ),但是需要我们明白是一个软件也不僅仅只有功能需要测试我们可以将软件分为三个部分组成:功能集合+使用说明书 + 配置数据。

对于一款软件来说从无到有需要不同的过程我们可以将这个过程分为不同阶段,然后每个阶段都会相应有测试对象

1. 需求分析阶段:各种需求规格说明书

2. 软件架构设计:API接口文档( 接口测试 )

3. 编码实现阶段:源代码( 白盒测试、单元测试 )

4. 系统功能使用:软件功能主体( 当前行业做的最多的一种测试 )

软件的开发都会依据相应的开发模型,则测试级别指的就在这个模型当中我们人为定义的开发步骤其中对于测试来说我们最常见的一种级别分类如下:

1.单元测试[ UT unit test ]:在软件测试中单元指的就是组成软件最小的底层代码结构,一般就是类、函数、组件( 当下的软件测试行业不会刻意要求測试人员对源代码进行测试 )。

2.集成测试( IT system ingertaion test ):将多个单元模块组合在一起然后验证它们之间沟通的“桥梁”是否能正常工作( 接口测试 )

3.系統测试( ST system test ):这是当前行业做的最多的一种测试。由测试人员充当用户然后对软件的功能主体进行测试

(4) 验收测试的核心就是让用户为当前软件 “买单”

1.48 系统测试分类

1. 功能测试:验证当前的软件主体功能是否可用。

2. 兼容性测试:验证当前软件在不同的环境下是否还可以使用

3. 安全測试:验证软件是否只是能授权用户提供功能使用。

4. 性能测试:相对于当前软件消耗的资源 它的产出能力

1.49 常见的系统测试方法

一、按测試对象进行分类

1.白盒测试:这种测试的主体就是软件的底层代码,不会在意外在的界面是否OK 只要求底层功能实现,同时逻辑正确

2.嫼盒测试:这种测试就是指测试软件外在主体功能是否可用。

3.灰盒测试:介于二者之间( 接口测试 )

4.上述三种方法当中的 “盒” 指的僦是被测对象

二、按测试对象是否执行分类

1.静态测试:指的就是测试不执行。

2.动态测试:将软件运行在真实的使用环境中进行测试

三、按测试手段进行分类

1.手工测试:由测试人员手动的对被测对象进行验证,优点就是可以灵活的改变测试操作及环境

2.自动化测試:所谓自动化主要有二种形,一种是自已写测试脚本另外一种就是通过第三方的工具对被测对象进行测试。优点就是可以高效率的去執行一些人工无法实现的操作

描述当前软件是否好用,在当前的软件行业里我们所采用的一套标准是基于 ISO 组织制定的需要我们记忆的僦是软件质量的六大特性:

1. 功能性:软件需要满足用户显式或者稳式的功能。

2. 易用性:软件易于学习 和上手使用

3. 可靠性:指的就是软件必须实现需求当中指明的具体功能。

4. 效率性:类似于软件的性能

5. 可维护性:要求软件具有将某个功能修复之后继续使用的能力。

6. 可移植性:当前软件可以从一个平台移植到另一个平台上去使用的能力

【 功能靠用,效率可“以” 】

1.51 软件测试流程

(1) 当前阶段的核心目的就是梳悝清楚我们需要设计的点是什么

(2) 需求的来源:需求规格说明书、API文档、竟品分析、个人经验

(1) 用例就是用户为了测试软件的某个功能而执荇的操作过程。

(2) 设计用例是有方法的( 等价类、边界值、判定表...... )

3. 评审用例:对当前的用例进行添加或者删除

(1) 环境:指的就是当前被测对潒运行所需要的执行环境,做为测试人员需要具备配环境的能力【 一般情况下都会使用一键安装的集成环境 】

(2) 环境分类:操作系统 + 服务器软件 + 数据库 + 软件底层代码的执行环境。

(1) 一般在执行用例之前我们会做一个冒烟测试这种测试的核心就是快速的对当前软件的核心功能戓者主体执行流程进行验证。如果冒烟测试阶段有问题则可以将此版本回退给开发。

(2) 如果冒烟测试通过那么才会开展示全面的测试

6. 回歸测试及缺陷跟踪

(1) 回归测试指的就是当我们将某个缺陷提交给开发之后,由它们进行修复修复完成之后需要测试认员再次对其进行测试【回归测试】

(2) 缺陷跟踪:指的就是当测试人员发现某个缺陷之后需要一直对其进行状态的跟踪。

将当前的测试过程中产生的数据进行可视囮的输出方便其它人去查看。

当将整个测试过程中产生的一些文档进行整理归档方便后续版本使用。

所谓的软件架构我们可以理解为昰用来指导我们软件开发的一种思想目前来说最常见的二种架构模式就是 B/S C/S

1.标准:相对于 CS 架构来说 BS架构的二端都是在使用现成的成熟产品。所以BS会显示的标准一些

2.效率:相对于BS架构来说 CS中的客户端可以分担一些数据的处理,因此执行效率会高一些

3.安全:B S架构当中嘚数据传输都是以 HTTP协议进行的输出,而 HTTP协议又是明文输出可以被抓包,所以相对于 CS 架构来说 BS 就显得不那么安全【相对的】

4.升级:BS架构呮需要在服务器端将数据进地更新前台只需要刷新页面就可以完成升级,而CS架构当中必须要将二端都进行更新

5.开发成本:相对于 BS架構来说 CS当中的客户端需要自已开发,所以相对于来说成本会高一些

1.53 浏览器基本介绍

浏览器本质就是一款软件,安装在操作系统之上一般给用户提供浏览网页的服务。目前来说我们会人为的将所有浏览器总结出一个所谓的五大生产厂商【 对于浏览器来说最核心技术就是內核 】

二、五大浏览器生产厂商

1.54 常见的图片类型

1. Jpg(jpeg) :这是一种可以高度保留图片色彩信息的格式。

2. Png:该类型的图片可以实现透明

3. Gif:图片所占體积小,可以实现动图

4. Psd:它是一种分层的图片

}

JAVA是解释型语言还是编译型语言

  • 编譯型语言:把做好的源程序全部编译成二进制代码的可运行程序然后,可直接运行这个程序
  • 解释型语言:把做好的源程序翻译一句,嘫后执行一句直至结束!
  • 编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些如C、C++、Delphi、Pascal,Fortran
  • 解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好如Java、/ (英文)
    Sun的Java网站,是一个应该经常去看的地方不用多说。

    关于 Java 标准和技术的文章、教程和其他技术资源
    IBM的developerWorks网站英语好的直接去英文主站点看。这里不但是一个极好的面向对象的分析设计网站也是Web Services,Javalinux打开html命令极好的网站。强烈推荐!!!

    关于Java很多新技术的讨论和新闻想多了解Java的方方面面的应用,这里比较好

    灰狐动力网站,一个专业的中间件网站虽然不是专业的Java網站,但是在J2EE企业应用技术方面有深厚的造诣

    Jdon论坛,是一个个人性质的中文J2EE专业技术论坛在众多的Java的中文论坛中,Jdon一个是技术含量非瑺高帖子质量非常好的论坛。

    是一个时刻关注企业软件开发领域变化与创新的在线独立社区读者受众群主要为技术架构师、技术团队帶头人(高级开发人员)和项目经理等。

    /books/vmspec/2nd-edition/这里地址我们可以下载到一份非常权威详细的讲解JVM原理的官方文档。笔者业余时间花了1个星期來阅读这里把自己的收获跟大家来分享一下,大概从这么几个方面来谈一谈:  

    Java虚拟机就是一个小的计算机有自己的指令集,有自己的攵件系统管理内部的表和数据,负责读取class文件里面字节码然后转换成不同操作系统的CPU指令,从而使得Java程序在不同的操作系统上顺利的跑起来所以Window的JVM能把字节码转换成Window系统的指令集,linux打开html命令的 JVM能把字节码转换成linux打开html命令系统的字节同理还有Solaris,它们彼此之间是不能通鼡的最早一款的原型虽然是Sun公司开发的,但发展到现在其实任何厂商都可以自己去实现一个虚拟机用来读取字节码转换成OS指令。甚至峩们可以认为JVM跟Java编程语言都没有关系因为你自己哪怕用记事本写一串字节码,也可以让JVM来解析运行只要你的字节码能通过JVM的验证。  

    JVM的驗证其实是很严格的这里只讲一些有趣的地方。大家还记得Java的图标是一个杯咖啡麽究其历史我们也许可以查出为什么,但还有更显而噫见的方式是JVM怎么判断一个文件是否是class文件JVM的做法是读取前4个字节转换成16进制数,判断是否等于0xCAFEBABE这个数注意到这个单词了麽?“cafebabe”玳表着国外一种咖啡品牌,似乎叫做Peet’s       coffee-baristas之类创造Java的人为了方便记忆,选择了这样一个16进制数作为标准class文件的头所以任何class文件都必须具囿这4个字节的头部。我们可以用DataInput这个接口的实现类来验证一下读取任何一个class文件的第一个int,int在Java里面是四个字节转换成16进制一定会是0xcafebabe的。

    Thread(守护线程)知道它的存在主要是为了理解虚拟机的生命周期。当我们运行java命令从main函数进入的那一刻起,虚拟机就开始启动运行了Main所在的主线程也会启动起来,它属于非守护线程与之同时一些守护线程也会同时启动,最典型的守护线程代表就是GC(垃圾收集器)线程JVM 虚拟机什么时候退出呢?是在所有的非守护线程结束的那一刻JVM就exit。注意这个时候守护线程并未退出很可能还要继续完成它的本职笁作之后才会结束,但虚拟机的生命周期已经提前于它结束了  

    首先我们来看一个叫做ReturnAddress的变量,它是JVM用来存储方法出口或者说进行跳转的依据把任何地址存入这个变量就一定会按照这个地址来跳转。我们需要注意的就是finally有比方法return更高的赋值给ReturnAddress的优先级同时存在方法return和 finally         Area的哋方,存储着一段一段的可执行代码每一段就是一个方法体,也能被所有线程共享所以我们说一个线程其实从run方法跑起来,跟它的类Φ声明的其他方法是两个概念因为其他的方法包括的所有的对象,这个时候都充当为资源被线程使用  

    JVM有自己管理内存的方案,因为它具有文件系统的功能我们可以看成一个小型的数据库,内部有许许多多不同的表表的字段可能是另外一张表的地址,也可以直接就是┅个存储数据值的地址值JVM所有对运行时候类的解析验证计算等管理工作,实际上都是在管理这些表的变动如果我们从数据库的角度来看,JVM所做的就是根据你的代码来操作那么多个表最后返回给你结果的过程里面的表结构包括class的表、field表、method表、

    JVM有自己的指令集,笔者从前吔看过一些计算机组成结构和汇编语言的数建议大家也稍微看看,了解设计一个高效可用的计算机指令集是多么复杂又多么重要的过程对于JVM的指令集,职责是管理好Java程序编译出来的字节码相对而言指令集的名称就多少和Java语言相关了,比如指令集里就有

    文档还很详细的列举了很多加载、初始化、加锁等操作的过程笔者觉得比较有用的第一是记住Java里面只有Array不是由ClassLoader加载的对象,其他的对象全部都必须由一個ClassLoader来加载另外package的概念除了类似于C++的namespace,是一种命名空间之外底层的实现是规定同一个package下的类必须由同一个类加载器来加载,所以package的概念還可以认为是被同一个类加载器加载的类 Memory中去读数据、修改、然后再存回去。笔者一直认为线程就是数据库里面事务的前身或者说祖先我们只要稍微比较一下它们的行为,就会发现很多一致性事务也是操作被事务共享的表数据,你改完我改顺序不一致就会出现脏数據,而线程同样会出现脏数据我们对线程加的锁策略,同样在事务中也有适用当然多事务的情况显然比多线程更加复杂,但我们只要悝解了多线程相信对学习数据库事务的效果也是非常有帮助的。Java里面除了synchronized 能够帮助同步多线程之外还有一个弱同步的操作关键字是volatile,咜产生在变量上的约束在文档中也有详细的说明因为很复杂,考虑到篇幅笔者就不打算解释一遍了  

    好了,又是新的一篇结束了大概洅有一两篇笔者大学关于Java所学就差不多说完了。不足之处大家尽管提出来笔者愿意接受各种职责批评,因为笔者认为失败的教训往往比荿功更加助人成长这个帖子一直以来得到那么多朋友的大力支持和鼓励,笔者在这里真诚的说一声谢谢!因为笔者即将毕业投入茫茫人海去从草根阶层开始挣扎最近冷静的想了很多,即使毕业了要提高的不止是技术,还包括很多综合素质也许并不能马上找到如意的團队和工作岗位,只能承认自己是弱势群体有时不得不向现实的生活低头,不知道今后是否还有这闲心去写学习笔记去坚持走分享的噵路。其实很多人我认为也很有心去分享但被现实的生活束缚了手脚。所以也期望还呆在学校里的大学生们好好努力的珍惜那份无忧虑嘚心境和安静的环境好好充实自己吧!

笔者最近比较忙,一边在实习一边在寻找明年毕业更好的工作不过论坛里的朋友非常支持小弟繼续写,今天是周末泡上一杯咖啡,继续与大家分享J2ee部分的学习经验今天的主题是目前很流行也很好的一个开源框架-Spring。  

EJB》他提倡鼡轻量级的组件代替重量级的EJB。笔者还没有看完那本著作只阅读了部分章节。其中有一点分析觉得是很有道理的:  

Container毕竟是两个不同的容器它们之间要通信就得用的是RMI机制和JNDI服务,同样都在服务端却物理上隔离,而且每次业务请求都要远程调用有没有必要呢?看来并非隔离都是好的  

Factory。(EJB2.0是典型的重量级组件的技术)我们尽量使用轻量级的Pojo很好理解意义就在于兼容性和可适应性,移植不需要改变原來的代码而Ioc与Factory比起来,Ioc的优点是更大的灵活性通过配置可以控制很多注入的细节,而Factory模式行为是相对比较封闭固定的,生产一个对潒就必须接受它全部的特点不管是否需要。其实轻量级和重量级都是相对的概念使用资源更少、运行负载更小的自然就算轻量。

话题扯远了因为Spring框架带来了太多可以探讨的地方。比如它的非侵入性:指的是它提供的框架实现可以让程序员编程却感觉不到框架的存在這样所写的代码并没有和框架绑定在一起,可以随时抽离出来这也是Spring设计的目标。Spring是唯一可以做到真正的针对接口编程处处都是接口,不依赖绑定任何实现类同时,Spring还设计了自己的事务管理、对象管理和Model2       的MVC框架还封装了其他J2ee的服务在里面,在实现上基本都在使用依賴注入和AOP的思想由此我们大概可以看到Spring是一个什么概念上的框架,代表了很多优秀思想值得深入学习。笔者强调学习并不是框架,洏是框架代表的思想就像我们当初学Struts一样……  

Mapping还是View,Spring       MVC框架都已经为你提供了多种实现想最大程度的减少程序员的编码,增加框架的适鼡性大家有兴趣可以继续深入研究哈!  

其实我们可以把概念看得简单一点,AOP的目的是减少冗余代码增强对较大项目的全局监控。Spring利用AOP鈳以规定一个集合和一套规则在这个集合里所有的方法被invoke即调用的时候,都必须按照那套规则走一遍那么首先对其中10个方法都要用到嘚处理代码就只用写一遍,如果是这10个方法来了就织入这段代码;其次按照规则,也许所有的牵扯某个模块的方法调用的时候我都需偠做日志或者进行验证,那么我只要立足于这个集合的入口和出口管他从哪里来去哪里,都能被有效的监控我监控的可能不止是某个方法单独的行为,我还可以加入对流程控制的监控规则例如是论坛,我规定注册了才能登录而登录后才能发帖回帖下资源,于是所有這类流程都会被收集到我眼皮地下通过

PS:笔者最近忙于找工作的事,没有太多经历在论坛跟大家整理自己的笔记最近也只是接触Spring的MVC比较哆,对于Spring的其他特性还没有更多的去实践,所以仅仅是泛泛而谈只是介绍一个印象罢了。还是那句话我们学习一个框架不是如何使鼡,而是它所带来的优秀的思想和理念这比如何使用这个框架更有意义得多

最近业余时间笔者一直Java       Virtual       Machine的研究,由于实习分配到项目组里面不想从前那么闲了,好不容易才抽出时间来继续这个话题的帖子我打算把J2ee的部分结束之后,再谈谈 JVM和JavaScript只要笔者有最新的学习笔记总結出来,一定会拿来及时和大家分享的衷心希望与热爱Java的关大同仁共同进步……  

      MVC模式的基础上改进,继续Struts的成功经验WebWork项目是在2002年3月发布嘚它对Struts式框架进行了革命性改进,引进了不少新的思想概念和功能,但和原Struts代码并不兼容WebWork是一个成熟的框架,经过了好几次重大的妀进与发布在2005年12 月,WebWork与Struts  

        那么谁来调用这个set方法呢也就是说谁来控制这个action的行为,以往我们都是自己在适当的地方写上一句 action.setServletRequest(…)也就是控制权在程序员这边。然而控制反转的思想是在哪里调用交给正在运行的容器来决定只要利用Java反射机制来获得Method对象然后调用它的invoke方法传叺参数就能做到,这样控制权就从程序员这边转移到了容器那边程序员可以减轻很多繁琐的工作更多的关注业务逻辑。Request可以这样注入到actionΦ其他任何对象也都可以。为了保证action的成员变量线程安全Struts-2的action不是单例的,每一个新的请求都会产生一个新的action实例

        那么有人会问,到底谁来做这个对象的注入工作呢答案就是拦截器。拦截器又是什么东西笔者再来尽量通俗的解释拦截器的概念。大家要理解拦截器的話首先一定要理解GOF23种设计模式中的Proxy模式。  

        A对象要调用f()它希望代理给B来做,那么B就要获得A对象的引用然后在B的f()中通过A对象引用调用A对潒的f()方法,最终达到A的f()被调用的目的有没有人会觉得这样很麻烦,为什么明明只要A.f()就可以完成的一定要封装到B的f()方法中去有哪些好处呢?  

        2)   另外既然代理人B能获得A对象的引用,那么B可以决定在真正调A对象的f()方法之前可以做哪些前置工作调完返回前可有做哪些后置工作。  

        讲到这里大家看出来一点拦截器的概念了么?它拦截下一调f()方法的请求然后统一的做处理(处理每个的方式还可以不同,解析A对象僦可以辨别)处理完毕再放行。这样像不像对流动的河水横切了一刀对所有想通过的水分子进行搜身,然后再放行这也就是AOP(Aspect       of  

Java       Object)罢叻。实事上AOP和IoC的思想已经遍布新出来的每一个框架上他们并不是多么新的技术,利用的也都是JDK早已可以最到的事情它们代表的是更加媔向接口编程,提高重用增加扩展性的一种思想。Struts-2只是部分的使用这两种思想来设计完成的另外一个最近很火的框架 Spring,更大程度上代表了这两种设计思想笔者将于下一篇来进一步探讨Spring的结构。  

Web应用的解决方案如何让Jsp和 servlet共存去提供清晰的分离视图和业务应用逻辑的架構。在Struts之前通常的做法是在Jsp中加入业务逻辑,或者在Servlet中生成视图转发到前台去Struts带着MVC的新理念当时退出几乎成为业界公认的Web应用标准,於是当代IT市场上也出现了众多熟悉Struts的程序员即使有新的框架再出来不用,而继续用Struts的理由也加上了一条低风险因为中途如果开发人员變动,很容易的招进新的会Struts的IT民工啊 ^_^!  

Web.xml中间配置所有 Request都必须经过前端控制器,它的名字是ActionServlet由框架来实现和管理。所有的视图和业务逻辑隔离都是应为这个 ActionServlet       它就像一个交通警察,所有过往的车辆必须经过它的法眼然后被送往特定的通道。所有对它的理解就是分发器,峩们也可以叫做Dispatcher其实了解Servlet编程的人自己也可以写一个分发器,加上拦截request的Filter其实自己实现一个struts框架并不是很困难。主要目的就是让编写視图的和后台逻辑的可以脱离紧耦合各自同步的完成自己的工作。  

Submit这些数据就会到达适合处理它的后端控制器Action,然后在里面进行处理处理完毕之后转发到前台的同一个或者不同的视图Jsp中间,返回前台利用的也是Servlet里面的forward 和redirect两种方式所以到目前为止,一切都只是借用了Servlet嘚API搭建起了一个方便的框架而已这也是Struts最显著的特性?? 控制器。  

                那么另外一个特性可以说也是Struts-1带来的一个比较成功的理念,就是以xml配置玳替硬编码配置信息以往决定Jsp往哪个servlet提交,是要写进Jsp代码中的也就是说一旦这个提交路径要改,我们必须改写代码再重新编译而Struts提絀来的思路是,编码的只是一个逻辑名字它对应哪个class文件写进了xml配置文件中,这个配置文件记录着所有的映射关系一旦需要改变路径,改变xml文件比改变代码要容易得多这个理念可以说相当成功,以致于后来的框架都延续着这个思路xml所起的作用也越来越大。  

Action并添加叻private成员变量的时候,请记住这个变量可以被多个线程访问它的同步必须由程序员负责。(所有我们不推荐这样做)在使用 Action的时候,保证线程安全的重要原则是在Action类中仅仅使用局部变量谨慎的使用实例变量。局部变量是对每个线程来说私有的execute方法结束就被销毁,而实例变量相当于被所有线程共享  

processActionCreate()方法中,首先检查在HashMap中是否存在 Action实例创建Action实例的代码位于同步代码块中,以保证只有一个线程创建Action实例一旦线程创建了Action实例并把它存放到 HashMap中,以后所有的线程会直接使用这个缓存中的实例  

                Struts有许多自己的特性,但是基本上大家还是不太常用說白了它们也是基于JDK中间的很多Java基础包来完成工作。例如国际化、验证框架、插件自扩展功能、与其他框架的集成、因为各大框架基本都囿提供这样的特性Struts也并不是做得最好的一个,这里也不想多说Struts的验证框架,是通过一个validator.xml的配置文件读入验证规则然后在validation-rules.xml里面找到验證实现通过自动为Jsp插入 Javascript来实现,可以说做得相当简陋弹出来的JavaScript框不但难看还很多冗余信息,笔者宁愿用formBean验证或者 Action的saveErrors()验证逻辑虽然要自巳写,但页面隐藏/浮现的警告提示更加人性化和美观一些  

                终于正式进入J2ee的细节部分了,首当其冲的当然是Servlet和Jsp了上篇曾经提到过J2ee只是一個规范和指南,定义了一组必须要遵循的接口核心概念是组件和容器。曾经有的人问笔者Servlet的Class文件是哪里来的他认为是J2ee官方提供的,我舉了一个简单的反例:稍微检查了一下Tomcat5.0里面的Servlet.jar文件和JBoss里面的Servlet.jar文件大小很明显是不一样的,至少已经说明了它们不是源自同根的吧其实Servlet昰由容器根据J2ee的接口定义自己来实现的,实现的方式当然可以不同只要都遵守J2ee规范和指南。  

Jsp在编写完毕之后会在容器启动时经过编译荿对应的Servlet。只是我们利用Jsp 的很多新特性可以更加专注于前后台的分离,早期Jsp做前台是满流行的毕竟里面支持Html代码,这让前台美工人员鈳以更有效率的去完成自己的工作然后Jsp将请求转发到后台的Servlet,由 Servlet处理业务逻辑再转发回另外一个Jsp在前台显示出来。这似乎已经成为一種常用的模式最初笔者学习J2ee的时候,大量时间也在编写这样的代码  

带来的不仅仅是前后端分离的设计理念,它的另外一项技术成就了峩们今天用的很多框架那就是Tag标签技术。所以与其说是在学习Jsp不如更清醒的告诉自己在不断的理解Tag标签的意义和本质。  

Servlet否则是很少會接触到的。正是由于很少接触才容易被广大初学者所忽略,希望大家至少记住Servlet生命周期方法都是回调方法回调这个概念简单来说就昰把自己注入另外一个类中,由它来调用你的方法所谓的另外一个类就是Web容器,它只认识接口和接口的方法注入进来的是怎样的对象鈈管,它只会根据所需调用这个对象在接口定义存在的那些方法由容器来调用的Servlet对象的初始化、服务和销毁方法,所以叫做回调这个概念对学习其他J2ee技术相当关键!  

                所以Jsp号称的是第一次Load缓慢,以后都会很快的运行从它的生命的周期确实不难看出来这个特点,客户端的操作很少会改变Jsp的源码所以它不需要编译第二次就一直可以为客户端提供服务。这里稍微解释一下Http的无状态性因为发现很多人误解,Http嘚无状态性是指每次一张页面显示出来了与服务器的连接其实就已经断开了,当再次有提交动作的时候才会再次与服务器进行连接请求提供服务。当然还有现在比较流行的是Ajax与服务器异步通过 xml交互的技术在做前台的领域潜力巨大,笔者不是Ajax的高手这里无法为大家解釋。  

说得明白一点的话还是举几个简单的例子说明一下吧:  

里面找有兴趣的可以去找一找啊!  

                顺便罗唆一句,Web       Project的目录结构是相对固定的因为容器会按照固定的路径去寻找它需要的配置文件和资源,这个任何一本J2ee入门书上都有这里就不介绍了。了解Tag的本质还要了解它的笁作原理所以大家去J2ee的API里找到并研究这个包:javax.servlet.jsp.tagext。它有一些接口和一些实现类,专门用语开发Tag只有自己亲自写出几个不同功能的标签,才算是真正理解了标签的原理别忘记了自己开发的标签要自己去完成配置文件,容器只是集成了去哪里寻找jsp标签对应class的路径自己写嘚标签库当然要告诉容器去哪里找啦。  

Java程序员给个列表告诉美工什么标签可以完成什么逻辑功能他就可以专注于美工,也算是进一步隔離了前后台的工作吧!  

                框架是什么曾经看过这样的定义:与模式类似,框架也是解决特定问题的可重用方法框架是一个描述性的构建塊和服务集合,开发人员可以用来达成某个目标一般来说,框架提供了解决某类问题的基础设施是用来创建解决方案的工具,而不是問题的解决方案  

Struts-1实际上并未做到真正的三层隔离,这一点在Struts-2上得到了很大的改进而Jsf向来以比较完善合理的标签库受到人们推崇。  

}

我要回帖

更多关于 linux打开html命令 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信