第一章 XML

1.1 配置文件

1.1.1 配置文件的作用

配置文件是用于给应用程序提供配置参数以及初始化设置的一些有特殊格式的文件

1.1.2 常见的配置文件类型

  1. properties文件,例如druid连接池就是使用properties文件作为配置文件
  2. XML文件,例如Tomcat就是使用XML文件作为配置文件
  3. YAML文件,例如SpringBoot就是使用YAML作为配置文件
  4. json文件,通常用来做文件传输,也可以用来做前端或者移动端的配置文件

1.2 properties文件

1.2.1 文件示例

  1. atguigu.jdbc.url=jdbc:mysql://192.168.198.100:3306/mybatis1026
  2. atguigu.jdbc.driver=com.mysql.jdbc.Driver
  3. atguigu.jdbc.username=root
  4. atguigu.jdbc.password=atguigu

1.3 XML文件

1.3.1 概念介绍

XML是eXtensible Markup Language的缩写,翻译过来就是可扩展标记语言。所以很明显,XML和HTML一样都是标记语言,也就是说它们的基本语法都是标签。

可扩展

可扩展三个字表面上的意思是XML允许自定义格式。但是别美,这不代表你可以随便写。

img002.png

在XML基本语法规范的基础上,你使用的那些第三方应用程序、框架会通过设计『XML约束』的方式『强制规定』配置文件中可以写什么和怎么写,规定之外的都不可以写。

XML基本语法这个知识点的定位是:我们不需要从零开始,从头到尾的一行一行编写XML文档,而是在第三方应用程序、框架已提供的配置文件的基础上修改。要改成什么样取决于你的需求,而怎么改取决于XML基本语法和具体的XML约束。

1.3.2 XML的基本语法

  • XML文档声明

这部分基本上就是固定格式,要注意的是文档声明一定要从第一行第一列开始写

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

元素

  • 元素 element
<bean></bean>
  1. 元素是XML文档中最重要的组成部分,
  2. 普通元素的结构开始标签、元素体、结束标签组成。例如:大家好
  3. 元素体:元素体可以是元素,也可以是文本,例如:你好
  4. 空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭合,例如:
  5. 元素命名:
1. 区分大小写
2. 不能使用空格,不能使用冒号:
3. 不建议以XML、xml、Xml开头

格式化良好的XML文档,必须只有一个根元素。

属性

  • 属性 attribute
<bean id="" className="">
  1. 属性是元素的一部分,它必须出现在元素的开始标签中
  2. 属性的定义格式:属性名=属性值,其中属性值必须使用单引或双引
  3. 一个元素可以有0~N个属性,但一个元素中不能出现同名属性
  4. 属性名不能使用空格、冒号等特殊字符,且必须以字母开头

1.3.3 XML的约束(稍微了解)

将来我们主要就是根据XML约束中的规定来编写XML配置文件,而且会在我们编写XML的时候根据约束来提示我们编写, 而XML约束主要包括DTD和Schema两种。

什么是DTD

DTD(Document Type Definition),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

DTD重点要求

开发中,我们很少自己编写DTD约束文档,通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档。常见框架使用DTD约束有:mybatis、struts2、hibernate等。

<?xml version="1.0" encoding="UTF-8"?>
<!--
    如果开发人员需要在xml使用当前DTD约束,必须包括DOCTYPE。
    格式如下:
    <!DOCTYPE beans SYSTEM "bean.dtd">
