JavaWeb_XML与Tomcat

一、XML

1、 配置文件

1.1 配置文件的作用

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

1.2 常见的配置文件类型

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

2、 properties文件

2.1 文件示例

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

2.2 语法规范

  • 由键值对组成
  • 键和值之间的符号是等号
  • 每一行都必须顶格写,前面不能有空格之类的其他符号

3、XML文件

3.1 文件示例

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- 配置SpringMVC前端控制器 -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <!-- 在初始化参数中指定SpringMVC配置文件位置 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>

        <!-- 设置当前Servlet创建对象的时机是在Web应用启动时 -->
        <load-on-startup>1</load-on-startup>

    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>

        <!-- url-pattern配置斜杠表示匹配所有请求 -->
        <!-- 两种可选的配置方式:
                1、斜杠开头:/
                2、包含星号:*.atguigu
             不允许的配置方式:前面有斜杠,中间有星号
                /*.app
         -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

3.2 概念介绍

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

可扩展

可扩展三个字表面上的意思是XML允许自定义格式。但是这也并不代表你可以随便写。
在这里插入图片描述在XML基本语法规范的基础上,你使用的那些第三方应用程序、框架会通过设计XML约束的方式强制规定配置文件中可以写什么和怎么写,规定之外的都不可以写。

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

3.3 XML的基本语法

  • XML文档声明

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

<?xml version="1.0" encoding="UTF-8"?>
  • 根标签

根标签有且只能有一个。

  • 标签关闭
    • 双标签:开始标签和结束标签必须成对出现。
    • 单标签:单标签在标签内关闭。
  • 标签嵌套
    • 可以嵌套,但是不能交叉嵌套。
  • 注释不能嵌套
  • 标签名、属性名建议使用小写字母
  • 属性
    • 属性必须有值
    • 属性值必须加引号,单双都行

我们发现XML的基本语法和HTML的基本语法简直如出一辙。其实这不是偶然的,XML基本语法+HTML约束=HTML语法。在逻辑上HTML确实是XML的子集。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

从HTML4.01版本的文档类型声明中可以看出,这里使用的DTD类型的XML约束。也就是说http://www.w3.org/TR/html4/loose.dtd这个文件定义了HTML文档中可以写哪些标签,标签内可以写哪些属性,某个标签可以有什么样的子标签。

3.4 XML的约束(稍微了解)

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

  • DTD

将来在IDEA中有代码提示的协助,在DTD文档的约束下进行配置非常简单。

<!ENTITY % fontstyle
 "TT | I | B | U | S | STRIKE | BIG | SMALL">

<!ENTITY % phrase "EM | STRONG | DFN | CODE |
                   SAMP | KBD | VAR | CITE | ABBR | ACRONYM" >

<!ENTITY % special
   "A | IMG | APPLET | OBJECT | FONT | BASEFONT | BR | SCRIPT |
    MAP | Q | SUB | SUP | SPAN | BDO | IFRAME">

<!ENTITY % formctrl "INPUT | SELECT | TEXTAREA | LABEL | BUTTON">

<!-- %inline; covers inline or "text-level" elements -->
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">

<!ELEMENT (%fontstyle;|%phrase;) - - (%inline;)*>
<!ATTLIST (%fontstyle;|%phrase;)
  %attrs;                              -- %coreattrs, %i18n, %events --
  >
  • Schema

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

首先我们要理解一个概念名称空间,英文:name space
在这里插入图片描述Schema约束要求我们一个XML文档中,所有标签,所有属性都必须在约束中有明确的定义。

下面我们以web.xml的约束声明为例来做个说明:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
属性名作用
xmlns指出当前XML文档约束规则的名称空间在哪里
我们就是通过这个属性来引用一个具体的名称空间
xmlns:xsi指出xmlns这个属性是在哪个约束文档中被定义的
xsi:schemaLocation语法格式:在xsi名称空间下引用schemaLocation属性
配置含义:指定当前XML文档中所用到的约束文档本身的文件的地址

xmlns和xsi:schemaLocation对应关系如下图:
在这里插入图片描述引入多个名称空间的例子如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

	<context:component-scan base-package="com.atguigu.crud.component"/>
	
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/pages/"/>
		<property name="suffix" value=".jsp"/>
	</bean>
	
	<mvc:default-servlet-handler/>
	<mvc:annotation-driven/>

</beans>

在这里插入图片描述看到这么复杂,这么长的名称空间字符串,我们会觉得很担心,根本记不住。但是其实不需要记,在IDEA中编写配置文件时,IDEA会协助我们导入,会有提示。我们理解各个部分的含义能够调整即可。

3.5 XML解析(重点)

3.5.1 XML解析的作用

用Java代码读取xml中的数据

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

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

3.5.3 常见的XML解析器

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

  1. JAXP: sun公司提供的解析。支持dom和sax。(不常用)
  2. JDOM
  3. DOM4J(常用)
3.5.4 DOM4J的使用步骤
  1. 导入jar包 dom4j.jar
  2. 创建解析器对象(SAXReader)
  3. 解析xml 获得Document对象
  4. 获取根节点RootElement
  5. 获取根节点下的子节点
3.5.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("属性名");
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.io.InputStream;

/**
 * 1.引入jar包
 * 2.创建解析器对象:new SAXReader()
 * 3.使用解析器对象读取xml配置文件,从而得到一个Document对象
 * 4.使用Document对象获取根标签
 * 5.获取根标签里面的子标签
 */
