初识XML

xml:    eXtensible Markup Language  可扩展标记语言

xml文件声明

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

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

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


xml标签内容

xml标签里面的内容随便写,所以叫可扩展!xml可扩展表现在:它可以作为各种框架的配置文件。如下是springmvc的servlet的配置文件

    <servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><!--设置springMVC的核心控制器所能处理的请求的请求路径/所匹配的请求可以是/login或.html或.js或.css方式的请求路径但是/不能匹配.jsp请求路径的请求--><url-pattern>/</url-pattern></servlet-mapping>

cdata区和xml转义字符

①CDATA区

c-data 区写的东西会原样解析      CD【idea快捷键】

    <![CDATA[]]>

②转义字符

5个特殊字符所对应XML转义序列为:
&  &amp;
<  &lt;
>  &gt;
"  &quot;
'  &apos;


xml和html的区别

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

xml语法比html更为严格:
1、xml文件的声明只能出现在第一行,第一列。注释都不行
2、xml中,根标签有且只能有一个,xml是我们自己去解析的
3、也分为双标签和单标签,xml标签可以嵌套,但不能交叉嵌套,xml标签区分大小写,html不区分大小写。
4、xml中注释不能嵌套 <!--  <!-- --> -->
5、xml标签名,属性名用小写,属性必须有值,属性和值之间使用=连接,必须用单引号或双引号括起来


xml约束

由于xml的标签由用户自己定义,这样导致项目中的xml难以维护,因此需要使用一定的规范机制来约束xml文件中的标签书写

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

如下是springmvc的web.xml

<?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"></web-app>

如下是mybatis的mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration></configuration>

引入约束之后,在写标签时会给我们提示,如在web.xml中:


DOM4J解析

dom4j:性能优异、灵活性好、功能强大和极端易用的特点。Hibernate也用DOM4J来读取XML配置文件

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

或者在maven项目引入依赖

<dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.3</version>
</dependency>
<dependency><groupId>jaxen</groupId><artifactId>jaxen</artifactId><version>1.2.0</version>
</dependency>

创建student.xml

如下:student.xml,我把它放在类路径下,这里是maven的resource目录下,也可以直接放在src目录

使用Java程序去解析这里面的存储的内容

<?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>

使用dom4j读取xml

java程序如下:

read方法是重载的,可以从InputStream, File, Url等多种不同的源来读取。得到的Document对象就带表了整个XML。

public class XMLParse {public static void main(String[] args) throws DocumentException {InputStream path = Thread.currentThread().getContextClassLoader().getResourceAsStream("student.xml");//创建SAXReader对象SAXReader saxReader = new SAXReader();//读取xml文件Document document = saxReader.read(path);//获取根标签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);}}
}


元素迭代elementIterator()

拥有了一个Element对象后,可以对该对象调用elementIterator()方法获得它的子节点的Element对象们的一个迭代器。使用(Element)iterator.next()方法遍历一个iterator并把每个取出的元素转化为Element类型。

public class XMLParse {public static void main(String[] args) throws DocumentException {InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("student.xml");//创建SAXReader对象SAXReader saxReader = new SAXReader();//读取xml文件Document document = saxReader.read(in);//获取根节点Element rootElement = document.getRootElement();for (Iterator i = rootElement.elementIterator(); i.hasNext();) {//取得某节点的单个子节点Element el = ((Element) i.next()).element("id");//取得节点的文字System.out.println("id标签内容:"+el.getText());}}
}


属性迭代 attributeIterator()

 //获取根节点Element rootElement = document.getRootElement();// 迭代root元素的所有属性for (Iterator i = rootElement.attributeIterator(); i.hasNext(); ) {Attribute attribute = (Attribute) i.next();System.out.println(attribute.getName() + ":" + attribute.getValue());}

运行效果


删除结点

在dom4j中,只有父节点能删除直接子节点,并不能使用整个文档对象或者某个总节点来删除孙子节点。

idEle.getParent().remove(idEle);

 //元素迭代for (Iterator i = rootElement.elementIterator(); i.hasNext();) {//取得某节点的单个子节点Element StuEle = (Element) i.next();if(StuEle.attributeValue("name").equals("stu1")){Element idEle = StuEle.element("id");//只有父节点能删除直接子节点idEle.getParent().remove(idEle);break;}}//将文档写入XML文件(更加美观的排版)OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("UTF-8");    // 指定XML编码XMLWriter writer = new XMLWriter(new FileWriter(path),format);writer.write(document);writer.close();

代码运行后,标签就被删除了


java代码来生成xml

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

public class XMLGenerate {public static void main(String[] args) throws DocumentException, IOException {Document document = DocumentHelper.createDocument();//创建一个标签Element rootElement = document.addElement("novel");//设置根标签document.setRootElement(rootElement);//设置子标签//小说名字Element nameElement = rootElement.addElement("name");nameElement.setText("开局签到荒古圣体");//小说主角Element leadRoleElement = rootElement.addElement("lead-role");leadRoleElement.setText("君逍遥");//小说作者Element authorElement = rootElement.addElement("author");authorElement.setText("J神");//设置节点的属性和文字authorElement.addAttribute("name", "san");///打印到控制台 ///输出格式化: OutputFormat(“缩进”,“换行”)OutputFormat outputFormat = new OutputFormat("  ", true);XMLWriter xmlWriter = new XMLWriter(outputFormat);xmlWriter.write(document);xmlWriter.close();//将文档写入XML文件OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("UTF-8");    // 指定XML编码XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);writer.write(document);writer.close();}
}

运行结果会打印在控制台

运行结果会生成output.xml


XML解析

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

DOM 解析

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

DOM强制使用树模型来访问XML文档中的信息。由于XML本质上就是一种分层结构,所以这种描述方法是相当有效的

DOM的弊端

1.由于DOM分析器把整个XML文档转化成DOM树放在了内存中,因此,当文档比较大或者结构比较复杂时,对内存的需求就比较高。

2.对于结构复杂的树的遍历也是一项耗时的操作。所以,DOM分析器对机器性能的要求比较高

SAX解析:逐行读取,读一行释放一行,占内存小,效率低。

这种解析方式好像不受待见,以后在补充吧

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

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 解压后一定要放在没有中文,没有空格的目录。

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

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上有逻辑继承关系,配置有冲突时以它自己的为准【范围小的为准】

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


tomcat 优化

tomcat最大线程

Tomcat使用线程来处理接收的每个请求。Tomcat最大线程连接数默认值200。

需要修改conf/server.xml文件,修改里面的配置文件: maxThreads=””

可以根据机器的时期性能和内存大小调整,一般 可以在400-500。最大可以在800左右


idea中集成tomcat 

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


创建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报文

HTTP报文的格式

报文头部(键值对形式)

报文空行、

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

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

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

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

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


响应报文 响应状态码

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

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

22-05-19 西安 javaweb(04) xml、DOM4J,Xpath、 tomcat应用服务器、HTTP协议相关推荐

