XML&Tomcat

1. XML

英文:extendsible markup language:可扩展的标记语言

用途:

1. 可以用来保存数据

2. 可以用来做配置文件

3. 数据传输载体

结构:倒状树形结构

定义xml:后缀:.xml

1. 文档申明

  简单申明: version :解析这个xml的时候,使用什么版本来解析

  <? xml version = "1.0" ?>

  encoding:解析xml中的文字时,使用什么编码来翻译

  <? xml version = "1.0" encoding = "gbk" ?>

  standalone:no:该文档依赖关联其他文档,yes:这是一个独立的文档

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

2. encoding 详解

  在解析这个xml的时候,使用什么编码来解析

  使用notepad++保存文件的编码格式是utf-8,为了通用,建议使用Utf-8

  windows默认的是gbk

3. 元素定义:标签

  里面的标签,<>括起来就是元素,成对出现

  文档声明的第一个元素叫做根元素

  标签里面可以嵌套标签

  标签可以自定义,尽可能的简单,见名知义

4. 简单元素&复杂元素

  简单元素:元素里面包含了普通的文字

  复杂元素:元素里面还可以嵌套其他的元素

5. 属性的定义

  定义在元素的里面,<元素名称  属性名称=“属性的值”>

<?xml version="1.0" encoding="UTF-8"?>
<stus>
    <stu id = 1>
        <name>wangjing</name>
        <password>2015141452156</password>
    </stu>
    <stu id = 2>
        <name>wj</name>
        <password>2015141452153</password>
    </stu>
</stus>

6. xml的注释

  <!--  -->:xml的注释,不能够放在文档的第一行,必须要放在声明的下面

7. CDATA区

严格来说,在XML中仅有<和&是非法的,省略号,引号,大于号是合法的,但是换成实体引用是一个好习惯

>:&gt;

<:&lt;

&:&amp;

如果某段字符串中有过多的字符,并且包含了类似的标签或者关键字这种文字,不想让xml的解析器去解析,那么可以用CDATA来包装,不过很少看到,通常在服务器返回数据时候。

<des><![CDATA[<a href = "http://www.baidu.com">黑马</a>]]></des>

8. XML解析

有很多种,但是常用只有两种

DOM:document objet model 解析将所有的文档读入到内存中,形成树状结构,整个文档称为document对象,属性对应Attribute对象,所有的元素节点对应Element对象,文档也可以称之为Text对象,以上所有的对象都可以称之为Node节点。如果xml特点大,那么会造成内存溢出。可以对文档进行增删操作。

SAX:Simple API for Xml基于事件驱动。读取一行,解析一行,不会造成内存溢出。不可以进行增删,只能查询。

一些组织或者公司,针对以上两种解析方式,给出的解决方案有哪些

jaxp:sun公司,比较繁琐

jdom:

dom4j:使用比较广泛

9. Dom4j基本用法

a. 创建Sax读取对象

b. 指定解析的xml

c. 获取根元素

d. 根据根元素获取子元素或者下面的子孙元素

element():返回该元素下的第一个子元素

elements():返回该元素下的所有子元素

public class MainTestSAX {
    public static void main(String[] args){
        try{
            // 1. 创建sax对象
            SAXReader reader = new SAXReader();
            // 2. 指定解析的xml源
            Document document = reader.read(new File("src/xml/demo.xml"));
            // 3. 得到元素
            Element rootElement = document.getRootElement();
            // 4. 获取根元素下面所有的子元素,stu元素
            List<Element> elements = rootElement.elements();
            // 5. 遍历所有的stu元素
            for(Element element : elements){
                String name = element.element("name").getText();
                String password = element.element("password").getText();
                System.out.println("name:" + name + ",password:" + password);
            }
        } catch(Exception e){
            e.printStackTrace();
        }
    }
}

10. dom4j的Xpath的使用

1. dom4j里面支持Xpath的写法,xpath其实是xml

2. 步骤

  a. 添加jar包依赖 jaxen-1.1-beta-6.jar

  b. 在查找指定的节点时,根据xpath语法规则来查找

  c. 后续的代码与前面的代码一致

