JavaWeb的一些理解

WEB概述

WEB是什么

WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。

Internet上的资源分类

Internet上供外界访问的Web资源分为:

静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。

动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。

静态web资源开发技术

Html、CSS、javaScript

常用动态web资源开发技术:

JSP/Servlet、ASP、PHP等

在Java中,动态web资源开发技术统称为Javaweb,我们课程的重点也是教大家如何使用Java技术开发动态的web资源,即动态web页面。

CS、BS之争

 

B/S: Browser-Server 浏览器服务器模型 WEBQQ 网页游戏
优点: 不需要下载客户端程序, 使用浏览器可以直接访问. 程序的升级操作是在服务器端进行的. 浏览器只需要刷新页面就可以看到升级后的效果
缺点: 浏览器具有一定的局限性, 页面的展示能力仍然是很差. 所有的页面数据都需要从服务器实时的获取, 所以对网速的依赖很高
C/S: Client-Server 客户端服务器模型 QQ LOL
优点: 客户端可以任意的设计, 页面的展示能力就可以很强. 由于大量的资源都已经保存在了客户端, 和服务器交互的仅仅是一些变化的数据, 所以对网速的依赖很低
缺点: 第一次使用时需要下载客户端程序, 一旦程序需要升级操作, 所有的客户端程序都需要升级. 在有些场景中是不能被接受的.
===============================================
二、HTML 
2.1.HTML是什么
超文本标记语言 最基础的网页语言 W3C
HTML不是一门编程语言 而是一门标记语言
HTML是用标记(标签/元素)来描述网页内容的
HTML是文档的一种

-------------------------------------------
2.2.HTML的结构
<!DOCTYPE HTML>
<HTML>
<HEAD></HEAD>
<BODY></BODY>
</HTML>
<!DOCTYPE HTML>用来指定当前页面所遵循的html的版本,不写默认是html5.0
<HEAD>头部分用来存放html页面的基本属性信息,优先被加载
<BODY>体部分用来存放页面数据,是可见的页面内容

<title></title>指定网页的标题
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />其中的charset的值用来指定浏览器用什么编码解析当前页面

-------------------------------------------
2.3.HTML语法
html标签分为开始标签和结束标签,如果标签内没有修饰的内容, 开始标签和结束标签可以合并为一个自闭标签
如: <br/> <hr/> <meat/>

标签通常都可以具有属性, 属性与属性值用"="连接, 属性的值可以用双引号、单引号引起来或者不用引号, 一般会用双引号引起来

<!-- html的注释 -->

html中多个连续的空白字符(制表符,空格,换行)默认会合并为一个空格来显示
如果非要输入空格,可以用转义字符来替代 &nbsp;
如果非要输入换行,可以用 <br/> 来代替

***转义字符
< &lt;
> &gt;
" &quot;
' &apos;
空格 &nbsp;

-------------------------------------------
2.4.font标签
用来指定文本的字体/大小/颜色 
color:指定字体颜色 
值可以指定为颜色名 如:red 
或 十六进制的颜色值 如:#000000 
或 rgb三原色值 如:rgb(255,255,255)

-------------------------------------------
2.5.标题标签
指定特定样式字体的一组标签 (掌握)
<h1>一级标签</h1>
<h2>二级标签</h2>
<h3>三级标签</h3>
<h4>四级标签</h4>
<h5>五级标签</h5>
<h6>六级标签</h6>
属性:
align:指定文本的排列
left 
center 
right 
justify

-------------------------------------------
2.7.列表标签
定义列表
<dl> 包裹定义列表
<dt> 列表的标题项
<dd> 列表的内容项、

有序列表
<ol> 开启有序列表
<li> 定义列表中的项
属性:
start:规定列表从第几项开始
type:定义列表数字的格式
1,a,A,i,I
无序列表
<ul> 定义一个无序列表
<li> 定义列表中的项
属性:
type:定义项目符号的类型
disc square circle

