Java进阶学习第五天——XML入门

文档版本 开发工具 测试平台 工程名字 日期 作者 备注
V1.0 2016.04.14 lutianfei none

onsubmit事件

  • 控制表单提交

    • 需要把onsubmit作用在表单上 <form onsubmit="">
    • 值的写法:onsubmit="return run()"
    • run()必须要有返回值,必须返回true或者false
    • 如果返回是true,表单可以提交,如果返回false,表单不能提交。如果没有返回值,默认是表单提交。
    • run()的逻辑写什么?
      • 表单的校验。
<script type="text/javascript">
    // 给姓名提示
    function run1(){
        var uspan = document.getElementById("uspan");
        uspan.innerHTML = "不能输入特殊字符";
    }

    // 表单校验,必须有返回值
    function run(){
        // 校验姓名
        var name = document.getElementById("nameId").value;
        if(name == "" || name.length == 0){
            var uspan = document.getElementById("uspan");
            uspan.innerHTML = "用户名不能为空";
            return false;
        }

        // 校验密码
        var pwd = document.getElementById("pwdId").value;
        if(pwd == "" || pwd.length < 6){
            var pspan = document.getElementById("pspan");
            pspan.innerHTML = "密码至少6位";
            return false;
        }

        // 确认密码
        var repwd = document.getElementById("repwdId").value;
        if(pwd != repwd){
            var rpspan = document.getElementById("rpspan");
            rpspan.innerHTML = "两次密码不一致";
            return false;
        }

        // 确认密码
        //     /^表达式$/.test(string)    返回true获取false
        var email = document.getElementById("emailId").value;
        if(!/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(email)){
            var espan = document.getElementById("espan");
            espan.innerHTML = "邮箱格式不正确";
            return false;
        }
    }

    // 使用js提交表单
    function run2(){
        // 通过id获取form
        // var form = document.getElementById("formId");
        // 通过form的name的属性获取表单
        var form = document.form1;
        //var name = document.form1.username.value;
        //alert(name);

        // 设置提交的路径
        form.action = "success.html";
        form.method = "get";
        // 提交表单
        form.submit();
    }

</script>

</head>
<body>

    <form id="formId" name="form1"  onsubmit="return run()">
        <table border="1" width="60%">
            <tr>
                <td>输入姓名</td>
                <td>
                    <input type="text" name="username" id="nameId" onfocus="run1()"/><span id="uspan"></span>
                </td>
            </tr>
            <tr>
                <td>输入密码</td>
                <td>
                    <input type="password" name="password" id="pwdId" /><span id="pspan"></span>
                </td>
            </tr>
            <tr>
                <td>确认密码</td>
                <td>
                    <input type="password" name="repassword" id="repwdId" /><span id="rpspan"></span>
                </td>
            </tr>
            <tr>
                <td>
                    输入邮箱
                </td>
                <td>
                    <input type="text" name="email" id="emailId" /><span id="espan"></span>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <!-- <input type="submit" value="注册">  -->
                    <input type="button" value="注册" onclick="run2()">
                </td>
            </tr>
        </table>
    </form>
</body>

通过js提交表单

    // 通过id获取form
    // var form = document.getElementById("formId");
    // 通过form的name的属性获取表单
    var form = document.form1;
    //var name = document.form1.username.value;
    //alert(name);

    // 设置提交的路径
    form.action = "success.html";
    form.method = "get";
    // 提交表单
    form.submit();

XML语言

XML的简介

  • XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML。它被设计的宗旨是传输数据,而非显示数据。
  • XML标签没有被预定义,需要用户自行定义标签
  • XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范。
  • XML被广泛认为是继Java之后在Internet上最激动人心的新技术。
  • XML传输数据,HTML是显示数据。
  • XML的版本:
    • XML1.0(使用该版本)
    • XML1.1(不向下兼容)

XML技术用于解决什么问题

  • XML语言出现的根本目的在于描述有关系的数据
  • XML是一种通用的数据交换格式
  • 在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在起始标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。
  • XML中的数据必须通过软件程序来解析执行或显示;这样的解析程序称之为Parser(解析器)
