JavaEE中级.20190604.XML.Web和Servlet(一).JavaWeb 简介.Tomcat.HTTP 协议.

一.XML

      1、超文本标记语言 HTML

             (1)写法格式: <a href="link.html">link</a>
             (2)关注数据的展示与用户体验
             (3)标记是预定义、不可扩展的(如 <a></a>表示超链接)

       2、可扩展的标记语言 XML

             (1)写法格式:同 html 样式
             (2)仅关注数据本身
             (3)标记可扩展,可自定义

       3、XML作用

                     XML可以用于描述数据、存储数据、传输(交换)数据。XML现在已经成为一种通用的数据交换格式,它的平台

             无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便,用户可以定义自己需要的标记。

              1)存储、交换数据

                    XML 只用元素和属性来描述数据,而不提供数据的显示方法,这使得 XML 具有能够运行于不同系统平台之间和

              转换成不同格式目标文件。 用 XML 在应用程序和公司之间作数据交换,几个应用程序可以共享和解析同一个 XML

              文件,不必使用传统的字符串解析或拆解过程。

               2)配置

                     许多应用都将配置数据存储在各种文件里,如 SSH、Android。使用 XML 配置文件的应用程序能够方便地处理

               所需数据,不用像其它应用那样要经过重新编译才能修改和维护应用系统。xml 比 数据库占用的资源少,操作方便,

               用来存储简单的信息,现在主要用在程序的配置文件上(比如 web.xml) 。 现在有越来越多的设备也支持 XML了。

     3、XML示例

                   用 XML 存储已注册用户的数据方式

                   1)方式一

<?xml version="1.0" encoding="UTF-8"?>
 <people> 
    <person> 
        <name>白晶晶</name> 
        <age>28</age> 
    </person> 
    <person> 
        <name>至尊宝</name> 
        <age>300</age> 
    </person> 
 </people>

                    2)方式二

<?xml version="1.0" encoding="UTF-8"?> 
<people> 
    <person name="白晶晶" age="28"></person> 
    <person name="至尊宝" age="300"></person> 
</people>

     4.格式良好的xml

         1)语法规范:

               ①必须有XML文档声明:

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

                        

                 说明:值 no 表示这个 XML 文档不是独立的而是依赖于外部所定义的一个 DTD. 值 yes 表示这个 XML 文档是自

                            包含的(self-contained).

                            注意文本文件保存时候默认的编码格式是ANSI,需用记事本把它手动改为UTF-8保存。
                 ②必须有且仅有一个根元素
                 ③严格区分大小写
                 ④属性值用引号(双引号或单引号) :等号分开的名称-值对;在一个元素上,相同的属性只能出现一次
                 ⑤标记成对;
                 ⑥空标记关闭;

                 ⑦元素正确嵌套。

         2)元素命名规则

                   ①名称中可以包含字母、数字或者其他可见字符;

                   ②名称不能以数字开头;

                   ③不能以XML/xml/Xml…开头;

                   ④名称中不能含空格;

                   ⑤名称中不能含冒号(注:冒号留给命名空间使用)

         3) 实体

                    实体叫ENTITY,实体的作用是避免重复输入。作用相当于宏或者变量。                   

                    ①内置的5种实体 实体 符号 &lt; < &gt; > &amp; & &quot; " &apos; '
                    ②自定义实体

<!DOCTYPE 根元素[ 
        <!--实体声明--> 
        <!ENTITY 实体名 "实体内容"> 
]>

                         使用已定义的实体:&实体名;

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE sxt[ 
<!--实体声明--> 
<!ENTITY xm "明明"> 
<!ENTITY gen "保密"> 
]> 
<sxt>
    <teacher> 
        <name>明明</name> 
        <gender>保密</gender> 
    </teacher> 
    <!--引用实体的方法--> 
    <teacher> 
        <name>&xm;</name> 
        <gender>&gen;</gender> 
    </teacher> 
</sxt>

        4)文档类型声明

              文档类型定义——DOCTYPE,文档类型声明,紧跟XML声明之后,包含所有实体声明

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE 根元素标记名[ 
        <!--实体声明--> 
]>

      5.组成

          1)构成

                所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:

