javaweb第十二天 XML&HTTP

xml :可扩展标记语言: 标签可以任意定义,不需要进行编译,浏览器就可以解析

xml与html的区别:
1.xml 标签是可以任意定义 但是 html 的是不可以的
2.xml是数据的存储(配置文件) html 主要是做页面的显示
3.html5 比较火的前端技术有有xml+html结合,html5是依赖于xml

xml数据传输与数据库数据传输的区别
xml适合数据量小的小型应用 可以用于任何平台、任何操作系统、任何软件平台,但缺点就是不适合数据量大的 还有就是没有安全性。

数据库就安全性高 适应范围广,但缺点就是有平台限制、价格昂贵。

xml 的一个基本的结构: 1.xml的声明 2. 文档的基础信息(标签节点 属性节点 文本节点)

  1.只能存在一个跟节点 
  2.标签一般都是成双的  如果是单个必须是结束标签
  3.标签严格区别大小写
  4.严格遵循驼峰命名
  5.要注意标签与标签之间的缩进与空格
<exam> 
  <student idcard="111" examid="222"> 
    <name name="张三">张三</name>  
    <location location="沈阳">沈阳</location>  
    <grade grade="89">89</grade> 
  </student>  
  <student idcard="41414141" examid="321214124">
    <name name="李四"/>
    <location location="广东"/>
    <grade grade="100"/>
  </student>
</exam>

xml 中的一些特殊的符号:

 <     &lt;
   >     &gt;
   &    *amp;
  '      &aops;
   "     &quot;

xml 解析的常见的方式
dom dom4j => 是把这个xml都会加载到内存里,然后对其进行解析(web) dom 4j 就是对dom的一个优化
sax ==>边加载,边解析(移动端)

dom 解析 ==>  1.第一步也就是需要把xml转换成一个dom树 
                    具体的步骤 1.得到解析器工厂对象DocumentBuilderFactory
                               2.得到解析器对象
                               3.调用其方法把其转换成doc 对象  db.parse(file);  需要传递一个文件对象的参数

               2.得到xml的信息: 1.根据getElementsByTagName()方法来获取到 所有的brand节点
                               2.遍历集合(NoteList) 获取集合的长度是getLength()
                               3.得到具体的节点
                               4.转换哼元素节点 获取元素中具体的值 getAttribute("name")
                               5. 获取下面的子节点:getChildNodes();
                               6.注意:判断其节点的类型 Node.ELEMENT_NODE

               3.增加阶段的具体步骤:1.创建一个节点
                                  2.设置其属性
                                  3.添加父子关系
                                  4.一层一层添加之后追加到根节点

               4 保存到xml里 :1.得到其转换的工厂TransformerFactory
                             2.得到准换器Transformer
                             3.调用其方法  tf.transform() 需要传递两个参数  第一个是DOMSource(不要忘记把dom对象放入)  第二个参数是:StreamResult

               5.删除 : 1.根据getElementsByTagName()方法来获取到 所有的brand节点
                        2.遍历集合(NoteList) 获取集合的长度是getLength()
                        3.通过父节点来删除自己

               6.修改与删除是类似的(仿照)