<?xml version="1.0" encoding="UTF-8"?>
<中国>
    <北京>
        <海淀></海淀>
        <丰台></丰台>
    </北京>
    <山东>
        <济南></济南>
        <青岛></青岛>
    </山东>
    <湖北>
        <武汉></武汉>
        <荆州></荆州>
    </湖北>
</中国>

XML常见应用

  • XML技术除用于保存有关系的数据之外,它还经常用作软件配置文件,以描述程序模块之间的关系。(如后面将要学习到的Struts、Spring和Hibernate都是基于XML作为配置文件的)
  • 在一个软件系统中,通过XML配置文件可以提高系统的灵活性。即程序的行为是通过XML文件来配置的,而不是硬编码。
  • 数据交换:不同语言之间用来交换数据
  • 应用
    • 作为配置文件。
    • 可以在系统与系统之间进行数据的传输。

XML的语法

  • 一个XML文件分为如下几部分内容:

    • 文档声明
    • 元素
    • 属性
    • 注释
    • CDATA区 、特殊字符
    • 处理指令(PI:Processing Instruction)

文档声明(重点)

  • 最简单的语法: <?xml version="1.0" ?>
  • 文档声明必须出现在xml文件的第一行和第一列的位置。
  • 属性:
    • version=”1.0” XML的版本 (必须写)
    • encoding=”UTF-8” 编码集 (可选的)
    • standalone=”yes或者no” 代表xml的文件是否是独立的。(如果是no,不独立,可以引入外部的文件)(可选的)
      • 不写该属性,可以引入外部的文件。
  • 乱码问题
    • 产生的原因:保存文件时和打开文件时采用的编码不一致
    • 解决办法:保存文件可打开文件采用的编码一致就ok。(MyEclipse不会产生乱码问题)

元素

  • XML元素指XML文件中出现的标签。一个标签分为起始结束标签(不能省略)。一个标签有如下几种书写形式:

    • 包含标签主体:<mytag>some content</mytag>
    • 不含标签主体:
    • 一个标签中可以嵌套若干子标签,但所有标签必须合理的嵌套,不允许有交叉嵌套。
    • <mytag1><mytag2></mytag1></mytag2>:错误
  • 一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
  • 命名规范:
    • 区分大小写 错误的:<a> </A> 代表两个标签
    • 不能以数字-开头 错误的:<1a> <-a>
    • 不能以XML(Xml XML xml)开头 错误的:<xmlaa>
    • 不能包含空格冒号
  • 由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。例如:下面两段内容的意义是不一样的。

属性

  • 在同一个元素上,不能有相同的属性。(重点)
  • 可以使用双引号或者单引号
  • 一个元素可以有多个属性,每个属性都有它自己的名称和取值,例如:<mytag name=“value” …/>
  • 属性值一定要用引号(引号或引号)引起来。
  • 属性名称的命名规范与元素的命名规范相同
  • 元素中的属性是不允许重复的
  • 在XML技术中,标签属性所代表的信息也可以被改成用子元素的形式来描述,例如:
<mytag>
    <name>
        <firstName/>
        <lastName/>
    </name>
</mytag>

注释

  • 和HTML的注释相同,注释不能有嵌套。

    • <!-- XML的注释 -->

特殊字符

  • < : &lt;
  • > : &gt;
  • & : &amp;
  • " : &quot;
  • : &apos;
  • <& 的符号要用转义字符
  • > 可以不使用转义字符

CDATA区

  • CDATACharacter Data的缩写
  • 作用:把标签当做普通文本内容;
  • 语法:<![CDATA[内容]]>
  • 标签中的内容作为字符串
  • 语法:
<![CDATA[
  <itcast>www.itcast.cn</itcast>
]]>

PI(处理指令)

  • 为了替换替换HTML

XML的约束

为什么需要约束

  • XML都是用户自定义的标签,若出现小小的错误,软件程序将不能正确地获取文件中的内容而报错。
  • XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束
  • 两个概念:
    • 格式良好的XML:遵循XML语法的XML
    • 有效的XML:遵循约束文档的XML
  • 总之:约束文档定义了在XML中允许出现的元素名称 属性、及元素出现的顺序等等。