元素 
属性 
实体 
PCDATA 
CDATA 
CDATA节(character data)

          2)CDATA

                  用于把整段文本解释为纯字符数据而不是标记的情况。如包含大量的<、>、&、或者"字符。CDATA节中的所有字

               符都会被当做元素字符数据的常量部分,而不是XML标记,可以输入除]]>外任意字符,不能嵌套。   

                  <![CDATA[ ...... ]]>     

          3)PCDATA 的意思是被解析的字符数据(parsed character data)。
                可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
                PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
                文本中的标签会被当作标记来处理,而实体会被展开。
                不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 的内置实体来分别替换它们。

      6.XML解析(重点)

                 基本的解析方式有两种:一种叫SAX,另一种叫DOM。SAX(Simple API for XML)是基于事件流的解析,DOM

         (Document Object Model)是基于XML文档树结构的解析。SAX:效率高,数据量小,仅一次获取 ,DOM:整颗树加载到

         内存中,耗内存,可多次获取。

                              

        1)DOM解析

                   与js中的类似,使用JAXP(Java API for XML Parsing),即:用于XML解析的Java API.
                   DOM(Document Object Model, 文档对象模型),在应用程序中,基于DOM的XML分析器将一个XML文档转换

              成一个对象模型的集合(通常称为DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据

              的操作。
                   XML本身是以树状的形式出现的,所以DOM操作的时候,也将按章树的形式进行转换。
                   在整个DOM树种,最大的地方指的是Document,表示一个文档,在这个文档中存在一个根节点。
                   注意:在使用DOM操作的时候,每一个文字的区域也是一个节点,称为文本节点。
              核心操作接口
                  在DOM解析中有以下四个核心的操作接口
                  Document : 此接口代表了整个XML文档,表示的是整棵DOM树的根,提供了对文档中的数据进行访问和操作

              的入口,通过Document节点可以访问XML文件中所有的元素内容。
                  Node : 此接口在整个DOM树种具有举足轻重的低位,DOM操作的核心接口中有很大一部分接口是从Node接口继

             承过来的。例如:Document、Element等接口,在DOM树种,每一个Node接口代表了DOM树种的一个节点。
                  NodeList : 此接口表示的是一个节点的集合,一般用于表示有顺序关系的一组节点,例如:一个节点的子节点,

             当文档改变的时候会直接影响到NodeList集合。
                 NamedNodeMap : 此接口表示的是一组节点和其唯一名字对应的一一对应关系,本接口主要用于属性节点的表示上。
             DOM解析过程
                 如果一个程序需要进行DOM解析读取操作的话,也需要按照如下的步骤进行:

①建立DocumentBuilderFactory : DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
②建立DocumentBuilder: DocumentBuilder builder = factory.newDocumentBuilder(); 
③建立Document : Document doc = builder.parse(“要解析的文件路径”); 
④建立NodeList : NodeList nl = doc.getElementsByTagName(“读取节点”); 

⑤进行XML信息读取

                 DOM操作除了可以进行解析外,也可以进行文档的生成
                 如果想要生成XML文件,则在创建文档的时候,就应该使用 newDocument()方法
                 如果要将DOM的文档输出,本身是比较麻烦的 。一次编写多次copy

public static void createXml() throws Exception{ 
    //获取解析器工厂 
    DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); 
    //获取解析器 
    DocumentBuilder builder=factory.newDocumentBuilder(); 
    //创建文档 
    Document doc=builder.newDocument(); 
    //创建元素、设置关系 
    Element root=doc.createElement("people"); 
    Element person=doc.createElement("person"); 
    Element name=doc.createElement("name"); 
    Element age=doc.createElement("age"); 
    name.appendChild(doc.createTextNode("shsxt")); 
    age.appendChild(doc.createTextNode("10")); 
    doc.appendChild(root); 
    root.appendChild(person); 
    person.appendChild(name); 
    person.appendChild(age); 
    //写出去 
    // 获得变压器工厂 
    TransformerFactory tsf=TransformerFactory.newInstance(); 
    Transformer ts=tsf.newTransformer(); 
    //设置编码
    ts.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 
    //创建带有DOM节点的新输入源,充当转换Source树的持有者 
    DOMSource source=new DOMSource(doc); 
    //充当转换结果的持有者 
    File file=new File("src/output.xml"); 
    StreamResult result=new StreamResult(file); 
    ts.transform(source, result); 
}

        2)SAX解析

                   SAX(Simple API for XML)解析是按照xml文件的顺序一步一步的来解析。SAX没有官方的标准机构,它不属于任

              何标准阻止或团体,也不属于任何公司或个人,而是提供任何人使用的一种计算机技术。
                   SAX(Simple API for XML,操作XML的简单接口),与DOM操作不同的是,SAX采用的是一种顺序的模式进行访问,

              是一种快速读取XML数据的方式。当使用SAX解析器进行操作的时候会触发一系列的事情,当扫描到文档(document)

              开始与结束、元素(element)开始与结束时都会调用相关的处理方法,并由这些操作方法作出相应的操作,直至整个

              文档扫描结束。
                     如果要想实现这种SAX解析,则肯定首先建立一个SAX的解析器