-->
<!ELEMENT beans (bean*,import*) >
<!ELEMENT bean (property*)>
<!ELEMENT property (#PCDATA)>

<!ELEMENT import (#PCDATA)>

<!ATTLIST bean id CDATA #REQUIRED
               className CDATA #REQUIRED
>

<!ATTLIST property name CDATA #REQUIRED
                   value CDATA #REQUIRED
>

<!ATTLIST import resource CDATA #REQUIRED>
  • Schema

Schema是新的XML文档约束;
Schema要比DTD强大很多,是DTD 替代者;
Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml。
Schema 功能更强大,数据类型更完善
Schema 支持名称空间

我们将来使用SSM框架中的Spring、SpringMVC框架时,会涉及到一点点对Schema约束的设置。不过不必紧张,有IDEA的支持操作会非常简单,我们现在只需要理解基本概念即可。

首先我们要理解一个概念:『名称空间』,英文:name space
img003.png

schema的官方约束:
schema的官方约束.JPG
schema的命名空间:
schema的命名空间.JPG

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
    模拟spring规范,如果开发人员需要在xml使用当前Schema约束,必须包括指定命名空间。
    格式如下:
    <beans xmlns="http://www.atguigu.com/bean"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.atguigu.cn/bean bean-schema.xsd"
    >
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.atguigu.cn/bean"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:tns="http://www.atguigu.cn/bean"
        elementFormDefault="qualified">
    <!-- 声明根标签 -->
    <element name="beans">
        <complexType>
            <choice minOccurs="0" maxOccurs="unbounded">
                <element name="bean">
                    <complexType>
                        <sequence minOccurs="0" maxOccurs="unbounded">
                            <element name="property">
                                <complexType>
                                    <attribute name="name" use="required"></attribute>
                                    <attribute name="value" use="required"></attribute>
                                </complexType>
                            </element>
                        </sequence>
                        <attribute name="id" use="required"></attribute>
                        <attribute name="className" use="required"></attribute>
                    </complexType>
                </element>
                <element name="import">
                    <complexType>
                        <attribute name="resource" use="required"></attribute>
                    </complexType>
                </element>
            </choice>
        </complexType>
    </element>
</schema>
属性名 作用
xmlns 指出当前XML文档约束规则的名称空间在哪里
我们就是通过这个属性来引用一个具体的名称空间
xmlns:xsi 指出xmlns这个属性是在哪个约束文档中被定义的
xsi:schemaLocation 语法格式:在xsi名称空间下引用schemaLocation属性
配置含义:指定当前XML文档中所用到的约束文档本身的文件的地址

1.4 XML解析(重点)

1.4.1 XML解析的作用

用Java代码读取xml中的数据

1.4.2 XML的两种解析方式

  1. DOM解析:将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。
    • 优点:因为在内存中会形成dom树,程序员可以以面向对象的方式操作XML文件,写代码就非常方便,可以对dom树进行增删改查。
    • 缺点:dom树非常占内存,解析速度慢。所以一般解析体积较大的XML文件的时候不会采用DOM解析
  2. SAX解析:逐行读取,基于事件驱动,解析一行释放一行,内存占用非常小

建议:一般会采用DOM解析方式来解析XML,除非是解析体积很大的XML文件才会采用SAX解析

1.4.3 常见的XML解析器

在使用Java代码解析XML的时候,我们通常不会直接使用JDK内置的原生的DOM或者SAX解析XML,因为代码实在是太复杂了。一些公司和组织已经封装好了优秀的XML解析器,我们通常会使用第三方XML解析器来解析XML

  1. JAXP: sun公司提供的解析。支持dom和sax。(不常用)
  2. JDOM
  3. DOM4J(常用)

1.4.4 DOM4J的使用步骤

  1. 导入jar包 dom4j.jar
  2. 创建解析器对象(SAXReader)
  3. 解析xml 获得Document对象
  4. 获取根节点RootElement
  5. 获取根节点下的子节点

1.4.5 DOM4J的API介绍

  1. 创建SAXReader对象
SAXReader saxReader = new SAXReader();
  1. 解析XML获取Document对象: 需要传入要解析的XML文件的字节输入流
Document document = reader.read(inputStream);
  1. 获取文档的根标签
Element rootElement = documen.getRootElement()
  1. 获取标签的子标签
//获取所有子标签
List<Element> sonElementList = rootElement.elements();
//获取指定标签名的子标签
List<Element> sonElementList = rootElement.elements("标签名");
  1. 获取标签体内的文本
String text = element.getText();
  1. 获取标签的某个属性的值
String value = element.AttributeValue("属性名");

1.4.6 XPATH的使用介绍

  1. XPATH的作用: 使用规则匹配直接查找xml文件中的指定节点
  2. XPATH的使用步骤:
    1. 引入dom4j和xpath的jar包
    2. 创建解析器对象
    3. 解析xml 获得document对象
    4. 使用document对象调用方法,根据路径规则查找节点
  3. XPATH的API:
    • selectSingleNode(“路径规则”): 根据路径规则,查找满足条件的第一个节点
    • selectNodes(“路径规则”): 根据路径规则,查找满足条件的所有节点

第二章 Tomcat服务器

2.1 Tomcat的简介

Tomcat 服务器是一个开源免费的轻量级Web应用服务器,由Sun公司和Apache软件基金会联合发起的。在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。也是绝大多数JavaEE开发工程师所必用的

2.2 Tomcat的作用

Tomcat的作用是作为Web服务器部署Web项目,从而让客户端能够访问,在这个过程中它扮演者两个角色: Web服务器和Servlet容器。也就是说,Tomcat作为Java程序的运行环境了。

2.2.2 Web服务器

img006.png

2.2.2 Servlet容器

img007.png

2.3 Tomcat的安装和启动

  1. 配置JAVA_HOME和java环境变量: 因为Tomcat是Java代码编写的,所以必须要配置JAVA_HOME和java环境变量之后才能运行,我们可以通过下面的命令检测:

    C:\Users\Administrator>java -version
    java version “1.8.0_141”
    Java(TM) SE Runtime Environment (build 1.8.0_141-b15)
    Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)

    C:\Users\Administrator>echo %JAVA_HOME%
    D:\software\Java

    C:\Users\Administrator>echo %PATH%
    D:\software\xftp;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;D:\software\Java\bin;D:\software\apache-maven-3.5.4\bin;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;

  2. 将Tomcat压缩包解压到一个非中文无空格的目录下

img008.png

  1. 启动Tomcat并访问首页
    运行Tomcat解压后根目录下\bin\startup.bat即可启动Tomcat服务器,然后打开谷歌浏览器,在地址栏输入“http://localhost:8080”就可以访问Tomcat了

img014.png

2.4 Tomcat的目录结构

Tomcat目录结构.JPG

2.5 Tomcat的端口

在Tomcat安装目录下的conf目录中,可以看到一个server.xml文件,这个xml文件中就配置了Tomcat的端口号

……
<!-- 第22行 -->
<Server port="8005" shutdown="SHUTDOWN">
……
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
……
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

三个位置共定义了3个端口号,Tomcat启动后,这个三个端口号都会被占用。

2.6 在Idea中集成Tomcat

img016.png

img017.png

img018.png
img019.png

img020.png

2.7 创建动态Web工程(服务器端应用程序)

1. 第一步:创建Empty Project

2. 第二步:创建动态Web的Module

img023.png

img024.png

创建好的工程目录结构:

img025.pngWeb项目的目录结构.JPG

2.8 动态工程目录结构

目录或文件名 功能
src目录 存放Java源文件
web目录 存放Web开发相关资源
web/WEB-INF目录 存放web.xml文件、classes目录、lib目录
web/WEB-INF/web.xml文件 别名:部署描述符deployment descriptor
作用:Web工程的核心配置文件
web/WEB-INF/classes目录 存放编译得到的*.class字节码文件
web/WEB-INF/lib目录 存放第三方jar包

2.9 创建用来部署Web工程的Tomcat实例

2.9.1 编辑Tomcat实例

img026.png

2.9.2 配置Tomcat实例

服务器的配置.JPG
img030.png
服务器中的目录结构.JPG

2.9.3 部署项目

img028.png
发布Tomcat的webapps目录.JPG

2.9.4 部署好之后的效果

img032.png

2.9.5 启动服务器

img032.png

2.9.6 Idea运行时的界面布局

img048.png

2.9.7 为什么需要重新部署?

对于已经运行过的Web项目,如果我们增加了目录和文件,那么部署目录有可能不会自动同步过来,从而造成实际运行的效果和我们期望的不同。

如下图中,我们在工程目录已经新增了images目录和两个图片:

img042.png

第三章 HTTP协议

3.1 HTTP协议概念

3.1.1 HTTP协议介绍

HTTP:Hyper Text Transfer Protocol 超文本传输协议。是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息,以及得到什么样的响应。浏览器和服务器都遵循HTTP协议。

3.1.2 HTTP协议的组成

HTTP协议由请求和响应两部分构成,请求是由客户端往服务器传输数据,响应是由服务器往客户端传输数据。

请求和响应过程:
请求和响应过程.JPG

3.2 HTTP 请求信息GET

img01.png

请求报文的三个部分

img02.png
GET请求.JPG

3.3 请求信息POST

请求消息头

作用: 通过具体的参数对本次请求进行详细的说明

格式: 键值对,键和值之间使用冒号隔开

相对比较重要的请求消息头:

名称 功能
Host 服务器的主机地址
Accept 声明当前请求能够接受的『媒体类型』
Referer 当前请求来源页面的地址
Content-Length 请求体内容的长度
Content-Type 请求体的内容类型,这一项的具体值是媒体类型中的某一种
Cookie 浏览器访问服务器时携带的Cookie数据

3.3 HTTP响应信息

img07.pngPOST请求.JPG

3.3.1 响应消息头HTTP的响应.JPG

名称 功能
Content-Type 响应体的内容类型
Content-Length 响应体的内容长度
Set-Cookie 服务器返回新的Cookie信息给浏览器
location 在重定向的情况下,告诉浏览器访问下一个资源的地址

3.3.2 响应体

服务器返回的数据主体,有可能是各种数据类型。

  • HTML页面
  • 图片
  • 视频
  • 以下载形式返回的文件
  • CSS文件
  • JavaScript文件

3.3.3 响应状态码

作用:以编码的形式告诉浏览器当前请求处理的结果

状态码 含义
200 服务器成功处理了当前请求,成功返回响应
302 重定向
400 请求参数问题
403 没有权限
404 找不到目标资源
405 请求方式和服务器端对应的处理方式不一致
406 请求扩展名和实际返回的响应体类型不一致
50X 服务器端内部错误,通常都是服务器端抛异常了