-------------------------------------------
2.8.img标签 -- 图像标签
<img src="图片的路径" alt="代替图像显示的文本"/>
必选属性:
src:图片的路径
alt:代替图像显示的文本
可选属性:
width:宽度 px %
height:高度 px %
border:边框的宽度 px

-------------------------------------------
2.9.超链接 -- <a> 锚 
用于指向当前位置以外的资源
(1) 用于创建指向另外一个文档的超链接
(2) 用于在当前页面的不同位置之间进行跳转
重要属性:
href: 所指向资源的URL
name: 指定锚的名字
target: 指定浏览器打开目标URL的方式。
_blank 在新窗口中打开目标url
_self 在当前窗口中打开目标url

-------------------------------------------
2.10.表格标签 -- <table>
<table> 定义一个HTML表格
<tr> 定义表格中的行
<td> 定义表格中的单元格
<th> 定义表格中的表头
table的重要属性:
border 边框宽度
cellspacing 单元格之间的空白
cellpadding 边框与单元格内容之间的距离
bgcolor 背景颜色
bordercolor 边框颜色
width 宽度
align 对齐方式
tr重要属性:
align 对齐方式
bgcolor 背景颜色
th/td重要属性:
align 对齐方式
bgcolor 背景颜色
width 宽度
height 高度
colspan 可横跨的列数
rowspan 可竖跨的行数
<caption> 定义表格的标题

-------------------------------------------
2.11.表单
(1)浏览器向服务器发送数据的方式, 有两种
a)利用超链接向服务器发送数据 -- 请求参数
在超链接的后面拼接上要发送的请求参数, 链接和请求参数之间用?分割, 参数名和参数值用 = 连接, 多个参数之间用 & 分割, 可以存在多个同名的参数

b)利用表单向服务器发送数据
利用HTML中的<form>标签以及一些表单项标签, 用户可以输入数据, 通过提交表单发送数据给服务器

(2)form标签
必须存在的属性:
action: 指定表单发送的目标URL地址
可选的属性:
method: 指定以何种方式发送表单
http协议指定了7种提交方式, 其中5种不用, 只用GET提交和POST提交
只有使用表单并且明确的指定提交方式为post时(也就是设置method="POST")才是POST提交,其他提交都是GET提交.

GET提交和POST提交的区别:
主要区别体现在数据传输方式的不相同
a)GET提交: 请求参数会赋在地址栏后进行传输
这种方式发送的数据量有限, 最大不超过1kb(或4kb)
数据显示在地址栏, 安全性差

b)POST提交: 请求参数在底层流中传输
这种方式发送的数据量无限制
地址栏上看不到数据, 比较安全

-------------------------------------------
2.13.表单中的项
表单中可以有多个输入项,输入项必须有name属性才可以被提交,如果输入项没有name属性,则表单在提交时会忽略它
(1)<input> 输入框
重要属性:
type属性
文本框 text 输入的文本信息直接显示在框中

密码框 password 输入的文本以圆点或者星号的形式显示

单选框 radio 进行单项的选择 如性别选择 多个radio的name属性相同会被当作一组来使用 必须用value为选项指定提交的值

复选框 checkbox 进行多项选择,爱好的选择。 多个checkbox具有相同的name属性时会被当作一组来使用 必须用value为选项指定提交的值

隐藏字段 hidden 如果有一些信息,不希望用户看见,又希望表单能够提交,就可以用隐藏字段隐含在表单中

提交按钮 submit 实现表单提交操作的按钮 可以通过value属性指定按钮显示的文字

重置按钮 reset 重置表单到初始状态

按钮 button 普通按钮, 没有任何功能 需要配合JavaScript为按钮指定具体的行为。可以用value属性指定按钮显示的文字。

文件上传项 file 提供选择文件进行上传的功能。

图像 image 利用一张图片替代提交按钮的功能, 不常用 

