第70节:Java中xml和tomcat

前言:

哭着也要看完,字数:

jdbc
crud - statement
dao
java.sql.Driver
The interface that every driver class must implement.
The Java SQL framework allows for multiple database drivers.
Each driver should supply a class that implements the Driver interface.
The DriverManager will try to load as many drivers as it can find and then for any given connection request, it will ask each driver in turn to try to connect to the target url.
// MainTest
// ctrl +
// ctrl + p
// com.mysql.jdbc
public class MainTest {
 public static void main(String[] args) {
  // 驱动管理员
  // DriverManager.registerDriver(driver);

  try{
  // 注册了两次驱动 src, 所以不用写
  // mainTest.java -> mainTest.class -> Class
  // DriverManager.registerDriver(new com.mysql.jdbc.Driver());
  // Class.forName("com.mysql.jdbc.Driver"); // 参数字符串

  Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/stu","root","root");

  String sql = "select * from stu where id=?";
  // 执行sql语句预处理
  PreparedStatement ps = conn.prepareStatement(sql);

  ps.setInt(1,10);

  // 获取Statement对象
  // Statement st = conn.createStatement();

 // 执行查询,返回结果集
  // String sql = "select * from stu";
  // ResultSet rs = st.executeQuery(sql);
  ResultSet rs = ps.executeQuery();

  while(rs.next()){
   String name = rs.getString("name");
   int age = rs.getInt("age");
   // 打印
   System.out.println(name+"  " +age);
  }
  }catch(SQLException e){
   e.printStackTrace();
  }finally{
   // JDBCUtil.realease(...);
   }
 }
} 

xml

eXtendsible markup language
可扩展性语言,用来保存数据,用来配置文件,数据传输载体.
客户端->访问->服务器

<stu>
 <name>dashu</name>
 <age>13</age>
<stu>
<stus>
 <stu>
  <name>dashu</name>
  <age>13</age>
 <stu>
 <stu>
  <name>dashu</name>
  <age>13</age>
 <stu>
</stus>

定义xml

// 文档声明
<?xml version="1.0"?>

xml的介绍:
xml被设计用了传输和存储数据的,在学xml时要同时掌握htmlxhtml以及学习掌握javascript.

什么是xml呢?

xml是可扩展标记语言,是一种标记语言,很像html,而xml被用于的目的是传输数据,而非显示数据,xml标签没有被预定义,需要自己自行定义标签,xml被设计为具有自我描述性.

xmlhtml的区别:

xml不是html的替代,xmlhtml两者的设计目的也是不同的,xml是用来被设计为传输和存储数据的,重点是数据的内容,而html是被用来显示数据的,其重点是数据的外观,html是用了显示信息,而xml是用来传输信息的.

xml的作用:

xml作用于web开发,常用于简化数据的存储和共享,xml把数据从html分离,如果你需要在html文档中显示动态数据的话,那么每当数据改动的时候将会花费大量的时间来编辑html文档,这样就很费时了.

通过xml可以将数据存储到独立的xml文件中,这样就可以专门使用html用于进行布局和显示,保证修改底层数据不用再对html进行如何操作了.

通过使用JavaScript,可以将xml文件进行读取,然后更新到html中数据内容.

xml数据共享

计算机系统和数据使用不兼容的格式来存储数据,xml数据以纯文本格式进行存储,所以提供了一种独立于软件和硬件的存储数据的方法.就可以让创建不同的应用程序共享数据.

xml数据传输

通过xml,可以把在不兼容的系统之间进行数据交换,对开发人员来说,在网上的不兼容系统之间的数据交换是最头疼的,所以利用xml进行数据交换可以优化在各种不兼容的应用程序来读取数据.

xml的树结构

xml文档形成了一种树的结构.

xml文档第一行是用于xml的声明的,它的定义版本为1.0.

xml中的语法规则:

xml中的语法规则是很简单的,不具有复杂性,很有逻辑,很容易进行学习和掌握.

所有xml元素都需要进行关闭标签.在html中可以有 没有关闭标签 的元素,但是在xml中,都要有关闭标签,省略关闭标签是不合理的,所有元素都要进行关闭标签.

声明xml的标签没有关闭标签,这并不是什么错,声明不属于xml本身的组成部分,所以它不是xml元素,所以也不需要进行关闭标签.

xml标签是对大小写敏感的,xml元素使用xml标签进行定义.xml中的元素,在xml文档中包含xml元素.

那么什么是xml的元素呢?

