xml eXtensible Markup Language ?可扩展标记语言(eml被占用了)
xml和html的区别:
- html标签是提前定义好的,html是浏览器解析的,它的作用是展示数据
- 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约束:
使得当前配置文件只能写什么标签
- DTD约束: mybatis,.dtd文件
- 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 | 服务器端内部错误,通常都是服务器端抛异常了 |
|