IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 22-05-19 西安 xml DOM4J创建和读取xml,Xpath解析xml内容,和 tomcat应用服务器、HTTP协议 -> 正文阅读

[Java知识库]22-05-19 西安 xml DOM4J创建和读取xml,Xpath解析xml内容,和 tomcat应用服务器、HTTP协议

xml eXtensible Markup Language ?可扩展标记语言(eml被占用了)

xml和html的区别:

  1. html标签是提前定义好的,html是浏览器解析的,它的作用是展示数据
  2. xml标签需要我们自定义,是我们自己来解析的。它的作用是存储数据

xml标签区分大小写

xml解析用的是dom,把整个xml内容分装为document


xml注意的问题:

1.xml文件的声明,版本号以及编码 ,每一个xml配置文件都要有。也可以不写,因为每一个xml文件都有,不写的话默认有。

xml文件的声明只能出现在第一行,第一列。第一行是注释都不行

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

2.标签里面的内容随便写,所以叫可扩展
3.但是用到了框架之后,框架的配置文件。
标签就是固定的了实现的功能也是固定的,就不能随便写了,
因为解析的代码已经写好了
xml解析:获取xml存储的数据
4.可扩展表现在:因为它可以作为各种框架的配置文件


xml约束:

使得当前配置文件只能写什么标签

  1. DTD约束: mybatis,.dtd文件
  2. Schema约束:spring,springmvc,web.xml

xml语法比html更为严格:
1、xml文件的声明只能出现在第一行,第一列。注释都不行
2、xml中,根标签有且只能有一个,xml是我们自己去解析的
3、也分为双标签和单标签
4、xml标签可以嵌套,但不能交叉嵌套
5、xml中注释不能嵌套 <!-- ?<!-- --> -->
6、xml标签名,属性名用小写
7、属性必须有值,必须用单引号或双引号括起来
8、c-data 区写的东西会原样解析 ? CD【idea快捷键】

    <![CDATA[
    
    ]]>

9、逻辑上html是xml的一个子集
10、html不区分大小写,xml区分大小写


xml解析
xml解析:获取xml存储的数据

xml的2种解析方式:
方式一:DOM?
封装所有xml内容为document对象。一次性全部读到了内存将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。

方式二:SAX
逐行读取,读一行释放一行,占内存小,效率低。

第三方xml解析器DOM4J

DOM4J [for java] ? ? log4j ?//i18n 国际化

需要导入jar包,创建lib目录和src一级

1.创建student.xml

<?xml version="1.0" encoding="UTF-8"?>
<student>
    <id>1001</id>
    <name>张三</name>
    <gender>男</gender>
</student>

?2.在Java程序里去解析这个配置文件

获取标签中某个属性的值

String value = element.AttributeValue("属性名");

    public static void main(String[] args) throws DocumentException {
        //创建解析器SAXReader对象
        SAXReader saxReader = new SAXReader();
        //读取xml文件,获得Document对象
        Document document = saxReader.read("day05_web/src/student.xml");
        //获取根标签
        Element rootElement = document.getRootElement();
        //获取根标签中的子标签  子标签可以重名  ,获取list 集合后转为Element对象
        //element()获取指定标签名的子标签
        Element idElement = rootElement.element("id");
        Element nameElement = rootElement.element("name");
        Element genderElement = rootElement.element("gender");
        //获取子标签中的文本内容
        String id = idElement.getText();
        String name = nameElement.getText();
        String gender = genderElement.getText();
        System.out.println("id="+id+",name="+name+",gender="+gender);
    }

运行结果:在控台台获取到了xml文件按配置的内容

?2.我们把student.xml提升一点点难度

<?xml version="1.0" encoding="UTF-8"?>
<student>
    <studentInfo>
        <id>1001</id>
        <name>张三</name>
        <gender>男</gender>
    </studentInfo>

    <studentInfo>
        <id>1002</id>
        <name>李四</name>
        <gender>女</gender>
    </studentInfo>