xml的元素是指从开始标签到结束标签的部分,元素中可以包含其他元素,文本或者两者的混合物,并且元素可以具有属性.

文档声明: version
<?xml version="1.0"?>
当解析文档的时候,用什么版本的解析器去解析.
encoding: 解析xml的时候,用什么编码方式进行翻译.
<?xml version="1.0" encoding="gbk"?>

<?xml version="1.0" encoding="gbk"? standalone="no"?>
standalone: no 为当前文档会依赖关联其他文档,yes 为一个独立的文档.

encoding
<?xml version="1.0" encoding="gbk" standalone="no" ?>
<stu>
 <name></name>
 <age>20</age>
</stu>

// encoding 使用什么编码去解析

建议写utf-8

xml元素的定义

// <> 叫元素,成对的
<?xml version="1.0" encoding="utf-8"?>
<stu>
</stu>

xml 中的实体引用:

xml的命名规则
名称可以含有字母,数字以及其他的字符
名称不能以数字或标点符号开始
名称不鞥以字符 " xml " 开始等
名称不能有空格

属性的定义:

<元素的名称 属性的名称="属性的值"></>

xml的注释
<!-- -->

CDATA

xml cdata
所有xml文档中的文本会被解析器进行解析
只有cdata区段中的文本会被解析器忽略.

xml解析器通常是对xml文档中的所有文本进行解析.

CDATA

作为cdata内部的所有东西都会被解析器所忽略.

`<[CDATA[ ]]>‘

<script>
<![CDATA[
function match(a,b)
{
 if(a<b)
 {
   return 1
  }else{
   return 0
  }
}
]]>
</script>
< &lt;
& &amp;

<des><![CDATA[<a href=""></a>]]></des>

xml解析

就是获取元素里面的字符数据或属性数据.

解析方式:

DOMSAX解析:

DOM解析会把整个所有的文档存储到内存当中,形成树状结构.

// 一下所有对象都是Node节点
document 文档
element 元素
attribute 属性
text 文本

DOM 文档对象模型, 把整个xml全部读到内存当中,形成树状结构.如果xml很大的话,会导致内存溢出,内存不够.如果文档比较小,就会快一些,可以对文档进行增删操作

SAX simle api for xml 基于事件的驱动.读一行,解析一行.不会导致内存溢出.不可以增删,只能查询.

dom4j

dom4j-1.6.1下载

dom4j-1.6.1

parsing xml 解析xml

Class SAXReader
public class SAXReader extends Object

SAXReader creates a DOM4J tree from SAX parsing event.
// parsing xml
public class Foo {
 public Document parse(URL url) thorows DocumentException {
  SAXReader reader = new SAXReader();
  Document document = reader.read(url);
  return document;
 }
}
public class MainTest {
 public static void main(String[] args) {

 try{
  // sax 读取对象
 SAXReader reader = new SAXReader();
 Document document = reader.read(new File("src/xml/stus.xml"));
 // 得到元素
 Element rootElement = document.getRootElement();

// 获取根元素下面的子元素
// rootElement.element("age")

 // 错误System.out.println(rootElement.element("age").getName());

 // System.out.println(rootElement.element("stu").element("age").getName());

 List<Element> elements = rootElement.elements(); 

 for(Element element : elements){
  // 遍历所有的stu元素
  String name = element.element("name").getText();
 }
 }catch(Exception e){
  e.printStackTrace();
  }

 }
}
// 得到根元素
Element rootElement = document.getRootElement();
// 获取根元素下面的所有子元素
List<Element> elements = rootElement.elements();
// 遍历所有的stu元素
for(Element element : elements){
 String name = element.element("name").getText();
}

创建SAXReader对象,
执行解析xml
获取根元素
根据根元素获取子元素或下面的子孙元素

element.element("stu");
element.elements(); // 返回元素下的所有子元素

Xpath入门:

dom4j里支持Xpath写法,Xpath路径语言.设定路径选取要的元素

基本的XPath语法定位文件,如果路径以/开始,那么就表示到一个元素的绝对路径.

如果是双斜线//开头,那么表示选中文档中所有满足双斜线//之后规则的元素.

public class XpathTest {
 public static void main(String[] args) {
  try {
   // 创建sax读取对象
   SAXReader reader = new SAXReader();
  // 指定解析的xml
  Document document = reader.read(new File("src/xml/stus.xml"));

  // 得到根元素
  Element rootElement = document.getRootElement();

 // Element nameElement = (Element)rootElement.selectSingleNode("//name");
 // System.out.println(nameElement.getText());

 List<Element> list = rootElement.selectNodes("//name");
 for(Element element : list) {
   System.out.println(elemet.getText());
  }

  }catch(Exception e) {
   e.printStackTrace();
  }

 }
}
// 得到根目录
Element rootElement = document.getRootElement();
// Element nameElement = (Element) rootElement.selectSingleNode("//name");

List<Element> list = rootElement.selectNodes("//name");
for(Elemetn element : list){
 System.out.println(element.getText());
}

xml的约素

规定元素只能出现一次.

DTD
Schema

DTD文档类型定义

作用:
定义xml文档的合法构建,它使用一系列的合法元素进行定义文档的结构.

Schema

什么是Schema呢?xml schema是基于xmlDTD替代者,用了描述xml文档的结构,也可以用作xsd来引用.

需要掌握htmlxhtmlxml的命名空间,和对DTD的基本了解.

xml Schema可以定义出现在文档中的元素,和文档中的属性,还可以定义哪个元素是子元素,定义子元素的次序,数目,定义元素是否为空,或者包含文本,定义元素和属性的数据类型.

xml Schema可以针对需求进行扩展,功能强大,是基于xml编写的,支持数据类型,和支持命名空间.

为啥要用XML Schema呢?

XML SchemaDTD要强大,并且XML Schema支持数据类型,最重要的是就是对数据类型的支持.

数据类型:可以描述允许的文档内容,验证数据的准确性,可以定义数据约素,也可以定义数据模型.

XML Schema使用XML语法
XML Schema是可扩展的,因为他们是由xml编写的.

如何使用XSD呢?
XML文档可以对DTDXML Schema进行引用.

// XML
<?xml version="1.0">
<note>
<name> </name>
</note>

DTD文件

// element
<!ELEMENT not (name)>
<!ELEMENT name (#PCDATA)>
//  定义第一行有多少元素
// 定义元素类型是 "#PCDATA"

Schema就是一个xml,使用xml的语法规则,xml解析起来很方便.

DTD
在一个DTD中,元素可以通过元素声明来进行声明.

声明一个元素:
语法:

<!ELEMENT 元素名称 类别>
或者
<!ELEMENT 元素名称 (元素内容)>

空元素
空元素通过类别关键词EMPTY进行声明:
<!ELEMENT 元素名称 EMPTY>

<!ELEMENT br EMPTY>

xml例子
<br/>
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMNT stus (stu)>
<!ELEMNT stu (name,age)>
<!ELEMNT name (#PCDATA)>
<!ELEMNT age (#PCDATA)>

要添加约束引入dtd

src中
xml
stus.dtd
stus.xml
// 文档类型 根标签名字 网络上的dtd
<!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd">

// 引入本地的DTD 标签名字 dtd位置
<!DOCTYPE stus SYSTEM "stus.dtd">

内约束:

如何声明DTD的属性

DTD中,属性是通过ATTLIST 来声明的.

`<!ATTLIST 元素名称 属性名称 属性类型 默认值>

