正则表达式,XML文件解析,Tomcat服务器(四)

一、正则表达式

1 正则表达式是什么

​ 正则表达式是用来校验字符串是否满足一定的规则的公式。

2 正则表达式的创建

(1)对象形式

var reg = new RegExp("正则表达式");
复制代码

如果正则表达式中有”/”,那么使用这一种。

(2)直接量形式(一般使用这种方式)

var reg = /正则表达式/
复制代码

注意:正则表达式本身是不带引号的。

3 正则表达式的用途以及使用方式(3)

模式验证

​ 检测某个字符串是否符合规则,比如说检测手机号、身份证号等等是否符合规范。

方法:需要使用正则表达式的对象来调用方法

​ 正则表达式对象.test(字符串变量) 返回true或者false

示例: 校验字符串中是否包含’o’字母

// 创建一个最简单的正则表达式对象
var reg = /o/;

// 创建一个字符串对象作为目标字符串
var str = 'Hello World!';

// 调用正则表达式对象的test()方法验证目标字符串是否满足我们指定的这个模式,返回结果true
console.log("字符串中是否包含'o'="+reg.test(str));
复制代码

匹配读取

​ 将目标字符串中满足规则的部分读取出来,例如将整段文本中的邮箱地址读取出来。

方法:

字符串变量.match(正则表达式对象) 返回的是一个数组。

示例: 读取一个字符串中的所有’l’字母

//匹配读取: 读取一个字符串中的所有'l'字母
// g表示全文查找,如果不使用g那么就只能查找到第一个匹配的内容
//1. 编写一个正则表达式
var reg2 = /l/g
//2. 使用正则表达式去读取字符串
var arr = str.match(reg2);
console.log(arr)
复制代码

这里”/l/”是正则表达式,后边的g指定的是整个字符串,如果不指定的话,默认找到第一个符合正则表达式的,方法就会直接返回了。

匹配替换

​ 将目标字符串中满足标准的部分替换为其他字符串,例如将整段文本中的“hello”替换为“hi”。

方法:

​ 字符串对象.replace(正则表达式,替换的新字符)

​ 需要注意的是这个替换返回的是一个新字符串,而不是在原来的字符串上修改,需要一个对象去接收返回值。

示例:将字符串中的第一个’o’替换成’@’

 var reg = /o/;
  var str = 'Hello World!';

  var newStr = str.replace(reg,'@');
  // 只有第一个o被替换了,说明我们这个正则表达式只能匹配第一个满足的字符串
  console.log("str.replace(reg)="+newStr);//Hell@ World!
  // 原字符串并没有变化,只是返回了一个新字符串
  console.log("str="+str);//str=Hello World!
复制代码

如果想要全部替换,就在正则表达式后边加上g,g表示全文查找。

4 正则表达式的匹配模式

全文查找

​ 如果不使用g对正则表达式对象进行修饰,则使用正则表达式进行查找时,仅返回第一个匹配;使用g后,返回所有匹配。

​ /[A-Z]/大写字母。

示例:查找包含大写字母的个数。(匹配读取)

// 目标字符串
var targetStr = 'Hello World!';

// 使用了全局匹配的正则表达式
var reg = /[A-Z]/g;
// 获取全部匹配
var resultArr = targetStr.match(reg);
// 数组长度为2
console.log("resultArr.length="+resultArr.length);

// 遍历数组,发现可以获取到“H”和“W”
for(var i = 0; i < resultArr.length; i++){
    console.log("resultArr["+i+"]="+resultArr[i]);
}
复制代码

忽略大小写

​ 在正则表达式后面加上i

示例:获得字符串中所有的‘o’的个数。(匹配读取)

//目标字符串
var targetStr = 'Hello WORLD!';

//使用了忽略大小写的正则表达式
var reg = /o/gi;
//获取全部匹配
var resultArr = targetStr.match(reg);
//数组长度为2
console.log("resultArr.length="+resultArr.length);
//遍历数组,得到'o'和'O'
for(var i = 0; i < resultArr.length; i++){
    console.log("resultArr["+i+"]="+resultArr[i]);
}
复制代码

全文查找和忽略大小写可以混合使用,g 和 i 不区分先后

多行查找

​ 当不使用多行查找时,目标字符不管有没有换行符都会被当作一行来解析。

​ /Hello$/表示的是以Hello为结尾,m表示的是多行查找模式。

示例:判断有没有以’Hello’结尾的字符串。(模式验证)