name属性
表单中可以有多个输入项,输入项必须有name属性才可以被提交,如果输入项没有name属性,则表单在提交时会忽略它. 另外name属性的值是可以重复的

value属性 可以给input输入框设置一个初始值

readonly属性
使当前输入项变为只读,不能修改,但是提交时仍会被提交

disabled
使当前输入项不可用,不能修改值,也不会被提交

size属性
指定当前输入框的宽度

checked属性
指定单选框/复选框被选中

(2) <textarea> 文本域
属性:
rows 指定文本域的行数(高度)
cols 指定文本域的列数(宽度)
readonly 只读
disabled 禁用

(3) <select> <option>
select 提供下拉选择功能
option 下拉选框中的选项 可以用value属性指定提交的值,如果不指定,将会提交标签内的文本
重要属性:
name: 下拉列表的名称
size: 设置下拉选项中可见选项的个数
disabled 禁用下拉选框
multiple 是否支持多选
-------------------------------------------

一. xml概述

1.1.xml是什么?

Extensible Markup Language 可扩展标记语言。
标记语言:不止存储文本内容,也存储和内容相关的其他信息
W3C 1998 1.0
xml是一种数据存储格式, 本质上就是一段字符串。

xml是如何来保存数据的?
xml中允许用户自定义标签, 标签分为开始标签和结束标签。开始标签和结束标签之间可以嵌套其他的标签。
正是利用标签来保存数据, 利用标签之间嵌套关系来保存数据之间的层级关系。

1.2.xml的应用场景
(1)传输数据
由于xml本质上是一段字符串, 具有跨平台的特性, 因此可以在不同系统之间进行数据交换。
(2)用作配置文件
由于xml可以保存有结构的数据, 因此xml常被用来用作应用程序的配置文件。
1.3.xml文件
编写一个xml文件

1.4.xml校验
校验xml文件 

二. 语法
2.1.文档声明
用来声明当前xml基本属性信息的, 解析器会根据文档声明来决定如何解析xml文件。

注意:
一个xml文件必须包含且只能包含一个文档声明。
文档声明必须放在xml文件的第一行,前面不能有任何内容。
如果一个xml文件没有包含文档声明, 则该xml是一个不符合规范的xml文件。
写法:
<?xml version="1.0"?>
version用来声明当前xml所遵循的xml规范, 目前就是1.0
<?xml version="1.0" encoding="UTF-8"?>
encoding用来声明当前xml所使用的字符集编码, xml解析器在解析xml的时候,会根据encoding属性所指定的编码来解析xml文件。
注意: 文件在保存时所使用的编码要和encoding属性所指定编码相同, 才可以避免乱码问题。
<?xml verison="1.0" encoding="UTF-8"? standalone="yes">
standalone用来声明当前文档是否独立, 如果xml文档不依赖其他的文档而存在, 表明当前文档是一个独立的文档, 可以指定值为yes, 如果当前文档需要依赖其他的文档而存在, 需要指定值为no。

2.2.元素
◇ 一个标签(标记)就是一个元素。
◇ 标签分为开始标签和结束标签, 在开始标签和结束标签之间的文本称之为标签体。
◇ 如果一个标签既不包含标签体, 也不包含其他的子标签, 可以把开始标签和结束标签合并成一个自闭标签。
◇ 标签要合理的嵌套, 不能出现交叉嵌套。
◇ 一个xml文件有且仅有一个根标签。
◇ 元素的命名规范:
区分大小写。 如:<P>和<p>是两个不同的标签。
不能以数字或标点符号开头。
不能以xml(XML, Xml)开头。
不能包含空格 如:<a b>
不能包含冒号 如:<a:b>
易犯错误:
标签没有结束标签或者是自闭标签没有自闭!!!

2.3.属性
一个元素上可以声明多个属性, 多个属性之间用空格隔开。
属性与属性值用等号连接, 属性的值用单引号或者双引号引起来。
属性的命名和元素遵循相同的命名规范。 