</student>

java程序如下:

    public static void main(String[] args) throws DocumentException {
        //创建SAXReader对象
        SAXReader saxReader = new SAXReader();
        //读取xml文件
        Document document = saxReader.read("day05_web/src/student.xml");
        //获取根标签
        Element rootElement = document.getRootElement();
        //获取子标签集合 List <studentInfo>
        List elements = rootElement.elements();
        for (Object o : elements) {
            Element element = (Element) o;
            //获取<studentInfo>标签中的子标签 <id>  <name>  <gender>
            Element idElement = element.element("id");
            Element nameElement = element.element("name");
            Element genderElement = element.element("gender");
            //获取子标签中的内容
            String id = idElement.getText();
            String name = nameElement.getText();
            String gender = genderElement.getText();
            System.out.println("id=" + id + ",name=" + name + ",gender=" + gender);
        }
    }


用java代码来创建xml

?再来学习一下,怎么用java代码来创建xml吧。

    public static void main(String[] args) throws DocumentException, IOException {
        Document document = DocumentHelper.createDocument();
        //创建一个标签
        Element novelElement = document.addElement("novel");
        //把某一个标签<novel>设置为根标签
        document.setRootElement(novelElement);
        //3.在根标签中设置子标签,也是addElement
        //小说名字
        Element nameElement = novelElement.addElement("name");
        nameElement.setText("开局签到荒古圣体");
        //小说主角
        Element leadRoleElement = novelElement.addElement("lead-role");
        leadRoleElement.setText("君逍遥");
        //小说作者
        Element authorElement = novelElement.addElement("author");
        authorElement.setText("J神");
        ///打印到控制台 /
        //输出格式化: OutputFormat(“缩进”,“换行”)
        OutputFormat outputFormat = new OutputFormat("  ", true);
        XMLWriter xmlWriter = new XMLWriter(outputFormat);
        xmlWriter.write(document);
    }

运行结果会打印在控制台

?要想生成一个xml文件,也可以。换一下XMLWriter的构造器就行

        写入到novel.xml文件//     
        //把生成的xml写出到文件novel.xml
        OutputStream os = new FileOutputStream("day05_web/src/novel.xml");
        //输出格式化: OutputFormat(“缩进”,“换行”)
        OutputFormat outputFormat = new OutputFormat("  ", true);
        XMLWriter xmlWriter = new XMLWriter(os,outputFormat);
        xmlWriter.write(document);

一个字,真帅!


再来一种解析xml的方法,Xpath

Xpath在dom4j基础上的简化,是读的功能,所以要同时引入这俩个jar包才行

novel.xml内容如下

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

<novel>
  <explain>
    <name>开局签到荒古圣体</name>
    <lead-role>君逍遥</lead-role>
    <author>J神</author>
  </explain>
  <explain>
    <name>我真不是隐世高手</name>
    <lead-role>李凡</lead-role>
    <author>归心</author>
  </explain>
  <explain>
    <name>我在精神病院斩神</name>
    <lead-role>林七夜</lead-role>
    <author>三九音域</author>
  </explain>
</novel>

Xpath中表达式的语法:

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集.

获取三本小说的名字

  • 表达式匹配多个标签 document.selectNodes()
  • 表达式匹配单个标签 document.selectSingleNode()
public static void main(String[] args) throws IOException, DocumentException {
    //创建SAXReader对象
    SAXReader saxReader = new SAXReader();
    //读取xml文件
    Document document = saxReader.read("day05_web/src/novel.xml");
    //通过xpath表达式获取指定节点,获取三本小说的名字
    List list = document.selectNodes("/novel/explain/name");
    for (Object o : list) {
        Node node = (Node) o;
        System.out.println(node.getText());
    }
}


Tomcat 应用服务器

tomcat用来管理web应用,叫应用服务器,tomcat本身也是java工程

为什么要使用tomcat