常用的XML约束技术

  • XML DTD
  • XML Schema

DTD的约束

  • 快速入门

将DTD与XML文档关联三种方式

方式一: 使用内部DTD:可以在XML的文件中直接书写DTD的代码。(经常使用)
  • <!DOCTYPE 根节点 [ DTD的代码 ]>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 书架 [
    <!ELEMENT 书架 (书+)>
    <!ELEMENT 书 (书名,作者,售价)>
    <!ELEMENT 书名 (#PCDATA)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 售价 (#PCDATA)>
]>

// xml代码:
<书架>
    <书>
        <书名>Java就业培训教程</书名>
        <作者>张孝祥</作者>
        <售价>39.00元</售价>
    </书>
    ...
</书架>
方式二:使用本地DTD
  • <!DOCTYPE 根节点 SYSTEM “DTD的地址” >
方式三: 使用网络DTD
  • <!DOCTYPE 根节点 PUBLIC “DTD的名称” “DTD的地址” >

元素定义

  • 在DTD文档中使用ELEMENT关键字来声明一个XML元素。
  • 语法:<!ELEMENT 元素名称 元素类型>
    • 元素类型

      • (#PCDATA) 指示元素的主体内容只能是普通的文本.(Parsed Character Data)
      • EMPTY 用于指示元素的主体为空。比如<br/>
      • ANY 用于指示元素的主体内容为任意类型。
      • (子元素) 指示元素中包含的子元素
        • 子元素之间的关系

          • , 子元素出现是有顺序的,必须按照声明顺序去编写XML文档。
          • | 子元素只能出现一个,任选其一
          • 子元素出现的次数
            • + 子元素出现1次多次
            • * 子元素出现0次多次
            • ? 子元素出现0次1次
    <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>     

属性定义(AttributeList)

  • 写法:
<!ATTLIST 元素名称
                属性名称 属性类型 属性约束
                属性名称 属性类型 属性约束
            >
  • 属性值类型:

    • CDATA:表示属性的取值为普通的文本字符串
    • ENUMERATED (DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)
    • ID:表示属性的取值不能重复(不能只写数字)
  • 设置说明
    • #REQUIRED:表示该属性必须出现
    • #IMPLIED:表示该属性可有可无
    • #FIXED:表示属性的取值为一个固定值。语法:#FIXED "固定值"
    • 直接值:表示属性的取值为该默认值

<!ATTLIST 页面作者
         姓名 CDATA #IMPLIED
         年龄 CDATA #IMPLIED
         联系信息 CDATA #REQUIRED
         网站职务 CDATA #FIXED "页面作者"
         个人爱好 CDATA "上网"
       > 

实体定义(用的不多)

  • 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
  • 在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。
  • <!ENTITY 别名 “值”>
  • 在元素中引用 &别名;
  • <!ENTITY 别名 "值" >
  • 需要在xml中引入别名,浏览器打开文件后,在引入的位置上显示值的。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 [
    <!ELEMENT 书架 (书+)>
    <!ELEMENT 书 (书名,作者,售价,简介)>
    <!ELEMENT 书名 (#PCDATA)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 售价 (#PCDATA)>
    <!ELEMENT 简介 (#PCDATA)>

    <!ATTLIST 书
        出版社 (清华出版社|人民出版社) #REQUIRED
        编号 ID #IMPLIED
        出版日期 CDATA  #FIXED "2014-11-17"
    >

    <!ENTITY username "张三" >

]>

<书架>
    <书 出版社="清华出版社" 出版日期="2014-11-17">
        <书名>javaweb开发大全</书名>
        <作者>&username;</作者>
        <售价>99.8元</售价>
        <简介>这是不错啊</简介>
    </书>
    <书 编号="b1" 出版社="人民出版社">
        <书名>葵花宝典</书名>
        <作者>岳不群</作者>
        <售价>99.8两</售价>
        <简介>欲练此功...</简介>
    </书>
</书架>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TVSCHEDULE [
    <!ELEMENT TVSCHEDULE (CHANNEL+)>
    <!ELEMENT CHANNEL (BANNER,DAY+)>
    <!ELEMENT BANNER (#PCDATA)>
    <!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
    <!ELEMENT HOLIDAY (#PCDATA)>
    <!ELEMENT DATE (#PCDATA)>
    <!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
    <!ELEMENT TIME (#PCDATA)>
    <!ELEMENT TITLE (#PCDATA)>
    <!ELEMENT DESCRIPTION (#PCDATA)>

    <!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
    <!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
    <!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
    <!ATTLIST TITLE RATING CDATA #IMPLIED>
    <!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
]>

<TVSCHEDULE NAME="">
    <CHANNEL CHAN="">
        <BANNER>CCAV</BANNER>
        <DAY>
            <DATE>2014-11-17</DATE>
            <PROGRAMSLOT>
                <TIME>19:00</TIME>
                <TITLE>新闻联播</TITLE>
            </PROGRAMSLOT>
        </DAY>
    </CHANNEL>
</TVSCHEDULE>

解析XML

  • XML解析方式分为两种:DOM方式和SAX方式

    • DOM:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。
    • SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。
    • 区别:
      • DOM解析XML

        • 在内存中形成树状结构
        • 缺点:如果文档过大,容易产生内存溢出的问题。
        • 优点:方便做增删改的操作
      • SAX解析
        • 基于事件驱动,边读边解析
        • 优点:不会产生内存溢出问题。
        • 缺点:不能做增删改操作。(DOM4J在内存生成树状结构,可以做增删改操作)
  • XML解析开发包
    • JAXP:是SUN公司推出的解析标准实现。
    • Dom4J:是开源组织推出的解析开发包。(牛,大家都在用,包括SUN公司的一些技术的实现都在用)
    • JDom:是开源组织推出的解析开发包。

JAXP解析包

  • JAXP:(Java API for XML Processing)开发包是JavaSE的一部分,它由以下几个包及其子包组成:
  • org.w3c.dom:提供DOM方式解析XML的标准接口
  • org.xml.sax:提供SAX方式解析XML的标准接口
  • javax.xml:提供了解析XML文档的类
  • javax.xml.parsers包中,定义了几个工厂类。我们可以通过调用这些工厂类,得到对XML文档进行解析的DOM和SAX解析器对象。
    • DocumentBuilderFactory
    • SAXParserFactory

DOM编程

DOM模型(document object model)

  • DOM解析器在解析XML文档时,会把文档中的所有元素,按照其出现的层次关系,解析成一个个Node对象(节点)。
  • 在dom中,节点之间关系如下:
  • 位于一个节点之上的节点是该节点的父节点(parent)
  • 一个节点之下的节点是该节点的子节点(children)
  • 同一层次,具有相同父节点的节点是兄弟节点(sibling)
  • 一个节点的下一个层次的节点集合是节点后代(descendant)
  • 父、祖父节点及所有位于节点上面的,都是节点的祖先(ancestor)

节点类型Node对象

  • Node对象提供了一系列常量来代表结点的类型,当开发人员获得某个Node类型后,就可以把Node节点转换成相应的节点对象(Node的子类对象),以便于调用其特有的方法。(查看API文档)
  • Node对象提供了相应的方法去获得它的父结点或子结点。编程人员通过这些方法就可以读取整个XML文档的内容、或添加、修改、删除XML文档的内容了。

DOM方式解析XML文件

  • javax.xml.parsers 包中的DocumentBuilderFactory用于创建DOM模式解析器对象 , DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法 ,这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回。
  • JAXP 在DOM方式下解析HTML使用的类和方法
    • 获取解析器工厂类 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    • 获取解析器对象:DocumentBuilder builder = factory.newDocumentBuilder();
    • 解析XML的文档,返回document对象:Document document = builder.parse(“src/book2.xml”);

  • 通过document.getElementsByTagName(“”)可以获取节点集合 返回NodeList
  • 通过Document.createElement(“”)可以创建元素对象
  • Node对象中可以设置文本内容 setTextContent()
  • 通过Node的appendChild()方法加入子节点。
  • 需要把内存中的DOM树形结构回写到xml文件中。
  • TransformerFactory工厂类创建Transformer回写类,通过transform(Souuce,Result)方法回写xml。
    • New DOMSource(document)new StreamResult(xml) 回写完成。

更新XML文档

  • javax.xml.transform包中的Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出

    • 例如把xml文件应用样式表后转成一个html文档。利用这个对象,当然也可以把Document对象又重新写入到一个XML文件中。
  • Transformer类通过transform方法完成转换操作,该方法接收一个源一个目的地。我们可以通过:
    • javax.xml.transform.dom.DOMSource类来关联要转换的document对象,
    • javax.xml.transform.stream.StreamResult 对象来表示数据的目的地
  • Transformer对象通过TransformerFactory获得
//book2.xml

<书架>
    <书 编号="b2">
        <书名>javaweb开发大全</书名>
        <作者>班长</作者>
        <售价>99.8元</售价>
        <简介>这是不错啊</简介>
    </书>
    <书>
        <书名>葵花宝典</书名>
        <作者>岳不群</作者>
        <售价>99.8两</售价>
        <简介>欲练此功...</简介>
    </书>
</书架>

//JaxpDomTest.java

package cn.itcast.jaxp;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import cn.itcast.utils.JaxpDomUtil;

/**
 * JAXP的DOM解析XML
 * @author Administrator
 *
 */
public class JaxpDomTest {

    public static void main(String[] args) {
        try {
            run3();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取作者的文本内容
     * @throws Exception
     */
    public static void run1() throws Exception{
        // 获取解析器工厂类
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // 获取解析器对象
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 解析XML的文档,返回document对象
        Document document = builder.parse("src/book2.xml");
        // 获取作者元素对象的集合,返回NodeList
        NodeList nodeList = document.getElementsByTagName("作者");
        // 循环遍历,拿到每一个作者,打印文本的内容,getTextContent()
        for(int i=0;i<nodeList.getLength();i++){
            Node node = nodeList.item(i);
            System.out.println(node.getTextContent());
        }
    }

    /**
     * 需求:在第二本下,在末尾添加子节点
     * @throws Exception
     */
    public static void run2() throws Exception{
        // 获取工厂类
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // 获取解析器
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 解析xml,返回document对象
        Document document = builder.parse("src/book2.xml");
        // 获取第二本书
        Node book2 = document.getElementsByTagName("书").item(1);
        // 创建元素对象
        Element cat = document.createElement("猫");
        // 设置文本内容
        cat.setTextContent("我是猫");
        // 把元素对象添加到第二本书下
        book2.appendChild(cat);
        // 回写
        // 创建回写类的工厂
        TransformerFactory transformerFactory =  TransformerFactory.newInstance();
        // 获取回写类
        Transformer transformer = transformerFactory.newTransformer();
        // 调用回写的方法
        transformer.transform(new DOMSource(document), new StreamResult("src/book2.xml"));
    }

    /**
     * 删除节点
     * @throws Exception
     */
    public static void run3() throws Exception{
        String path = "src/book2.xml";
        // 获取文档对象
        Document document = JaxpDomUtil.getDocument(path);
        // 获取猫
        Node cat = document.getElementsByTagName("猫").item(0);
        // 获取书(猫的父节点)
        Node book2 = cat.getParentNode();
        // 通过书删除猫
        book2.removeChild(cat);
        // 回写
        JaxpDomUtil.writeXML(document, path);
    }

}

JAXP 的封装和删除

package cn.itcast.utils;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;

/**
 * JAPTDOM解析的工具类
 * @author Administrator
 *
 */
public class JaxpDomUtil {

    /**
     * 通过path获取document对象
     * @param path
     * @return
     * @throws Exception
     */
    public static Document getDocument(String path) throws Exception{
        // 获取工厂类
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // 获取解析器对象
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 解析xml
        return builder.parse(path);
    }

    /**
     * 回写方法
     * @param document
     * @param path
     * @throws Exception
     */
    public static void writeXML(Document document,String path) throws Exception{
        // 获取回写类的工厂
        TransformerFactory factory = TransformerFactory.newInstance();
        // 获取回写类
        Transformer transformer = factory.newTransformer();
        // 回写
        transformer.transform(new DOMSource(document), new StreamResult(path));
    }

}
时间: 2024-10-26 16:49:43

Java进阶学习第五天——XML入门的相关文章

Java进阶学习第十七天——JDBC入门学习

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.05.11 lutianfei none JDBC JDBC介绍 JDBC是什么? JDBC(Java Data Base Connectivity,java数据库连接) SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC. 简单说,就是可以直接通过java语言去操作数据库. jdbc是一套标准,它是由一些接口与类组成的. 组成JDBC的类和接口 java.sql 类:Drive

Java进阶学习第四天——DOM入门

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.04.14 lutianfei none DOM 文档对象模型 文档:标记型文档 (HTML/XML) 对象:封装了属性和行为的实例,可以直接被调用. 模型:所有的标记型文档都具有一些共性特征的一个体现. DOM解析HTML 通过DOM的方法,把HTML全部元素(标签.文本.属性)都封装成了对象. <span id="spanId">文本</span> span 标签 id 属性 文本

Java进阶学习(2)——log4j的学习和使用

Java进阶学习(2)--log4j的学习和使用 简介Loj4j Log4j的组成 Log4j主要由三大组组件构成: Logger: 负责生成日志,并能够对日志信息进行分类筛选,通俗的讲就是决定什么日志信息应该被输出,什么日志信息应该被忽略. Appender: 定义了日志信息输出的目的地,指定日志信息应该被输出到什么地方,这些地方可以是控制台.文件或网络设备等. Layout: 指定日志信息的输出格式. 说明: 一个Logger可以有多个Appender,这意味着日志信息可以被输出到多个设备上

Java进阶(三十五)java int与integer的区别

Java进阶(三十五)java int与integer的区别 前言 int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象. 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者而integer 是后者(也就是一个类):因此在类进行初始化时int类的变量初始为0.而Integer的变量则初始化为null. 2.初始化时: int i =1; Integer i= new In

Java进阶(二十五)Java连接mysql数据库(底层实现)

Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜索.特将之前使用的方法做一简单的总结.也能够在底层理解一下连接数据库的具体步骤. 实现 首先需要导入相关的jar包,我使用的为:mysql-connector-java-5.1.7-bin.jar. 下面来看一下我所使用的数据库连接方法类: MysqlUtil.java package cn.edu

java进阶学习计划

断断续续使用java也已经有两年了,算是最熟悉的开发工具了.但写的代码都是以项目为导向,追求work around,还需要打好基础才能长远发展. 大致的进阶学习计划, 阶段1:深究java语法,阅读常用库的jdk源码,了解jvm机制; 阶段2:阅读基于java的开源框架源码,各种framework,container. 希望可以坚持下来,经常更新技术博客. java进阶学习计划

Java:进阶学习(1)——网络编程

Java:进阶学习(1)--网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket方法 getInetAddress();    远程服务端的IP地址 getPort();    远程服务端的端口 getLocalAddress()    本地客户端的IP地址 getLocalPort()    本地客户端的端口 getInputStream();   

MySQL快速入门(一)—Java进阶学习第十五天

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.05.09 lutianfei none 数据库简介 什么是数据库 数据库就是一个文件系统,但是访问的时候需要使用标准SQL语句来访问数据. 关系型数据库 存储的都是实体与实体之间的关系. ER模型图 常见的数据库 Oracle : 甲骨文公司的数据库产品,大型的收费的数据库. SQLServer : 微软公司的数据库产品,中型的收费的数据库. MySQL : 是开源的,免费的数据库产品.在5.x版本是免费的,6.x是

Java进阶学习第九天——Servlet入门

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.04.21 lutianfei none Servlet开发 Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想要开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 编写一个Java类,实现servlet接口. 把开发好的Java类部署到web服务器中. Servlet快速入门 用se