//目标字符串1
var targetStr01 = 'Hello\nWorld!';
//目标字符串2
var targetStr02 = 'Hello';

//匹配以'Hello'结尾的正则表达式,使用了多行匹配
var reg = /Hello$/m;
console.log(reg.test(targetStr01));//true

console.log(reg.test(targetStr02));//true
复制代码

多行查找和忽略大小写也可以混合使用,m和i不区分前后。

5 元字符

​ 指的是在正则表达式中被赋予特殊含义的字符,不能被直接当做普通字符使用。如果要匹配元字符本身,需要对元字符进行转义,转义的方式是在元字符前面加上“\”,例如:^

常用的元字符

代码 说明
. 匹配除换行字符以外的任意字符。
\w 匹配字母或数字或下划线等价于[a-zA-Z0-9_]
\W 匹配任何非单词字符。等价于[^A-Za-z0-9_]
\s 匹配任意的空白符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]。
\S 匹配任何非空白字符。等价于[^\f\n\r\t\v]。
\d 匹配数字。等价于[0-9]。
\D 匹配一个非数字字符。等价于[^0-9]
\b 匹配单词的开始或结束
^ 匹配字符串的开始,但在[]中使用表示取反
$ 匹配字符串的结束

6 字符集合

语法格式 示例 说明
[字符列表] 正则表达式:[abc] 含义:目标字符串包含abc中的任何一个字符 目标字符串:plain 是否匹配:是 原因:plain中的“a”在列表“abc”中 目标字符串中任何一个字符出现在字符列表中就算匹配。
[^字符列表] [^abc] 含义:目标字符串包含abc以外的任何一个字符 目标字符串:plain 是否匹配:是 原因:plain中包含“p”、“l”、“i”、“n” 匹配字符列表中未包含的任意字符。
[字符范围] 正则表达式:[a-z] 含义:所有小写英文字符组成的字符列表 正则表达式:[A-Z] 含义:所有大写英文字符组成的字符列表 匹配指定范围内的任意字符。

7 字符出现次数

代码 说明
* 出现零次或多次
+ 出现一次或多次
? 出现零次或一次
{n} 出现n次
{n,} 出现n次或多次
{n,m} 出现n到m次

8 正则表达式中的“或”

使用符号“|”

示例:

// 目标字符串
var str01 = 'Hello World!';
var str02 = 'I love Java';
// 匹配'World'或'Java'
var reg = /World|Java/g;
console.log("str01.match(reg)[0]="+str01.match(reg)[0]);//World
console.log("str02.match(reg)[0]="+str02.match(reg)[0]);//Java
复制代码

—————————————————————————————————————

常用的一些字符表达式