2.4.注释 (了解)
格式: <!-- xml注释 -->
注释不能放在文档声明的前面
注释不能交叉嵌套

2.5.转义字符 (了解)
常用的转义字符:
< &lt;
> &gt;
& &amp;
" &quot;
' &apos;

三.xml约束 (了解)
约束: 在xml中, 可以提供约束文档来约束xml文档的写法
DTD/Schema W3C
DTD:简单易学,上手快,但是功能有局限性,不能限制标签体的值的类型或者值的范围
Schema:复杂,不好学,但是可以实现精细的限定

 

1.     XML Schema

1.1.         XML Schema概述

1.1.1.              XML Schema

XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性

1.1.2.              Schema与 DTD的比较:

XML Schema符合XML语法结构。

DOM、SAX等XML API很容易解析出XML Schema文档中的内容。

XML Schema对名称空间支持得非常好。

XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。

XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。

XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD。 

1.2.         Schema约束快速入门

1.2.1.              快速入门

XML Schema 文件自身就是一个XML文件,但它的扩展名通常为.xsd。

一个XML Schema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档。

和XML文件一样,一个XML Schema文档也必须有一个根结点,但这个根结点的名称为Schema。

编写了一个XML Schema约束文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,在XML Schema技术中有一个专业术语来描述这个过程,即把XML Schema文档声明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URI(即名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束。

 

<?xml version="1.0" encoding="UTF-8"?>
<tedu:书架 xmlns:tedu="http://www.tedu.cn"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation=“http://www.tedu.cn  http://www.tedu.cn/book.xsd">
    <tedu:书>
        <tedu:书名>数据结构</tedu:书名>
        <tedu:作者>严蔚敏</tedu:作者>
        <tedu:售价>29.00元</tedu:售价>
    </tedu:书>
</tedu:书架>

 

<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                    targetNamespace=“http://www.tedu.cn"
                    elementFormDefault="qualified">
    <xs:element name='书架' >
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded' >
                <xs:element name='书' >
                    <xs:complexType>
                        <xs:sequence>
                        <xs:element name='书名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售价' type='xs:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

1.3.         名称空间(namespace)

1.3.1.              名称空间的概念

在XML Schema中,每个约束模式文档都可以被赋以一个唯一的名称空间,名称空间用一个唯一的URI(Uniform Resource Identifier,统一资源标识符)表示。 在Xml文件中书写标签时,可以通过名称空间声明(xmlns),来声明当前编写的标签来自哪个Schema约束文档。如:

        <tedu:书架 xmlns:tedu=“http://www.tedu.cn”>

                 <tedu:书>……</tedu:书>

        </tedu:书架>

         此处使用tedu来指向声明的名称,以便于后面对名称空间的引用。

注意:名称空间的名字语法容易让人混淆,尽管以 http:// 开始,那个 URL 并不指向一个包含模式定义的文件。事实上,这个 URL:http://www.tedu.cn根本没有指向任何文件,只是一个分配的名字。

1.3.2.              XML中使用名称空间引入Schema

为了在一个XML文档中声明它所遵循的Schema文件的具体位置,通常需要在Xml文档中的根结点中使用schemaLocation属性来指定,例如:

        <tedu:书架 xmlns:tedu="http://www.tedu.cn"

                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                 xsi:schemaLocation=“http://www.tedu.cn book.xsd">

schemaLocation此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置,两者之间用空格分隔。

注意,在使用schemaLocation属性时,也需要指定该属性来自哪里。

1.3.3.              使用默认名称空间

基本格式:

        xmlns="URI" 

举例:

        <书架 xmlns="http://www.tedu.cn"

                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                 xsi:schemaLocation=“http://www.tedu.cn book.xsd">

                 <书>

                 <书名>数据结构</书名>

                 <作者>严蔚敏</作者>

                 <售价>29.00元</售价>

                 </书>

        <书架>

1.3.4.              使用名称空间引入多个XML Schema文档

文件清单:xmlbook.xml

<?xml version="1.0" encoding="UTF-8"?>

<书架 xmlns="http://www.tarena.org/xmlbook/schema"

                xmlns:demo="http://www.tarena.org/demo/schema"

                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                xsi:schemaLocation="http://www.tarena.org/xmlbook/schema                                                   http://www.tarena.org/xmlbook.xsd

                http://www.tarena.org/demo/schema http://www.tarena.org/demo.xsd">

        <书>

                 <书名>JavaScript网页开发</书名>

                 <作者>张孝祥</作者>

                 <售价 demo:币种=”人民币”>28.00元</售价>

        </书>

</书架>

 

1.3.5.              不使用名称空间引入XML Schema文档

文件清单:xmlbook.xml

<?xml version="1.0" encoding="UTF-8"?>

<书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:noNamespaceSchemaLocation="xmlbook.xsd">

        <书>

                 <书名>JavaScript网页开发</书名>

                 <作者>张孝祥</作者>

                 <售价>28.00元</售价>

        </书>

</书架>

 

1.3.6.              在XML Schema文档中声明名称空间

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

                        targetNamespace="http://www. tedu.cn"

                        elementFormDefault="qualified">

<xs:schema>

 

targetNamespace元素用于指定schema文档中声明的元素属于哪个名称空间。

elementFormDefault元素用于指定,该schema文档中声明的根元素及其所有子元素是否都属于targetNamespace所指定的名称空间。


 

四.xml解析
4.1.两种解析思想 (!!!重要)
DOM解析:
将整个XML文档加到内存中,用一个Document对象来表示整个文档。将XML文档中所有的内容(元素、属性、文本等)都解析成一个一个的对象,用对象来表示元素,用对象与对象之间的引用关系来表示元素之间的层级关系。通过在程序中操作对象来间接的操作(增删改查)XML文档中的内容。

优点:
(1)可以十分方便对节点进行增删改查的操作。
(2)在内存中保存了一颗文档结构树, 只需要解析一次就可以重复使用这些数据。
缺点:
(1)将整个文档都加载到内存中用对象表示,占用内存空间,如果xml文档体积非常庞大时,将会十分耗费内存。
(2)需要等整个xml文档解析完成后,才可以对节点进行操作,相对来说耗费时间,效率低。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package cn.tedu.dom4j;
 
import java.util.Iterator;
 
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
 
public class Demo1 {
    // junit:可以模拟程序的运行环境,测试一个方法
     
    @Test
    public void find() throws DocumentException{
        // 需求:查询第一本书的书名,并输出到控制台
        //1. 创建一个SaxReader对象-用来解析XML的核心类
        SAXReader reader=new SAXReader();
        //2. 解析一个XML-返回一个解析好的document对象
        Document document=reader.read("book.xml");
        //3. 通过document返回一个RootElement
        Element rootEle=document.getRootElement();
        //4. 获取所有元素的迭代器
        Iterator<Element> it=rootEle.elementIterator();
        //5. 迭代所有元素
        while(it.hasNext()){
            Element e=it.next();
            if("书".equals(e.getName())){
                Iterator<Element> it2=e.elementIterator("书名");
                while(it2.hasNext()){
                    Element e2=it2.next();
                    System.out.println("name="+e2.getName());
                    String value=e2.getText();
                    System.out.println("value="+value);
                }
                break;
            }
        }
    }
     
}

  

SAX解析:
优点:
(1)由于是逐行解析,因此不需要将整个XML文档加载进内存,占用内存小。理论上多大的XML文件都可以解析
(2)由于是逐行解析,遇到想要的内容就可以停下来处理,效率高
缺点:
(1)每次需要数据都需要重新解析。
(2)只能读数据,不能对XML文档进行增删改的操作。

posted @ 2021-12-11 20:51  hanease  阅读(272)  评论(0编辑  收藏  举报