DTD例子:
`<!ATTLIST payment type CDATA "check">

XML例子:
<payment type="check"/>

类型 描述
CDATA 值为字符数据
(值1..) 值是枚举列表中的一个值
ID 值为唯一的id
IDREF 值为另外一个元素的id
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMNT stus (stu)*>
<!ELEMNT stu (name,age)>
<!ELEMNT name (#PCDATA)>
<!ELEMNT age (#PCDATA)>
<!ATTLIST stu id CDATA #IMPLIED>

XML Schema

<?xml version="1.0" encoding="UTF-8"?>
<teachers>
 <teacher>
  <name>dashu</name>
  <age>12</age>
 </teacher>
</teachers>

XML Schema

        <!-- xmlns  :  xml namespace : 名称空间 /  命名空间
        targetNamespace :  目标名称空间 。 下面定义的那些元素都与这个名称空间绑定上。
        elementFormDefault : 元素的格式化情况。  -->
        <schema xmlns="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.itheima.com/teacher"
            elementFormDefault="qualified">

            <element name="teachers">
                <complexType>
                    <sequence maxOccurs="unbounded">
                        <!-- 这是一个复杂元素 -->
                        <element name="teacher">
                            <complexType>
                                <sequence>
                                    <!-- 以下两个是简单元素 -->
                                    <element name="name" type="string"></element>
                                    <element name="age" type="int"></element>
                                </sequence>
                            </complexType>
                        </element>
                    </sequence>
                </complexType>
            </element>
        </schema>

实例文档->约素文档->w3

一个xml可以引用多个schema约束,但是只能引用一个DTD约束.

    实例文档:
        <?xml version="1.0" encoding="UTF-8"?>
        <!-- xmlns:xsi : 这里必须是这样的写法,也就是这个值已经固定了。
        xmlns : 这里是名称空间,也固定了,写的是schema里面的顶部目标名称空间
        xsi:schemaLocation : 有两段: 前半段是名称空间,也是目标空间的值 , 后面是约束文档的路径。
         -->
        <teachers
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://www.itheima.com/teacher"
            xsi:schemaLocation="http://www.itheima.com/teacher teacher.xsd"
        >
            <teacher>
                <name>zhangsan</name>
                <age>19</age>
            </teacher>
            <teacher>
                <name>lisi</name>
                <age>29</age>
            </teacher>
            <teacher>
                <name>lisi</name>
                <age>29</age>
            </teacher>
        </teachers>

程序架构

c/s client/server
用户体验好,占用资源大
b/s browser/server
占用资源小,用户体验差

web服务器:Tomcat

Tomcat

// 连接下载地址
tomcat.apache.org
// startup.bat

Tomcat目录介绍

temp 临时文件
webapps 发布到tomcat服务器上的项目,就放入到这个目录
lib 运行所需的jar文件

查询ip地址

ipconfig
// server.xml
<Context docBase="D:\dashu" path="/a"></Context>
docBase: 项目路径地址
path: 对应的虚拟路径

小结:

配置虚拟路径
在tomcat/conf/catalina/localhost/ 文件夹下新建一个xml文件
// Schema
    约束文档:
        <!-- xmlns  :  xml namespace : 名称空间 /  命名空间
        targetNamespace :  目标名称空间 。 下面定义的那些元素都与这个名称空间绑定上。
        elementFormDefault : 元素的格式化情况。  -->
        <schema xmlns="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.itheima.com/teacher"
            elementFormDefault="qualified">

            <element name="teachers">
                <complexType>
                    <sequence maxOccurs="unbounded">
                        <!-- 这是一个复杂元素 -->
                        <element name="teacher">
                            <complexType>
                                <sequence>
                                    <!-- 以下两个是简单元素 -->
                                    <element name="name" type="string"></element>
                                    <element name="age" type="int"></element>
                                </sequence>
                            </complexType>
                        </element>
                    </sequence>
                </complexType>
            </element>
        </schema>

    实例文档:
        <?xml version="1.0" encoding="UTF-8"?>
        <!-- xmlns:xsi : 这里必须是这样的写法,也就是这个值已经固定了。
        xmlns : 这里是名称空间,也固定了,写的是schema里面的顶部目标名称空间
        xsi:schemaLocation : 有两段: 前半段是名称空间,也是目标空间的值 , 后面是约束文档的路径。
         -->
        <teachers
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://www.itheima.com/teacher"
            xsi:schemaLocation="http://www.itheima.com/teacher teacher.xsd"
        >
            <teacher>
                <name>zhangsan</name>
                <age>19</age>
            </teacher>
            <teacher>
                <name>lisi</name>
                <age>29</age>
            </teacher>
            <teacher>
                <name>lisi</name>
                <age>29</age>
            </teacher>
        </teachers>
    <!-- xml文档里面直接嵌入DTD的约束法则 -->
    <!DOCTYPE stus [
        <!ELEMENT stus (stu)>
        <!ELEMENT stu (name,age)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
    ]>

    <stus>
        <stu>
            <name>张三</name>
            <age>18</age>
        </stu>
    </stus>
             // Dom4j 的 Xpath使用
            Element nameElement = (Element) rootElement.selectSingleNode("//name");
            System.out.println(nameElement.getText());

            List<Element> list = rootElement.selectNodes("//name");
            for (Element element : list) {
                System.out.println(element.getText());
            }
        // Dom4j 基本用法
        try {
            //1. 创建sax读取对象
            SAXReader reader = new SAXReader(); //jdbc -- classloader
            //2. 指定解析的xml源
            Document  document  = reader.read(new File("src/xml/stus.xml"));

            //3. 得到元素、
            //得到根元素
            Element rootElement= document.getRootElement();

            //获取根元素下面的子元素 age
            //rootElement.element("age")
            //System.out.println(rootElement.element("stu").element("age").getText());

            //获取根元素下面的所有子元素 。 stu元素
            List<Element> elements = rootElement.elements();
            //遍历所有的stu元素
            for (Element element : elements) {
                //获取stu元素下面的name元素
                String name = element.element("name").getText();
                String age = element.element("age").getText();
                String address = element.element("address").getText();
                System.out.println("name="+name+"==age+"+age+"==address="+address);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

如果看了觉得不错

点赞!转发!

达叔小生:往后余生,唯独有你
You and me, we are family !
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: 达叔小生
https://www.jianshu.com/u/c785ece603d1

结语

  • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞

原文地址:https://www.cnblogs.com/dashucoding/p/10289524.html

时间: 2024-08-24 22:50:41

第70节:Java中xml和tomcat的相关文章

java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = DocumentHelper.parseText(xmlStr); // XML转字符串 Document document = ...; String text = document.asXML(); //这里的XML DOCUMENT为org.dom4j.Document 二.读取XML文档节点: pack

第61节:Java中的DOM和Javascript技术

Java中的DOM和Javascript技术 DOM是一门技术,是文档对象模型.所需的文档只有标记型文档,如我们所学的html文档(文档中的所有标签都封装成为对象了) DOM: 为Document Object Model, 文档对象模型, 是用来将标记文档以及文档中的标签等所有内容都封装成对象. 把标签文档中所有的标签封装成对象, 文档也封装成对象,DOM技术(标记型文档封装成对象) DOM技术存在浏览器中,内置了DOM技术解析器,变对象是需要进行解析的,描述进行封装.在内存当中进行解析,为D

第80节:Java中的MVC设计模式

前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn.rollBack 隔离级别分别有: 读未提交有脏读 读已提交有不可重复读 可重复读有幻读 可串行化可以解决脏读,幻读,不可重复读 数据库连接池用于创建和管理连接对象. DBCP和C3P0,分别了解代码设置和配置文件设置 DBUtils可以简化数据的增删改查. QueryRunner runner = new QueryRunner()

XML解析——Java中XML的四种解析方式

 XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四种:1.DOM解析:2.SAX解析:3.JDOM解析:4.DOM4J解析.其中前两种属于基础方法,是官方提供的平台无关的解析方式:后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台. 针对以下XML文件,会对四种方式进行详细描述: 1 <?xml version="1.

黑马程序员——XML解析---java中XML的四种解析方式

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四种:1.DOM解析:2.SAX解析:3.JDOM解析:4.DOM4J解析.其中前两种属于基础方法,是官方提供的平台无关的解析方式:后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于jav

Java中XML的四种解析方式(二)

三.JDOM解析 特征: 1.仅使用具体类,而不使用接口. 2.API大量使用了Collections类. 1 import org.jdom2.Attribute; 2 import org.jdom2.Document; 3 import org.jdom2.Element; 4 import org.jdom2.JDOMException; 5 import org.jdom2.input.*; 6 import java.io.*; 7 import java.util.ArrayLis

Java中Xml解析(四种方法)

1.DOM,Document Object Model,基于DOM的XML分析器将XML文档转换成一个对象模型的集合(DOC树),通过对此模型操作实现对XML文档数据的操作,可以在任何时候对XML文档的任何一部分数据进行访问. DOC强制使用树模型来访问XML文档中信息 很灵活,当XML文档较大时对内存需求比较高,而且对结构复杂的DOC树的遍历也很耗时,对机器要求比较高. // step 1: 获得dom解析器工厂(工作的作用是用于创建具体的解析器) DocumentBuilderFactory

Java中XML文件的读取与写入

表现:以  ".xml"为文件扩展名的文件: 存储:树形结构: 用途:存储以及传递信息:利用相同的XML文件将不同的系统联系起来: 在Java程序中如何获取XML文件的内容? 在Java程序中读取XML文件的过程也称为"解析XML文件": 解析的目的:获取节点名.节点值.属性名.属性值: 四种解析方式:DOM  SAX  DOM4J  JDOM java学习群669823128

第77节:Java中的事务和数据库连接池和DBUtiles

前言 看哭你,字数:8803,承蒙关照,谢谢朋友点赞! 事务 Transaction事务,什么是事务,事务是包含一组操作,这组操作里面包含许多个单一的逻辑,只要有一个逻辑没有执行成功就算失败,导致回滚就是指所有的数据都会回到最初的状态. 有事务,是为了保证逻辑一定要成功,如银行转账. 回顾一下 什么是jsp,jsp的三大指令. page: 定义当前页面的信息 include: 包含其他页面 taglib: 引入标签库 三大动作标签: <jsp:forward page="">