需求 正则表达式
用户名 /^[a-zA-Z_][a-zA-Z_-0-9]{5,9}$/
密码 /^[a-zA-Z0-9_-@#&*]{6,12}$/
前后空格 /^\s+|\s+$/g
电子邮箱 /^[a-zA-Z0-9_.-]+@([a-zA-Z0-9-]+[.]{1})+[a-zA-Z]+$/

二、XML文件

XML全称是:extensible Markup Language【可标记扩展语言】

1 XML文件与HTML文件

相同点

1 都是标记语言,都是由标记标签组成的。

2 标记标签语法比较类似

不同点

1 标签不同:XML都是自定义标签,HTML都是预定义标签

2 作用不同:XML作用是存储数据,是交互数据格式【配置文件】,HTML作用是显示数据以及数据采集。

2 XML用途

1 存储数据,交互数据

2 配置文件【比如:web.xml、mybatis.xml、spring.xml、springMVC.xml等】,需要注意的是:一般XML用于配置文件时,都会对xml添加约束【DTD,XSD】,添加约束之后的XML文件就不是自定义标签了。

3 通过Java对XML文件解析

解析方式分类

1 DOM解析:将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。

优点:因为在内存中会形成dom树,程序员可以以面向对象的方式操作XML文件,写代码就非常方便,可以对dom树进行增删改查。

缺点:dom树非常占内存,解析速度慢。所以一般解析体积较大的XML文件的时候不会采用DOM解析

2 SAX解析:逐行读取,基于事件驱动,解析一行释放一行,内存占用非常小

常用解析器

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

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

2 JDOM

3 DOM4J(常用)

使用

首先我们要导入依赖,然后才能使用SAXReader解析器。

<dependency>
   <groupId>dom4j</groupId>
   <artifactId>dom4j</artifactId>
   <version>1.6.1</version>
</dependency>
复制代码

SAXReader解析器,它的作用是使用它的方法read将文件读取进来,返回的值是Document对象。

步骤(获取XML中所有的元素):

  1. 创建解析器
  2. 通过解析器SAXReader,将xml解析为Document对象
  3. 通过document,获取xml中根元素
  4. 通过根元素,获取所有子元素
  5. 遍历集合
  6. 获取数据
try {
    //1. 创建解析器
    SAXReader saxReader = new SAXReader();
    //2. 通过解析器SAXReader,将xml解析为Document对象
    Document document = saxReader.read("day04_xml/students.xml");
    //3. 通过document,获取xml中根元素
    Element rootElement = document.getRootElement();
    //4. 通过根元素,获取所有子元素
    List<Element> elements = rootElement.elements();
    //5. 遍历集合
    for (Element element : elements) {
        //6. 获取数据
        String id = element.attributeValue("id");
        String name = element.elementText("name");
        String age = element.elementText("age");
        System.out.println("id = " + id);
        System.out.println("name = " + name);
        System.out.println("age = " + age);

    }

} catch (DocumentException e) {
    e.printStackTrace();
}
复制代码

三、Tomcat服务器

1 服务器的分类

硬件服务器

​ 高级计算机:电脑,提供服务供其他客户电脑访问

软件服务器

​ 软件:电脑上安装的服务器然间,安装后能够提供服务给网络中的其他计算机,将本地文件映射成一个虚拟的url供网络中其他人访问。

​ 常用的软件服务器如下:

  • Tomcat(Apache):当前应用最广的JavaWeb服务器
  • JBoss(Redhat红帽):支持JavaEE,应用比较广 EJB容器->SSH轻量级的框架代替。
  • GlassFish(Orcale):Oracle开发JavaWeb服务器,应用不是很广
  • Resin(Caucho):支持JavaEE,应用越来越广
  • Weblogic(Orcale):付费。支持JavaEE,适合大型项目
  • Websphere(IBM):付费。支持JavaEE,适合大型项目

2 Tomcat简介

Tomcat下载地址

tomcat.apache.org/

Tomcat配置

  • 准备JAVA_HOME环境
  • 解压Tomcat目录,要求【非中文无空格】,配置path,classpath中Tomcat的路径。

Tomcat目录结构

  • bin:存放可执行脚本文件,如:startup.bat和shutdown.bat等文件
  • conf:存放配置文件,如:servlet.xml、web.xml、logging.properties
  • lib:存放jar包,如:jsp-api.jar、servlet-api.jar
  • logs:存放日志文件
  • temp:存放临时文件
  • webapps:存放tomcat默认提供项目
  • work:tomcat工作区,session序列化文件、jsp解析后的java文件等

使用Tomcat

修改Tomcat端口号

  • 端口号范围:1-65535,【1-1024不能使用】

  • 建议改为:8080-8089

  • tomcat->conf->server.xml

<Connector port="8088" protocol="HTTP/1.1"     connectionTimeout="20000"   redirectPort="8443" />
复制代码

在server.xml文件中找到这一行,修改port(端口)值。

启动服务器乱码问题

修改conf->logging.properties文件

找到下面图示的那一行

image-20210807161430530.png

再次打开startup.bat就不会乱码了。

3 将Tomcat整合到Idea中

404现象:请求资源未找到

启动服务器,默认访问8080时,会访问ROOT项目下的index页面

服务器默认配置

<welcome-file-list>
 <welcome-file>index.html</welcome-file>
 <welcome-file>index.htm</welcome-file>
 <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
复制代码

原理:将Tomcat整合IDEA中,本质是将Tomcat镜像整合至IDEA中,镜像文件依赖于本地Tomcat

镜像文件参考路径:C:\Users\86132.IntelliJIdea2019.2\system\tomcat

步骤

步骤①

image-20210807163414189.png

步骤②

image-20210807163425395.png

步骤③

image-20210807163438838.png

步骤④

image-20210807163447116.png

4 新建动态工程,部署IDEA的Tomcat运行

动态工程项目目录结构

目录或文件名 功能
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包

有JavaEE视图

步骤①

image-20210807165207246.png

步骤②

image-20210807165228653.png

步骤③

image-20210807165243158.png

无JavaEE视图

步骤①

image-20210807165255358.png

步骤②

image-20210807165305956.png

启动Tomcat运行动态工程

步骤①

image-20210807170242295.png

步骤②

image-20210807170252183.png

步骤③

image-20210807170305238.png

步骤④

image-20210807170313127.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享