// 1、创建解析器工厂 
SAXParserFactory factory = SAXParserFactory.newInstance(); 
// 2、获得解析器 
SAXParser parser = factory.newSAXParser(); 
// SAX解析器 ,继承 DefaultHandler 
String path = new File("resource/demo01.xml").getAbsolutePath(); 
// 解析 
parser.parse(path, new MySaxHandler());

        3) DOM4j解析

                    dom4j是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集

               成了DOM,SAX和JAXP。下载路径:
                                                                  http://www.dom4j.org/dom4j-1.6.1/
                                                                  http://sourceforge.net/projects/dom4j
                    可以使用DOM4J进行XML文件的读、写操作
                    DOM4J与JDOM一样都属于一个免费的XML开源组建,但是由于现在的开发框架中使用该技术较多,比如                                    Hibernate、Spring等都使用DOM4J这个功能,所以作为介绍,大家可以对该组件有一个了解。并没有谁好谁坏,

                 一般框架使用DOM4J较多,而我们平时如果要用则JDOM较常见。
                     可以发现DOM4J发挥了很多新特性,比如输出格式就可以很好
                     解析

File file = new File("resource/outputdom4j.xml"); 
    SAXReader reader = new SAXReader(); 
    // 读取文件作为文档 
    Document doc = reader.read(file); 
    // 获取文档的根元素 
    Element root = doc.getRootElement(); 
    // 根据跟元素找到全部的子节点 
    Iterator<Element> iter = root.elementIterator(); 
    while(iter.hasNext()){ 
        Element name = iter.next(); 
        System.out.println("value = " + name.getText()); 
}

        创建

    // 使用DocumentHelper来创建 
    Document对象 Document document = DocumentHelper.createDocument(); 
    // 创建元素并设置关系 
    Element person = document.addElement("person"); 
    Element name = person.addElement("name");
    Element age = person.addElement("age"); 
    // 设置文本 name.setText("shsxt"); 
    age.setText("10"); 
    // 创建格式化输出器 
    OutputFormat of = OutputFormat.createPrettyPrint(); 
    of.setEncoding("utf-8"); 
    // 输出到文件 
    File file = new File("resource/outputdom4j.xml"); 
    XMLWriter writer = new XMLWriter(new FileOutputStream(new File(file.getAbsolutePath())),of); 
    // 写出 
    writer.write(document); 
    writer.flush(); 
    writer.close();

二.Web和Servlet(一)    

      1.简单通信

                回顾 Socket 编程给我们最大的感受,是可以在多台电脑之间进行数据的传输,这就是网络编程的开端和基础,通

         过客户端请求服务器端通信,直观了解 Web 编程。

                 Server

/** 
* 服务器端,接收客户端请求并给出简单的响应 
* @author Administrator 
*/ 
public class Server { 
    public static void main(String[] args) throws IOException { 
        //1、创建服务器,指定端口ServerSocket(int port) 
        ServerSocket socket=new ServerSocket(8888);
        //2、接收客户端连接 
        Socket client=socket.accept(); 
        System.out.println("******************"); 
        //获取数据的输入流 
        InputStream is=client.getInputStream(); 
        //使用字符缓存流 
        BufferedReader br=new BufferedReader(new InputStreamReader(is)); 
        String msg=""; 
        while((msg=br.readLine())!=null){ 
            System.out.println(msg); 
        } 
        br.close(); 
    } 
}

         Client