private org.w3c.dom.Document doc;
    //需要把xml转换成一个domd对象
    public  void getDocument(){
        try {
            //得到dom解析工厂
            DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
            //得到解析器
            DocumentBuilder db= null;
            try {
                db = dbf.newDocumentBuilder();
            } catch (ParserConfigurationException e) {
                e.printStackTrace();
            }
            //提供一个方法把xml转换成doc对象
            File file=new File("123.xml");
             doc=db.parse(file);
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //读取数据
    public void show(){
        //根据标签名来获取当前cos所有的节点
        NodeList nodeCosList=doc.getElementsByTagName("cos");
        for(int i=0;i<nodeCosList.getLength();i++){
            //得到每一个节点
            Node cos=nodeCosList.item(i);
            //把节点对象转换成属性对象
            Element elementCos= (Element) cos;
            System.out.println(elementCos.getAttribute("name"));
            //得到所有的Type,获取当前cos的子节点
            NodeList nodeTypeList=cos.getChildNodes();
            for(int j=0;j<nodeTypeList.getLength();j++){
                //获得每一个Type节点
                Node type=nodeTypeList.item(j);
                //判断是否是元素节点
                if(type.getNodeType()==Node.ELEMENT_NODE){
                    //转换成属性节点
                    Element elementType= (Element) type;
                    System.out.println(elementType.getAttribute("name"));
                }
            }
        }
    }
    //增加一个节点
    public void add(){
        //创建cos节点
        Element cosElement=doc.createElement("cos");
        //给其设置属性
        cosElement.setAttribute("id","帽子");
        //创建type节点
        Element typeElement=doc.createElement("type");
        //设置其属性
        typeElement.setAttribute("id","绿色");
        //添加父子关系
        cosElement.appendChild(typeElement);
        //再给cos添加父子关系
        doc.getElementsByTagName("clothesType").item(0).appendChild(cosElement);
    }
    //把doc对象写入到文件里
    public void write(){
        //转换器工厂
        TransformerFactory tff=TransformerFactory.newInstance();
        try {
            //得到转换器
            Transformer tf=tff.newTransformer();
            DOMSource ds=new DOMSource(doc);
            //第一个参数是写入的地址
            StreamResult sr=new StreamResult(new OutputStreamWriter(new FileOutputStream("222.xml"),"utf-8"));
            tf.transform(ds,sr);
        } catch (TransformerException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    //删除节点的信息
    public void delete() {
        NodeList nodeCosList = doc.getElementsByTagName("cos");
        for (int i = 0; i < nodeCosList.getLength(); i++) {
            //得到具体额节点
            Node cos = nodeCosList.item(i);
            //转换成属性节点
            Element cosElement = (Element) cos;
            if (cosElement.getAttribute("name").equals("绿色")) {
                //通过父节点来删除自己
                cosElement.getParentNode().removeChild(cosElement);
            }
        }
    }
    //修改
    public void update(){
        NodeList nodeList=doc.getElementsByTagName("cos");
        for(int i=0;i<nodeList.getLength();i++){
            Node cos=nodeList.item(i);
            Element cosElement= (Element) cos;
            cosElement.setAttribute("id", String.valueOf((i+1)));
        }
    }

dom4j 解析xml 其实就是对dom的封装 简化了代码 需要导入jar包

dom4j 的核心的对象 : SAXReader sr.read(file); 把一个 文件转化成一个dom对象(是在内存里)

XMLWriter .write(doc) 把dom 对象写入在文件了
OutputFormat 格式 工厂类 主要是写入的编码格式进行设置

常规的一些方法:
getRootElement(); 获取到根节点的方法
elementIterator() 把多个集合转换成迭代器
elementType.attributeValue(“name”) 根据节点来获取到具体的值
addElement(“Brand”); 创建一个节点的对象
elBrand.getParent().remove(elBrand); 通过父节点来删除子节点

private Document doc;
    //写一个方法把xml转换成dom对象
    public void getDom(){
        SAXReader sr=new SAXReader();
        File file=new File("333.xml");
        try {
            doc=sr.read(file);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
    //得到xml里的名字和品牌
    public void show(){
        //获得根节点的元素
        Element element=doc.getRootElement();
        //进行遍历
        //elementIterator() 获得根节点下的所有子节点
        for(Iterator iterCos=element.elementIterator();iterCos.hasNext();){
            Element elementCos= (Element) iterCos.next();
            System.out.println(elementCos.attributeValue("name"));
            for(Iterator iterType=elementCos.elementIterator();iterType.hasNext();){
                Element elementType= (Element) iterType.next();
                System.out.println(elementType.attributeValue("name"));
            }
        }
    }
    //增加一个节点
    //这种方法已存在父子关系,不需要添加父子关系
    public void add(){
        //获取到根元素
        Element element=doc.getRootElement();
        //增加cos节点
        Element elementCos=element.addElement("cos");
        //设置其属性
        elementCos.addAttribute("name","手套");
        //增加type节点
        Element elementType=elementCos.addElement("Type");
        //设置其属性
        elementType.addAttribute("name","红色");
    }
    //写入到文件
    public void write(String path){
        //设置写入数据的编码格式
        OutputFormat outputFormat=new OutputFormat();
        outputFormat.setEncoding("UTF-8");
        XMLWriter writer= null;
        try {
            writer = new XMLWriter(new FileOutputStream(path),outputFormat);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            writer.write(doc);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //删除一个节点
    public void delete(){
        Element element=doc.getRootElement();
        for(Iterator iterator=element.elementIterator();iterator.hasNext();){
            Element elementCos= (Element) iterator.next();
            for(Iterator iteraCos=elementCos.elementIterator();iteraCos.hasNext();){
                Element elementType= (Element) iteraCos.next();
                if(elementType.attributeValue("name").equals("红色")){
                    elementType.getParent().remove(elementType);
                }
            }
        }
    }

http协议 : 超文本协议 一次性连接 无状态 连接 主要是对文本进行传输(也可以对文件进行传输 需要在请求头里设置传输的格式)

tcp 慢 稳定 不会丢失数据 ==> 三次握手
udp 快 会丢失数据(发包裹) ==> socket 协议(tomcat就是基于socket 进行编程的)

http 是目前最通用的网络协议
http 协议就是网络传输的一种规范 : 无非就是客户端发送请求 服务器做出相应
http 协议的版本 分为
1.0 每一次连接请求都需要去创建一个连接, 而且每次只能请求一个数据
1.1 每次都需要 去创建一个连接 ,每次可以请求多个 多个数据

http 协议: 请求的协议 (也就是客户端传输发到服务器的一个规范或者约束)
响应的协议(也就是服务器给客户端的响应的约束或者规范)
就是以二进制进行传输 大部分都使用http1.1 的版本 ,1.1 版本效率更高

请求的协议 分为 请求行 请求头 请求内容体

get :传递的参数在放在请求头上 不安全 get 与一般用于文件的下载 get提交数据是有长度限制
post 传递到参数是放下内容体中 安全性高 post 提交数据 post 是没有长度限制的

响应的协议: 响应行 响应头 响应体

响应行 :http 1.0 200 ok
第一个是表示连接的版本
第二个是表示连接的状态
ok 表示成功

响应的状态码(一小部分):1. 200 表示成功
                     2.404  表示 页面找不到
                     3.302  表示重定向
                     4. 500  表示代码有错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值