  1. javaweb(04) xml

    javaweb(04) xml xml简介 什么是xml xml(eXtensible Markup Language) 是可扩展的标记性语言.xml的使命,就是以一个统一的格式,组织有关系的数据,为 ...

  2. xml+dom4j+xpath学生管理系统

    <?xml version="1.0" encoding="UTF-8"?><student> <stu> <name ...

  3. 【跃迁之路】【468天】程序员高效学习方法论探索系列(实验阶段225-2018.05.19)...

    @(跃迁之路)专栏 实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长 实验期2年(2017.10.06 - 2019.10.06) 我将以自己为实验对象. ...

  4. Secure Access Service Edge Experience Kit 22.05 版本发布

    SecureAccess Service Edge  Experience Kit Release 22.05 简介 Intel® Smart Edge Open即开放式网络边缘服务软件,是一套基于K ...

  5. JavaWeb(5)——XML Tomcat

    目录 前置工作 创建一个javaweb5的Moudle模块 XML 什么是 xml? xml 语法 xml入门 创建一个xml文件,来描述图书信息 xml 注释 元素(标签) xml 属性 xml语法 ...

  6. LINQ之路19:LINQ to XML之X-DOM更新、和Value属性交互

    本篇包含两部分内容:X-DOM更新一节中我们会详细讨论LINQ to XML的更新方式,包括Value的更新.子节点和属性的更新.通过Parent节点实现更新: 和Value属性交互一节会详细讨论XE ...

  7. linux mint 18.3浏览器,在Linux Mint 19/Ubuntu 18.04中安装Tor Browser浏览器的方法

    本文介绍在Linux Mint 19/Ubuntu 18.04系统中安装Tor Browser浏览器的方法,本文不使用Tor的默认Ubuntu存储库,因为它们包含旧版本的Tor. 一.添加Tor存储库 ...

  8. XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML

    XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 以及查找xml文件中相同的节点属性值 项目背景:这是本人实习中所碰到的项目,当时感觉很棘手, ...

  9. matlab算原函数,matlab中原函数如何求解其中f(x)的导数为(22.05/x)的平方减1再开根号...

    答:%y'=sqrt((22.05/x)^2-1) syms x y y=dsolve('Dy=sqrt((22.05/x)^2-1)') 结果: y = C5 + t*(-(400*x^2 - 19 ...

最新文章

  1. 《JavaScript入门经典(第6版)》——2.7 问答
  2. 数仓 调度_网易实时数仓实践
  3. Unsafe类方法详解
  4. linux ulimit 永久生效设置方法
  5. HB-X打不开的解决办法
  6. php的declare,php 中的declare
  7. TTL怎么计算拉电流和灌电流_带你深入了解灌电流、拉电流与吸电流
  8. 利用Relations实现多DataTable的聚合
  9. Linux 0.11内核分析02:系统启动
  10. DockOne微信分享(七十七):用Harbor实现容器镜像仓库的管理和运维
  11. linux shell $#获取所有参数的个数 $@获取所有参数
  12. php文字音频插件下载安装,Goodhertz音频插件下载
  13. pdf文档怎样转换成word文档?2022pdf转word软件推荐
  14. 买到山寨版康师傅绿茶的后果
  15. Centos设置开机自动启动
  16. 原创|分享2个赚零花钱的小技巧
  17. Bandizip去除广告,注册图标,状态栏文本
  18. DSP快速复盘——时钟系统总结(基本知识+核心代码)基于TMS2802x处理器
  19. 数据库电话号码查询显示中间四位用****代替的SQL语句
  20. 想考阿里云acp证书,报哪个机构好?

热门文章

  1. 老文章,新人看!看看你以后的样子吧,是好是坏看你自己
  2. 设置/取消 应用程序始终以管理员身份运行
  3. Documented元注解
  4. 第一周工作周报-刘婉
  5. 如何成为一名游戏建模师?这几点希望能帮到你
  6. 2022国庆前后挑战战斗回路原版记录
  7. 保险行业中【内容行政系统】模块功能的实现
  8. iview DatePicker 校验
  9. 关于清空表数据的几种sql语句及区别
  10. 强大的网段掩码计算处理工具netmask