/** 
* 客户端:向服务器发送请求,并发送简单的消息 
* @author Administrator 
*/ 
public class Client { 
    public static void main(String[] args) throws UnknownHostException, 
IOException { 
        //创建客户端 必须指定服务器+端口 
        Socket client=new Socket("localhost",8888); 
        //发送消息 请求资源
        //获取发送流 
        OutputStream os=client.getOutputStream(); 
        BufferedWriter br=new BufferedWriter(new OutputStreamWriter(os)); 
        //写出消息,发送内容 
        String msg="hello I need some source"; 
        br.write(msg); 
        br.close(); 
    } 
}

        从上面的例子总结通信条件如下:
        ①需要有服务器端(server) :等待被请求,需要暴露ip 和 port
        ②需要有客户端(client):主动发起请求 ,知晓服务端的ip 和 port
        ③通信规则(协议):TCP/IP协议
             ip用于定位计算机;端口号(定位程序),用于标识进程的逻辑地址,不同进程的标志;有效端口:0~65535,其中0~1024由系统

        使用或者保留端口,开发中建议使用1024以上的端口。

     2.不同的请求

                Client

package com.shsxt.socket; 
import java.io.IOException;
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.InetSocketAddress; 
import java.net.Socket;
import java.net.SocketAddress; 
/** 
* 
* @author Lj 
* 
* 客户端 
*/ 
public class Client { 
public static void main(String[] args) throws IOException { 
    // 通过系统默认类型的 SocketImpl 创建未连接套接字 
    Socket socket = new Socket(); 
    //此类实现 IP 套接字地址(IP 地址 + 端口号)。它还可以是一个对(主机名 + 端口号),在此情况下,将尝试解析主机名 
    SocketAddress address = new InetSocketAddress("localhost",8898); 
    // 将此套接字连接到服务器,并指定一个超时值。 或者不指定超时时间 
    socket.connect(address, 1000); 
    OutputStream os = socket.getOutputStream(); 
    os.write("time".getBytes()); 
    os.flush(); 
    socket.close(); 
    } 
}

        Server

        3.复杂请求

             随着客户需求越来越复杂,需要的功能越来越多,我们的服务器端需要处理的请求越来越多,需要区分不同的请求,

        还需要按照不同请求进行请求数据的提取以及资源的分配和运算还有逻辑的处理,最后还需要响应给客户端,这就使得

        服务器端代码越来越复杂,实现越来越困难。
            根据以往的经验,双方进行通信只需要遵循一定的规则就可以很明确地知道各部分数据的含义,于是出现了网络更上

        层的应用协议(后面讲的 HTTP 协议),规定服务器端和客户端通信的规则。
           客户端请求服务器端和服务器端响应客户端,都按照固定的规则,那么接收请求和相应数据这部分操作就可以固定下

       来,交给特定的一段代码来执行,从而减少服务器端的代码量,于是出现了接下来说的服务器。

        4. 服务器的出现
                   当客户端请求的资源越来越丰富,需求越来越复杂,程序的核心就应该放在解决业务和 计算响应数据上,于是

            出现了服务器统一接收客户端处理并进行分发到不同的资源,由各个资源进行处理,最后结果交由服务器响应。
                   从上面的描述可以发现,现在所说的服务器只是负责接收请求,对请求进行分发,以及最后将获取的数据进行相

            应的固定框架,至于数据怎么计算得出还得根据具体的业务需求编 写(填充)代码。在没有业务需求的情况下就能将

            服务器准备出来,现在市面上的服务器有 很多,比较常用的有:Tomcat、JBOOS、IBM 的 WebSphere、BEA 的                        WebLogic 以及 Apache 等。

三.JavaWeb 简介

             随着 Java 语言的流行,Java 在网站和企业级应用的开发上应用得越来越普遍,Java Web开发已经成为 Java 企业

      级解决方案中不可或缺的重要组成部分。 Java Web 是用 Java 技术来解决相关 web 互联网领域的技术总和。Web 包括:            web 服务器和web客户端两部分。Java 在客户端的应用有 java applet,不过使用得很少,Java 在服务 器端的应用非常

       的丰富,比如 Servlet,JSP 和第三方框架等等。Java 技术对 Web 领域的发展 注入了强大的动力。Web 开发可以理解

       为做网站。
             随着网络技术的不断发展,单机的软件程序已经难以满足网络计算的需要。为此,各种 各样的网络程序开发体系应

         运而生。其中,运用最多的网络应用程序开发体系结构可以分为 两种,一种是基于浏览器/服务器的 B/S 结构,另一种

        是基于客户端/服务器的 C/S 结构。
        1. C/S体系结构
                 C/S 是 Client/Server 的缩写,即客户端/服务器结构。在这种结构中,服务器通常采用高 性能的 PC 机或工作站,

            并采用大型数据库系统(如 Oracle 或 SQL Server),客户端则需要安装专用的客户端软件。这种结构可以充分利用

            两端硬件环境的优势,将任务合理分配到客户端和服务器,从而降低了系统的通信开销。在 2000 年以前,C/S 结构

           占据网络程序开发领域的主流。

                        

     2. B/S 体系结构
                B/S 是 Browser/Server 的缩写,即浏览器/服务器结构。在这种结构中,客户端不需要开发任何用户界面,而统一

          采用如 IE、Firefox、Chrome 等浏览器,通过 Web 浏览器向 Web 服务器发送请求,由 Web 服务器进行处理,并将处

          理结果逐级传回客户端。这种结构利用不断成熟和普及的浏览器技术实现原来需要复杂专用软件才能实现的强大功能,

          从而节约了开发成本,是一种全新的软件体系结构。这种体系结构已经成为当今应用软件的首选体系结构。

            