为了达到资源共享。


在静态web,俩种访问方式
一种是找到文件的磁盘路径,一种是直接点击右上角的浏览器图标

?

直接点击的话,有一个问题,63342是idea端口。

?


解决办法:tomcat
使用网络编程三要素:协议,ip,端口号
通过网络编程,在网络里访问服务器的资源了。

Tomcat的作用是作为Web服务器部署Web项目,从而让客户端能够访问

1.web服务器,web应用部署到tomcat,就可以通过url访问.

2.?tomcat能管理servlet类 ,servlet类创建和销毁我们都不管。


tomcat 5个目录的作用

tomcat 解压后一定要放在没有中文,没有空格的目录。

?1.webapps??web应用部署后都在,webapps里放着呢

在tomcat如何部署一个web项目,只要把war包扔到webapps中
在启动tomcat时会被解压。

怎么访问:
localhost:8080 ?//8080是tomcat的默认端口号
localhost:8080 /工程名(war包名)

2.work中放的是tomcat工作过程动态生成的文件
2.1? jsp翻译成的servlet【jsp本质是一个servlet】
2.2? session的钝化文件

3.conf目录下:改了配置文件要重启tomcat
3.1? server.xml 用来配置tomcat本身的配置信息,就只需要知道一个地方,69行左右,设置当前的端口号。


3.2? web.xml 用来配置部署到tomcat的web应用
? ? ? ?此处的web.xml 作用于部署到tomcat所有的web应用


? ? ? ?当前web应用里也有web.xml,只作用于当前工程本身,俩个web.xml上有逻辑继承关系,配置有冲突时以它自己的为准【范围小的为准】

比如说:欢迎页。访问工程的时候默认的访问地址就是欢迎页?? ?

bin
启动startup.bat和停止tomcat
lib
jar包,因为tomcat本身也是Java工程


1.idea中集成tomcat?

settings-build-applications servers-tocatserver-选择tomcat home[就是解压后的目录]

2.创建web应用

方式一:new moudle--java--web application--[和你的tomcat没有任何关系]?之后需要可以自己创建一个tomcat实例。不推荐


方式二:new moudle--java enterprise--web application【勾选create web.xml】-[工程会自动部署到tomcat]

之后还要改

?Deployment 下的上下文路径【改】,通过它来访问部署到tomcat的wen应用。

建议改掉tomcat实例名,建议和工程名一致

1.redeploy ?重新部署web应用,只部署更新后的,tomcat不需要重启,
改的是类和配置文件有效,点击左下方的刷新按钮,是update。【dont ask again】
2.update 当前窗口idea失去焦点,自动更新类和资源。【alt+tab】,
只适合改的是静态资源,改的是类和配置文件


HTTP协议?超文本传输协议?

协议就是规定,http就是应用层的协议,规定浏览器和服务器之间的数据交互必须以报文的格式!
数据传输层是规定数据如何传输的,如TCP、UDP

HTTP报文的格式?

报文头部(键值对形式)

报文空行、

报文体(get请求没有请求体,post请求才有请求体)

请求头有三个部分要注意:

User-Agent浏览器的信息
Referer当前请求来源页面的地址(从哪个页面跳来的)
Cookie浏览器访问服务器时携带的Cookie数据

post请求:请求参数放在请求体中,请求体发送数据的大小没有限制,在浏览器地址栏看不到。

get请求:没有请求体,请求参数附着在URL地址后面,数据容量非常有限


响应报文?响应状态码

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

状态码含义
200服务器成功处理了当前请求,成功返回响应
302重定向
400[SpringMVC特定环境]请求参数问题
403没有权限
404找不到目标资源
405请求方式和服务器端对应的处理方式不一致
406[SpringMVC特定环境]请求扩展名和实际返回的响应体类型不一致
50X服务器端内部错误,通常都是服务器端抛异常了
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 18:48:02  更:2022-05-21 18:50:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:06:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码