我的传智播客之javaweb_day05学习总结
来源:互联网 发布:树莓派机器人和python 编辑:程序博客网 时间:2024/05/02 01:06
表单提交方式
- 使用submit提交:
<input type="submit" value="提交"/>
- 使用button提交:
// html<form id="form1"> <input type="text" name="username"/> <input type="button" value="提交" onclick="form1();"></form>...// js// 实现提交方法function form1() { // 获取form var form1 = document.getElementById("form1"); // 设置action form1.action="hello.html"; // 提交form表单 from1.submit();}
- 使用超链接提交
<a herf="hello.html?username=1234">使用超链接提交</a>
- 一些事件:
onclick:鼠标点击事件onchange:改变内容(一般和select一起使用)onfocus:得到焦点onblur:失去焦点
xml的简介
eXtensible Markup Language: 可扩展标记型语言
- 标记型语言:也是使用标签来操作
- 可扩展:html里面的标签都是固定,每个标签都有特定的含义。标签可以自己定义,可以写中文的标签
<person></person>
,<狗></狗>
。 - xml用途:html是用于显示数据,xml也可以显示数据(不是主要功能)。xml主要功能是为了存储数据。
- xml是w3c组织发布的技术。
- xml有两个版本 1.0,1.1。使用的都是1.0(1.1不能向下兼容)。
xml的应用
- xml的文档声明
- 创建一个文件,后缀名是.xml。必须要有文档声明,必须要写在第一行第一列。
<? xml version="1.0" encoding="gbk"?>
- 属性:
- version:xml的版本
- encoding:xml编码 gbk、utf-8、iso8859-1(不包含中文
- standalone:是否需要依赖其他文件(yes/no)
- xml的中文乱码问题解决:保存时候的编码和设置打开时候的编码一致,不会出现乱码。
- 属性:
- 定义元素(标签)
- 定义属性
- 注释
- 特殊字符
- CDATA区
- PI指令
xml的元素定义
- 有开始必须要有结束
<person></person>
- 标签没有内容,可以在标签内结束
<aa/>
- 标签可以嵌套,必须要合理嵌套
- 一个xml中只能有一个根标签,其他标签都是这个标签下面的标签
- 在xml中把空格和换行都当前内容来解析
// 表示的内容不同<aa>bb</aa><aa> bb</aa>
- xml中标签的命名规则
- xml标签区分大小写
- xml的标签不能以数字或下划线”_”开头
- 不能以xml,XML,Xml等开头
- 不能包含空格和冒号”:”
xml中属性的定义
- 一个标签上可以有多个属性
- 属性名称不能相同
- xml属性的命名规范和元素的命名规范一致
xml中的注释
<!-- xml的注释 -->
- 注释不能嵌套
- 注释也不能放到第一行,第一行第一列必须放文档声明
xml中的特殊字符
跟html里的差不多
CDATA区
可以解决多个字符都需要转义的操作,把这些内容放到CDATA区里面。
<b>if(a<b && b<c && c<d){}</b>// 写法<![CDATA[ 内容 ]]>
xml的PI指令(处理指令)
可以在xml中设置样式,设置样式只能对英文标签名称起作用。
<?xml-stylesheet type="text/css" href="xxx.css"?>
xml的约束
- 为什么需要约束?
- xml的标签是自定义的,需要技术来规定xml中只能出现的元素。
- xml的约束的技术:dtd约束和schema约束
dtd的快速入门
- 创建一个文件,后缀名:.dtd
- 步骤:
- xml中有多少个元素就在dtd文件中写多少个
<!ELEMENT>
- 判断元素是简单元素还是复杂元素
- 复杂元素:有子元素的元素,子元素间用逗号”,”隔开
<!ELEMENT 元素名称 (子元素)>
- 简单元素:没有子元素
<!ELEMENT 元素名称 约束>
- 复杂元素:有子元素的元素,子元素间用逗号”,”隔开
- 在xml文件中引入dtd文件
<!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">
- xml中有多少个元素就在dtd文件中写多少个
- 浏览器只负责检验xml的语法,不负责校验约束。想要校验xml的约束,需要使用工具(myeclipse)。
dtd的三种引用方式
// 引用外部的dtd文件<!DOCTYPE 根元素名称 SYSTEM "dtd路径">// 使用内部的dtd文件<!DOCTYPE 根元素名称 [ <!ELEMENT person (name,age)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)>]>// 使用外部的dtd文件((网络上的dtd文件)<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">// struts2的配置文件用到
使用dtd定义元素
- 简单元素:
<!ELEMENT 元素名称 约束>
- (#PCDATA):约束name是字符串类型
- EMPTY:元素为空(没有内容)
- ANY:任意
- 复杂元素:
<!ELEMENT 元素名称 (子元素)>
<!ELEMENT person (name,age,sex,school)>
,子元素只能出现一次。- 表示子元素出现的次数
<!ELEMENT person (name+,age?,sex*,school)>
- +:表示1次或多次
- ?:表示0次或1次
- *:表示0次或多次
- 子元素之间使用逗号进行隔开,表示子元素出现的顺序。
- 子元素之间使用竖线”|”隔开
<!ELEMENT person (name|age|sex|school)>
,表示元素只能出现其中的任意一个。
使用dtd定义属性
- 语法:
<!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
- 属性类型
- CDATA:字符串
- 枚举:表示只能在一定的范围内出现值,但是只能每次出现其中的一个
(aa|bb|cc)
- ID:值只能是字母或下画线开头
- 属性的约束
- #REQUIRED:属性必须存在
- #IMPLIED:属性可有可无
- #FIXED:表示一个固定值 #FIXED “AAA”,属性的值必须是设置的这个固定值
- 直接值
- 不写属性,使用直接值
- 写了属性,使用设置那个值
实体的定义
- 语法:
<!ENTITY 实体名称 "实体的值"><!ENTITY TEST "AAA">
- 使用实体
&实体名称;
- 定义实体需要写在内部dtd里,,有些浏览器不能得到外部的dtd的实体。
xml的解析的简介(写到java代码)
- xml的解析方式(技术):dom 和 sax
- dom方式解析:
- 解析过程:根据xml的层级结构在内存中分配一个树形结构。把xml的标签、文本、属性都封装成对象。
- 优点:很方便实现增删改操作
- 缺点:如果文件过大,造成内存溢出
- sax方式解析:
- 解析过程:采用事件驱动,边读边解析。从上到下,一行一行的解析,解析到某一个对象,返回对象名称。
- 优点:不会造成内存溢出,方便实现查询操作
- 缺点:不能实现增删改操作
- 解析xml需要解析器
- 不同组织提供api提供针对dom和sax的解析器
- sun公司:jaxp
- dom4j组织:dom4j (实际开发中使用)
- jdom组织:jdom
- 不同组织提供api提供针对dom和sax的解析器
jaxp的api查看
- jaxp是javase的一部分,jaxp解析器在jdk的javax.xml.parsers包里面。
- 四个类:分别是针对dom和sax解析使用的类
- dom:
- DocumentBuilder:解析器类,这个类是一个抽象类。通过DocumentBuilderFactory实例的newDocumentBuilder()方法获取。
- 解析xml:parse(“xml路径”),返回是Document整个文档。
- Document是一个接口,父节点是Node,Document找不到的方法可以在Node里面去找。
- Document里面的方法
- getElementsByTagName(String tagName):得到标签,返回的是集合 NodeList
- createElement(String tagName):创建标签
- createTextNode():创建文本
- appendChild(Node newChild):把文本添加到标签下面
- removeChild():删除节点
- getParentNode():获取父节点
- NodeList:getLength()、item(int index)
- Node:getTextContent():得到标签里面的内容
- DocumentBuilderFactory:解析器工厂,这个类也是一个抽象类,用newInstance()获取该实例。
- sax:
- SAXParser:解析器类
- SAXParserFactory:解析器工厂
- dom:
使用jaxp实现查询操作
- 查询xml中所有的xxx元素的值
- 查询xml中第一个name元素的值
// 查询所有name元素的值private static void selectAll() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到所有的name元素 * 5.返回集合,遍历集合,得到每一个name元素 */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 解析xml返回document Document document = builder.parse("src/person.xml"); // 得到name元素 NodeList list = document.getElementsByTagName("name"); // 遍历集合 for (int i = 0; i < list.getLength(); i++) { Node name1 = list.item(i); // 得到每一个name元素 // 得到name元素里面的值 String s = name1.getTextContent(); System.out.println(s); }}// 查询xml中第一个name元素的值public static void selectSin() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到所有的name元素 * 5.使用返回集合的item,下标获取具体的元素 * 6.得到具体的值 */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 解析xml返回document Document document = builder.parse("src/person.xml"); // 得到所有的name元素 NodeList list = document.getElementsByTagName("name"); // 使用下标,得到第一个元素 String s = list.item(0).getTextContent(); // 得到name里面的具体的值 System.out.println(s);}
使用jaxp添加节点
在第一个<p1>
下面(末尾)添加<sex>nv</sex>
// 在第一个p1下面(末尾)添加<sex>nv</sex>public static void addSex() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到第一个p1 * 5.创建sex标签 * 6.创建文本 * 7.把文本添加到sex下 * 8.把sex添加到第一个p1下 * 9.回写xml */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 解析xml返回document Document document = builder.parse("src/person.xml"); // 得到所有的p1 NodeList list = document.getElementsByTagName("p1"); // 得到第一个p1 Node p1 = list.item(0); // 创建sex标签 Element sex1 = document.createElement("sex"); // 创建文本 Text text1 = document.createTextNode("nv"); // 把文本添加到sex1下 sex1.appendChild(text1); // 把sex1添加到p1下 p1.appendChild(sex1); // 回写xml TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));}
使用jaxp修改节点
修改第一个<p1>
下面的<sex>
内容是nan
// 修改第一个p1下面的<sex>内容是nanpublic static void modifySex() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到sex * 5.修改sex里面的值 * 6.回写xml */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 得到document Document document = builder.parse("src/person.xml"); // 得到sex Node sex1 = document.getElementsByTagName("sex").item(0); // 修改sex值 sex1.setTextContent("nan"); // 回写xml TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));}
使用jaxp删除节点
删除<sex>nan</sex>
节点
// 删除<sex>nan</sex>节点public static void delSex() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到sex * 5.获取sex的父节点 * 6.使用sex的父节点删除sex * 7.回写xml */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 得到document Document document = builder.parse("src/person.xml"); // 得到sex Node sex1 = document.getElementsByTagName("sex").item(0); // 得到sex的父节点 Node p1 = sex1.getParentNode(); p1.removeChild(sex1); // 回写xml TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));}
使用jaxp遍历节点
把xml中的所有元素名称打印出来
// 遍历节点,把所有元素名称打印出来public static void listEelment() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到根节点 * 5.得到根节点子节点 * 使用递归实现 */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 得到document Document document = builder.parse("src/person.xml"); // 编写一个方法实现遍历操作 list1(document);}private static void list1(Node node) { // 判断元素类型的时候才打印 if (node.getNodeType() == Node.ELEMENT_NODE) { System.out.println(node.getNodeName()); } // 得到一层子节点 NodeList list = node.getChildNodes(); for (int i = 0; i < list.getLength(); i++) { // 得到每一个节点 Node node1 = list.item(i); list1(node1); }}
0 0
- 我的传智播客之javaweb_day05学习总结
- 我的传智播客之javaweb_day01学习总结
- 我的传智播客之javaweb_day02学习总结
- 我的传智播客之javaweb_day03学习总结
- 我的传智播客之javaweb_day04学习总结
- 我的传智播客之javaweb_day06学习总结
- 我的传智播客之javaweb_day07学习总结
- 我的学习总结
- 我的学习总结
- 2012—年度总结,我的学习之旅
- 我的Java学习总结
- 我的Shaderlab学习总结
- Python3 我的学习总结
- 我的FPGA之路 - 入门篇(暨我的第一阶段学习总结 )
- 我的学习之路
- 我的学习之路
- 我的学习之路
- 我的学习之路
- ImportError: No module named bs4的解决办法
- POJ-1324-bfs,位运算
- [2017-3-3]BNUZ套题比赛div2 B
- java中的字符编码简介
- 网易编程题_字符串编码
- 我的传智播客之javaweb_day05学习总结
- 贪心算法之Huffman Code——来自Sicily
- Linux运维之路——VWMare技巧
- 清华2006年复试上机题:二叉树遍历(不构建树的解法)
- java对象的初始化
- 前端知识学习与巩固
- Android UI : 手机信息页面布局
- 2016年迟到的总结
- AMQ高可用集群-jdbc方式搭建集群