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容器选择之一

原文地址:https://www.cnblogs.com/zhangwugai/p/11224330.html