public class TestXML {
    @Test
    public void test01() throws DocumentException {
        //目标:获取demo01.xml文件的根标签的标签名
        //1.创建解析器对象
        SAXReader saxReader = new SAXReader();
        //2.使用解析器对象读取xml配置文件,从而得到一个Document对象
        //将demo01.xml文件转成字节输入流
        InputStream inputStream = TestXML.class.getClassLoader().getResourceAsStream("demo01.xml");
        //使用解析器读取流
        Document document = saxReader.read(inputStream);
        //使用document对象获取当前xml文档的根标签
        Element rootElement = document.getRootElement();
        //使用根标签获取标签名
        String name = rootElement.getName();
        System.out.println(name);
    }
}
3.5.6 XPATH的使用介绍
  1. XPATH的作用: 使用规则匹配直接查找xml文件中的指定节点
  2. XPATH的使用步骤:
    1. 引入dom4j和xpath的jar包
    2. 创建解析器对象
    3. 解析xml 获得document对象
    4. 使用document对象调用方法,根据路径规则查找节点
  3. XPATH的API:
    • selectSingleNode(“路径规则”): 根据路径规则,查找满足条件的第一个节点
    • selectNodes(“路径规则”): 根据路径规则,查找满足条件的所有节点
  4. XPATH的路径规则的编写: https://www.runoob.com/xpath/xpath-syntax.html
 @Test
    public void test02() throws DocumentException {
        //使用Xpath解析
        //方法一:document.selectSingleNode("标签的路径规则")查找某一个标签
        //方法二:document.selectNodes("标签的路径规则")查找多个标签
        //第一大步:加载xml文件,获取Document对象
        //1.创建解析器对象
        SAXReader saxReader = new SAXReader();
        //2.使用解析器对象读取xml配置文件,从而得到一个Document对象
        //将demo01.xml文件转成字节输入流
        InputStream inputStream = TestXML.class.getClassLoader().getResourceAsStream("demo01.xml");
        //使用解析器读取流
        Document document = saxReader.read(inputStream);
        //使用Xpath获取所需要的标签
        Element elment = (Element) document.selectSingleNode("students/student[2]/name");
        //获取标签的文本
        System.out.println(elment.getText());
    }

4、YAML配置文件(暂时了解)

YAML配置文件会在以后的SpringBoot框架中使用

4.1 文件示例

spring:
  profiles:
    active: fc
  datasource:
    name: mydb
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://192.168.41.100:3306/spring_boot?serverTimezone=UTC
    username: root
    password: atguigu
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  mapper-locations: classpath*:/mybatis-mapper/*Mapper.xml
logging:
  level:
    com.atguigu.function.compute.mapper: debug

5 Json配置文件

json配置文件一般使用在前端或者移动端

5.1 文件示例

{
    "username":"aobama",
    "password":"123456",
    "nickname":"圣枪游侠"
}

二、Tomcat

1、Tomcat的介绍

1.1 Tomcat的简介

Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。

1.2 Tomcat的作用

Tomcat的作用是作为Web服务器部署Web项目,从而让客户端能够访问,在这个过程中它扮演着两个角色: Web服务器和Servlet容器

1.2.1 Web服务器

在这里插入图片描述

1.2.2 Servlet容器

在这里插入图片描述

2、Tomcat的安装和启动

  1. 配置JAVA_HOME和java环境变量: 因为Tomcat是Java代码编写的,所以必须要配置JAVA_HOME和java环境变量之后才能运行,我们可以通过下面的命令检测:
    在这里插入图片描述2. 将Tomcat压缩包解压到一个非中文无空格的目录下
    在这里插入图片描述3. 启动Tomcat并访问首页

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

在这里插入图片描述

3、Tomcat的目录结构

在这里插入图片描述

4、Tomcat部署Web项目

我们编写完Web项目之后,通常是将Web项目打包成war包,然后将war包放入Tomcat的webapps目录中即可。

在Tomcat启动过程中,会将war包进行解压,然后运行解压后的项目

在浏览器访问我们刚刚部署的项目"http://localhost:8080/项目文件夹名/要访问的文件名"

5、Tomcat的端口

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

……
<!-- 第69行 -->
<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启动后,这个三个端口号都会被占用。

6、在Idea中集成Tomcat

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

7、创建动态Web工程

1. 第一步: 创建Empty Project

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

在这里插入图片描述创建好的工程目录结构:
在这里插入图片描述

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包

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

9.1 编辑Tomcat实例

在这里插入图片描述

9.2 配置Tomcat实例

在这里插入图片描述

9.3 部署项目

在这里插入图片描述

9.4 部署好之后的效果

在这里插入图片描述

9.5 启动服务器

在这里插入图片描述

9.6 Idea运行时的界面布局

在这里插入图片描述

10、在IDEA中重新部署运行

10.1 为什么需要重新部署?

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

如下图中,我们在工程目录已经新增了images目录和两个图片:
在这里插入图片描述
但是在部署目录并没有出现:
在这里插入图片描述
哪怕我们执行了重新部署也没有起作用。

10.2 怎么重新部署

10.2.1 清理部署目录

在这里插入图片描述
在这里插入图片描述

10.2.2 构建

在这里插入图片描述

10.2.3 效果

在这里插入图片描述

11、导入现有的Module

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值