zoukankan      html  css  js  c++  java
  • JavaWeb学习笔记(7)

    没有实现类指向接口,只有接口指向实现类

    package com.zx.util;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class DBUtils {
        private static String url="jdbc:mysql://localhost:3306/test1";
        private static String user="root";
        private static String password="xxxxxx";
        private static String driverClass="com.mysql.jdbc.Driver";
        static {
            //注册驱动
            try {
                Class.forName(driverClass);
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        /**
         * 返回一个数据库连接
         * @return
         * @throws SQLException 
         */
        public static Connection getConnection() throws SQLException{
            return DriverManager.getConnection(url, user, password);
        }
        
        public static void close(ResultSet resultSet,Statement statement,Connection connection) {
            //6.关闭资源
            if (resultSet!=null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (statement!=null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (connection!=null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    插入数据

    package lesson02;
    
    import java.sql.Connection;
    import java.sql.Date;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    
    import com.zx.util.DBUtils;
    
    public class Demo02 {
    
        public static void main(String[] args) throws SQLException {
            // TODO Auto-generated method stub
            Connection connection=DBUtils.getConnection();
            //2.创建Statement【预处理的Statement对象】
            //?代表占位
            String sql="insert into user (id,name,password,email,birthday) values (?,?,?,?,?)";
            PreparedStatement preparedStatement= connection.prepareStatement(sql);
            //设置参数
            preparedStatement.setInt(1, 4);
            preparedStatement.setString(2, "mailu");
            preparedStatement.setString(3, "sdasd");
            preparedStatement.setString(4, "qq.com");
            /**
             * setDate的日期类型是java.sql.Date,不是java.util.Date
             */
            preparedStatement.setDate(5, new Date(System.currentTimeMillis()));
            
            //执行插入,返回受影响的行数
            int r= preparedStatement.executeUpdate();
            System.out.println("受影响的行数:"+ r );
            
            //关闭资源
            DBUtils.close(null, preparedStatement, connection);
        }
    
    }
    
    结果:
    受影响的行数:1

     直接拼接sql语句,会有SQL注入问题

    解决方法:不让拼接,prepareStatement可以避免SQL注入问题

    xml

    xml语法

    文档声明

    必须写在xml文档的第一行写法:<?xml version="1.0" ?>

    属性:   

             version:版本号 固定值 1.0

             encoding:指定文档的码表。一般写utf-8,也可以 iso-8859-1

             standalone:指定文档是否独立  yes 或 no 【很少用】

    如果是yes,则表示这个XML文档时独立的,不能引用外部的DTD规范文件;如果是no,则该XML文档不是独立的,表示可以用外部的DTD规范文档。

    元素:xml文档中的标签

    文档中必须有且只能有一个根元素

    元素需要正确闭合。<body></body> <br/>

    元素需要正确嵌套

    元素名称要遵守:

             元素名称区分大小写

             数字不能开头

    文本

    转义字符:&gt;

    CDATA: 里边的数据会原样显示,不会产生歧义

    <![CDATA[ 数据内容 ]]>

    <?xml version="1.0" encoding="UTF-8"?>
    <students>
        <!-- 学生信息 -->
        <student id="10001">
            <name><![CDATA[<林心如]]></name>
            <age>38</age>
            <gender></gender>
            <birthday>2018-01-23</birthday>
        </student>
        <student id="10002">
            <name>林志颖</name>
            <age>39</age>
            <gender></gender>
            <birthday>2018-01-23</birthday>
        </student>
        <student id="10003">
            <name>林志炫</name>
            <age>38</age>
            <gender></gender>
            <birthday>2018-01-23</birthday>
        </student>
    </students>

     xml解析:

    DOM解析:

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

    优点:因为,在内存中会形成dom树,可以对dom树进行增删改查。

    缺点:dom树非常占内存,解析速度慢。

    SAX解析

    逐行读取,基于事件驱动

    优点:不占内存,速度快

    缺点:只能读取,不能回写(改数据)

    @Test 单元测试

    package lesson09;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    import org.junit.Test;
    
    /**
     * 单元测试:Junit
     * @author ZX
     *单元测试的名字都是以test开头的
     */
    public class Demo01 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
        }
        
        @Test
        public void test1() throws FileNotFoundException, DocumentException {
            //使用dom4j技术进行SAX解析
            //1.创建reader对象
            SAXReader reader=new SAXReader();
            
            //2.读取文档
            Document doc= reader.read(new FileInputStream("books.xml"));
            
            //3.获取根标签(根节点)
            Element root= doc.getRootElement();
            System.out.println("根标签的名字:"+root.getName());
            
            //4.获取书架的子标签
            List<Object> list= root.elements();
            
            for (Object obj:list) {
                System.out.println(obj.getClass())    ;
                Element book=(Element)obj;
                System.out.println(book.getName());
                
                System.out.println(book.element("名字").getText());
                System.out.println(book.element("作者").getText());
                System.out.println(book.element("出版社").getText());
                
                //获取属性
                System.out.println(book.attributeValue("number"));
                System.out.println("=============================");
            }
        }
    }
    <?xml version="1.0" encoding="UTF-8"?>
    <书架>
        <书 number="100">
            <名字>Java技术</名字>
            <作者>sda</作者>
            <出版社>任命文学</出版社>
        </>
        <书 number="200">
            <名字>JS技术</名字>
            <作者>sdsa</作者>
            <出版社>任命文学</出版社>
        </>
        <书 number="300">
            <名字>PHP技术</名字>
            <作者>sdaa</作者>
            <出版社>任命文学</出版社>
        </>
    </书架>

    XPATH:

    XPath规则:

    //     nodename 选取此节点。

    /       从根节点选取。

    ..      选取当前节点的父节点。

    @     选取属性。

    [@属性名]    属性过滤

    [标签名]     子元素过滤

    使用的方法:

             selectSingleNode():

             selectNodes():

    使用步骤:

             1、注意:要导包 jaxen...jar

             2、创建解析器SAXReader reader = new SAXReader();

             3、解析xml 获得document对象 Document document = reader.read(url);

    package lesson09;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Node;
    import org.dom4j.io.SAXReader;
    import org.junit.Test;
    
    public class Demo02 {
        
        @Test
        public void test1() throws Exception {
            //1.创建SAXReader
            SAXReader reader=new SAXReader();
            Document document= reader.read(new FileInputStream("books.xml"));
            
            //2.进行XPATH查询
            Node node= document.selectSingleNode("//名字");
            System.out.println(node.getText());
            
            Node node2= document.selectSingleNode("/书架/书/作者");
            System.out.println(node2.getText());

         
    Node node2= document.selectSingleNode("//书/@number");//查询书的number属性,最后用Attribute 来承接这个属性

    }

    } }

    XMLWriter:修改节点并保存

    public static void main(String[] args) throws Exception {
            SAXReader reader = new SAXReader();
            
            Document doc = reader.read(new FileInputStream("xml/books.xml"));
    
            List list = doc.selectNodes("//书/@出版社");
            
            for(Object o : list){
                if(o instanceof Attribute){
                    Attribute att = (Attribute) o;
                    att.setValue("美国");
                }
            }
            
             XMLWriter writer = new XMLWriter(new FileOutputStream("xml/books.xml"));    
             writer.write(doc); 
             writer,close();
        }

    Tomcat:

    Tomcat是在SUN公司推出的小型Servlet/JSP调试工具的基础上发展起来的一个优秀的Servlet容器,Tomcat本身完全用Java语言编写。 是一个免费的Web服务器

    官方网址为http://tomcat.apache.org。得到了广大开源代码志愿者的大力支持,且可以和目前大部分的主流Web服务器(IIS、Apache服务器)一起工作,它运行稳定、可靠且高效。已成为目前开发企业JavaWeb应用的最佳Servlet容器选择之一

  • 相关阅读:
    洛谷P1072 Hankson 的趣味题(题解)
    18.3.19晚听韩明睿大佬讲题收获
    题解+新技巧--一本通1282:最大子矩阵
    题解-洛谷P1303 A*B Problem(高精)
    Java重载和覆盖
    propagation属性的7个传播行为
    脏读、不可重复读、幻读
    RSA 数据加密和数字签名算法
    大型互联网站解决高并发的常见策略
    死锁和活锁
  • 原文地址:https://www.cnblogs.com/zhangwugai/p/11224330.html
Copyright © 2011-2022 走看看