public class XpathTest {
    public static void main(String[] args) {
        try {
            // 1。 创建sax对象
            SAXReader reader = new SAXReader();
            // 2. 指定解析的xml源
            Document document = reader.read(new File("src/xml/demo.xml"));
            // 3. 得到元素
            Element rootElement = document.getRootElement();
            // 4. 如果使用xpath,必须引入相应的jar包 jaxen-1.1-beta-6.jar
            Element nameElement = (Element)rootElement.selectSingleNode("//name");
            System.out.println(nameElement.getText());
            // 5. 获取文档中所有的元素
            List<Element> list = rootElement.selectNodes("//name");
            for(Element element : list){
                System.out.println(element.getText());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

11. XML约束

 DTD:语法自成一派,早期出现,可读性比较差

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入dtd来约束这个xml -->

<!-- 文档类型    跟标签名字    网络上的dtd    dtd的名称    dtd的路径 
<!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd"> -->

<!-- 引入本地的DTD
<!DOCTYPE stus SYSTEM "stus.dtd"> -->

<!-- 直接在xml中加入DTD文档约束 -->
<!DOCTYPE stus [
    <!ELEMENT stus (stu)>
    <!ELEMENT stu (name,password)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT password (#PCDATA)>
]>

<stus>
<!-- 这里是两个学生的基本信息 -->
    <stu>
        <name>wangjing</name>
        <password>2015141452156</password>
    </stu>
<!--     <stu>
        <name>wagnjian</name>
        <password>2015141452153</password>
    </stu> -->
<!--     <des><![CDATA[<a href = "http://www.baidu.com">黑马</a>]]></des> -->
</stus>
<!ELEMENT stus (stu)+>:stus下面有一个或者多个元素
<!ELEMENT stu (name, password)>:stu下面有两个元素
<!ELEMENT name (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ATTLIST stu id CDATA #IMPLIED>stu有一个属性,文本类型,可有可无
元素的个数
+:一个或者多个
*:零个或者多个
?:两个或者一个
属性的类型定义
CDATA:属性必须是普通文字
ID:属性的值必须唯一
name | password:两个中只能包含一个子元素

Schema:其实就是一个xml,使用xml的语法规则,xml解析起来比较方便,为了替代DTD,但是Schema约束文本内容比DTD的内容还要多,所以目前也没有真正的替代DTD

<?xml version="1.0" encoding="UTF-8"?>
<!-- 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 = "2">    <!-- "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"?>
<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>wangjing</name>
        <age>20</age>
    </teacher>
    <teacher>
        <name>wangjjun</name>
        <age>20</age>
    </teacher>
</teachers>

名称空间的作用:一个xml指定它的约束规则,假設使用的是DTD,那么只能指定一个DTD,不能指定两个,但是如果一个xml的约束在schema里面,那么可以指定多个shema约束。多个时候需要指定元素使用的是那个约束规则。

有点类似java代码中的包名:函数名

名称空间的作用在于写元素时候,可以指定该元素使用的是哪一套约束规则。

<aa:name></aa:name>
<bb:name></bb:name>

2. 程序架构

1. c/s(client/server):有一部分的代码卸载客户端,用户的体验比较好

缺点:服务器更新,客户端也需要更新,占用的资源比较大

2. B/S(browser/server):客户端只需要有浏览器就好,不需要更新

缺点:用户的体验不佳。

3. web服务器

客户端在浏览器的地址栏上输入地址,然后web服务器软件,接收请求,处理客户端的请求,返回资源,信息

web应用需要服务器支撑:index.html

WebLogic:BEA

Websphere:IBM

IIS:微软

Tomcat:apache:

直接解压,找到startup.bat,双击即可安装,如果一闪而过,则jdk的环境变量出现了问题。

bin:包含了一些jar,bat文件,startup.bat

conf:tomcat配置,server.xml web.xml

lib:tomcat运行时所需的jar文件

logs:运行时的日志文件

temp:临时文件

webapps:发布到tomcat服务器上的项目,存放在这个目录

work:jsp翻译成java文件存放地

访问另一个电脑文件的方法:

1. 将文件放到webapps目录下新建一个文件夹,重启tomcat,localhost:8080/文件夹名称/文件名

或者直接放到root目录下,localhost:8080/文件名

使用IP地址;访问:IP地址名:8080/文件夹名/文件名

2. 虚拟路径:使用localhost:8080打开tomcat首页,在左侧找到tomcat文档入口,点击进去以后,在左侧的configuration,再点击context,找到server.xml,用记事本打开,在host下面添加

<Context docBase = "D:Development_Toolapache-tomcat-7.0.52webappsxml" path = "/myxml"></Context>
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
            <Context docBase = "D:Development_Toolapache-tomcat-7.0.52webappsxml" path = "/myxml"></Context>
        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

docBase:项目的路径地址

path:对应的虚拟路径,一定要以/开头

采用http://localhost:8081/myxml/person.xml的方式访问

3. 在D:Development_Toolapache-tomcat-7.0.52confCatalinalocalhost目录下新建person.xml文件

<?xml version='1.0' encoding='utf-8'?>
<Context docBase = "D:Wet_Downloadxml"></Context>

采用http://localhost:8081/people/person.xml的方式访问

MyEclipse如何配置tomcat

开启MyEcliipse Tomcat v8.5,点击工程名,选择run as Myeclipse Server Application,再利用http://localhost:8082/JAVA/wang.html即可访问

原文地址:https://www.cnblogs.com/feng-ying/p/9787558.html