五.Tomcat

       1. 什么是 Tomcat

                  Tomcat 是一个符合 JavaEE WEB 标准的最小的 WEB 容器,所有的 JSP 程序一定要有 WEB 容器的支持才能

           运行,而且在给定的 WEB 容器里面都会支持事务处理操作。
                  Tomcat 是由 Apache 提供的(www.apache.org)提供的可以用安装版和解压版,安装版可以在服务中出现一个                     Tomcat 的服务,免安装没有,开发中使用免安装版。 Tomcat 简单的说就是一个运行 Java 的网络服务器,底层是

           Socket 的一个程序,它也是 JSP 和 Servlet 的一个容器。 Tomcat 是 Apache 软件基金会(Apache Software                               Foundation)的 Jakarta 项目中的一个核心项目,由 Apache、Sun和其他一些公司及个人共同开发而成。由于有了 

           Sun 的参与和支持,最新的 Servlet 和 JSP 规范总是能在 Tomcat 中得到体现。因为 Tomcat 技术先进、性能稳定,

          而且免费,因而深受 Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的 Web 应用服务器。
                Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器, 在中小型系统和并发访问

           用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。 对于一个初学者来说,可以这样认为,当在一

          台机器上配置好 Apache 服务器,可利用它响应 HTML(标准通用标记语言下的一个应用)页面的访问请求。实际Tomcat            部分是 Apache 服务器的扩展,但它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与 Apache 独立的进

          程单 独运行的。
                当配置正确时,Apache 为 HTML 页面服务,而 Tomcat 实际上是在运行 JSP 页面和 Servlet。另外,Tomcat 和

           IIS 等 Web 服务器一样,具有处理 HTML 页面的功能,另外它还是 一个 Servlet 和 JSP 容器,独立的 Servlet 容器是                  Tomcat 的默认模式。不过,Tomcat 处理静态 HTML 的能力不如 Apache 服务器。目前 Tomcat 最新版本为 9.0。

     2.Eclipse 关联 Tomcat

             Window→preferences→Server→Runtime Environment→add→apache-tomcat-8.0.23

六、HTTP 协议

                 HTTP 协议(Hypertext Transfer Protocol, 超文本传输协议),是一个客户端请求和回应的 标准协议,这个协议

           详细规定了浏览器和万维网服务器之间互相通信的规则。用户输入地址 和端口号之后就可以从服务器上取得所需要的

           网页信息。通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容 格式。客户端发送

           给服务器的格式叫“请求协议”;服务器发送给客户端的格式叫“响应协议”。

           1.浏览器中的书写格式

                      在 B/S 体系架构中,客户端都统一成了浏览器,要请求服务器端资源需要通过浏览器进行,此时由浏览器将我

               们给出的请求解析为满足 HTTP 协议的格式并发出。则我们发出的请求格式需要按照浏览器规定的格式来书写,在

               浏览器中书写格式如下:

                      

                   当浏览器获取到信息以后,按照特定格式解析并发送即可。接收到服务器端给出的响应时,也按照 HTTP 协议进

            行解析获取到各个数据,最后按照特定格式展示给用户。

       2.HTTP 请求

                  http 请求由三部分组成,分别是:请求行、请求头、请求正文
                   通过chrome浏览器, F12→ Network查看 

       3.HTTP 响应

                  在接收和解释请求消息后,服务器返回一个 HTTP 响应消息。HTTP 响应也是由三个部分组成,分别是:状态行、

           消息报头、响应正文

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值