A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-5-30 09:59 编辑

JDBC事务管理

核心思想:业务逻辑的操作要使用同一个Connection对象
Connection管理事务API
        setAutoCommit(boolean) //设置是否自动提交事务(默认true)。设置为false,后面的execute不会自动提交,相当于开启事务,需手动提交
        commit() //提交
        rollback() //回滚
        rollback(Savepoint) //回滚到还原点
    Savepoint setSavepoint() //设置还原点


连接池
连接池:只对Connection进行操作。对连接close()方法增强,不会销毁,归还给连接池
Druid
阿里旗下开源连接池产品,使用非常简单,可以与Spring框架进行快速整合。
使用:
    1.导入jar包
    2.加载连接数据库的配置文件
    Properties properties = new Properties();
    properties.load(new FileInputStream("文件路径"));
    3.获取连接池
    DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
    4.获得连接
    Connection conn = dataSource.getConnection();


C3P0
使用:
    //1.导入jar包,配置文件
    //2.创建连接池,默认去类路径下(classpath)查找c3p0-config.xml
    ComboPooledDataSource dataSource = new ComboPooledDataSource(["指定配置名字"]]);
    // 3.从连接池中获得连接
    Connection conn = dataSource.getConnection();


配置文件:c3p0-config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
            <default-config>
                    <property name="driverClass">com.mysql.jdbc.Driver</property>
                    <property name="jdbcUrl">jdbc:mysql:///web_test4</property>
                    <property name="user">root</property>
                    <property name="password">123</property>
            </default-config>
    </c3p0-config>
DBCP
    //需依赖.pooljar包
    BasicDataSource 连接池
            //必须设置项(数据库连接信息)
            setDriverClassName("com.mysql.jdbc.Driver");        //设置数据库驱动
            setUrl("jdbc:mysql://localhost:3306/mybase");        //设置数据库地址
            setUsername("root");        //设置用户名
            setPassword("123");                //设置密码
            //基本项(扩展)
            initialSize        初始化连接,第一次启动时放入的连接数
            maxActive        最大连接数量
            minIdle                最小空闲连接
            maxIdle         最大空闲连接
            //获取连接对象
            getConnection()


DBUtils
DBUtils :封装并简化JDBC,不影响性能。
    QueryRunner 类。核心运行类
        
  
   
    DbUtils        工具类
            closeQuietly(连接等);        //安静的关闭
            //事务操作
            commitAndCloseQuietly(Connection conn) //提交并安静的关闭,自动处理异常
            rollbackAndCloseQueitly(Connection conn)
   
    ResultSetHandler<T>        接口。结果集处理
    实现类:
    BeanHandler<T>(Class type) //将结果集第一条记录封装到一个指定的javaBean中。没有返回null
            返回 T
    BeanListHandler<T>(Class type) //将结果集每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
            返回 List<T>
    MapHandler() //将结果集第一行封装到Map集合中,Key 列名, Value 该列数据
            返回 Map<String, Object>
    MapListHandler() //将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合
            返回 List<Map<String,Object>>
    ScalarHandler() //单值封装。如:select count(*) from 表操作(会返回long类型)。
            返回 数值会返回long
    ArrayHandler() //将结果集第一条记录封装到Object[]数组中。没有返回长度0数组
            返回 Object[]
    ArrayListHandler //将结果集每一条记录都封装到一个Object[]数组中,再将这些数组在封装到List集合中。
            返回 List<Object[]>
    ColumnListHandler<Object>(String columnName) //将指定的列封装到一个List集合中
            返回 List<Object>
    KeyedHandler("列名作为外层key")
            返回 Map<Object,Map<String,Object>>


XML
概述:XML(Extensible Markup Language) 可扩展标记语言:允许自定义标签。最原始标签类型语言,应用于配置文件。由W3C组织(World Wide Web Consortium 万维网联盟)发布,目前遵循2000年发布的XML1.0规范。
设计宗旨:描述数据,传输和存取数据
作用:软件的配置文件。辅助Tomcat服务器,定位用户访问的java程序
元素命名:
- 可以包含字母、下划线、数字、减号、英文句点
- 严格区分大小写
- 只能字母或下划线开头
- 不能以xml(XML、XML等)开头。W3C保留日后使用
- 名称字符之间不能有空格或制表符
- 名称字符之间不能使用冒号(有特殊用途)


文档声明:必须在第一行第一列
    1.<?xml version="1.0" encoding="UTF-8"?>
    encoding:字符集。使用浏览器打开时采用的字符集
    2.处理指令(PI,Processing Instruction):用来指挥软件如何解析XML文档
    <?xml-stylesheet type="text/css" href="xxx.css" ?>
注释:只能写在文档声明的后面
    <!-- 注释 -->

XML解析
解析方式:
1. sax(Simple Api for XML):事件驱动的方式,逐行解析
   优点:如果文档特别大,不会导致内存溢出
   缺点:不能对XML进行增删改操作,只能查
2. dom(Document Object Model):一次性将文档加载到内存,形成树型结构
   优点:可对XML进行增删改查操作
   缺点:如果文档特别大,容易导致内存溢出
解析技术:
        dom4j:开源组织,hibernate底层采用(常用)
        JDOM:开源组织,dom4j兄弟
        JAXP:sun公司,支持DOM和SAX的API
        pull:应用Android手机端解析XML
        jsoup:一种处理HTML特定解析开发包
XML约束
作用:用来规范XML的写法
分类:
- DTD:语法是自成一体的
- Schema:语法就是XML的语法,更容易被解析器所解析;支持名称空间;有比DTD更加强大的语义和语法的约束
DTD约束
DTD(Document Type Definition) 文档类型定义:文件扩展名dtd
一个XML只能引入一个DTD约束文档
语法:
    引入方式
        1.内部DTD
        <!DOCTYPE 根元素名 [
        ]>
        2.外部DTD
            本地DTD:<!DOCTYPE 根元素名 SYSTEM "DTD文档路径">
            网络DTD:<!DOCTYPE 根元素名 PUBLIC "//UNKNOWN/" "DTD文档的URL">
Schema约束
文件自身就是一个XML文档,扩展名为 xsd
XML Schema约束文档通常称之为模式文档(约束文档);遵循约束xml文件称之为实例文档
一个XML可以引入多个Schame约束文档

服务器
概述:服务器从硬件和软件两个方面说:
        硬件:指的就是一台配置很高的计算机。
        软件:需要在这台电脑上安装服务器软件。这台电脑称为web服务器


常见web服务器(中间件)               
  weblogic,        BEA,Oracle收购        大型,收费,支持javaEE所有规范   
  webspere(was),大型,收费,支持javaEE所有规范   
  Tomcat,中小型,免费,支持servlet和jsp规范               
- 安装:解压即可,英文目录下
- 启动:Tomcat/bin/startup.bat
  查看是否启动成功:浏览器打开http://localhost:8080
- 退出:
  关闭窗口
  ctrl+c
  双击 shutdown.bat


常见问题
1. 启动时一闪而过。正确配置:JAVA_HOME
2. 端口冲突问题。修改Tomcat端口号
   - 一:将占用端口的应用结束
   查看程序占用的端口:netstat -ano
   根据PID打开任务管理器干掉
   - 二:修改自身的端口号。
       tomcat/conf/server.xml。(70行左右)
       <Connector port="8080" protocol="HTTP/1.1"
3. 环境变量中配置CATALINA_HOME,会启动同一个Tomcat。删除


目录结构
- bin:tomcat执行文件
- conf:tomcat 配置文件
- lib :Tomcat运行时需要的jar包
- logs:运行日志文件
- temp:临时文件
- webapps:发布web项目路径
- work:tomcat运行JSP的时候,JSP翻译成Servlet的代码,Servlet再被编译成class文件


项目发布(虚拟目录的映射)
配置 tomcat 虚拟路径(官方推荐)
      tomcat/conf/Catalina/localhost/xxx.xml
              xxx:虚拟路径的名称用于浏览器访问
      文件中写入配置:
              <?xml version="1.0" encoding="UTF-8"?>
              <Context docBase="项目磁盘目录" />
(开发)打成war包。将war包放入tomcat/webapps下,当服务器启动时,会自动解压到当前目录。
Servlet
概述
servlet:运行在WEB服务器上的小的Java程序,用来接收和响应客户端发送过来的的数据,通常使用HTTP协议。就是SUN公司提供的一个动态WEB开发技术。
作用:用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
使用配置
1. 编写一个类实现Servlet接口,重写service() 方法
1. 将这个类配置到服务器中(web-inf/web.xml)
    //配置servlet
    <servlet>
            <servlet-name>Servlet名称(任意,用于关联映射)</servlet-name>
              <servlet-class>Servlet全类名</servlet-class>
        //配置服务器启动时就创建Servlet,1留给虚拟机用,越小越优先
        //思想:有一些资源初始化很耗时,第一次访问时初始化资源(耗时)以后访问都无需初始化。
        //     可以这样配置。把耗时的操作放在服务器启动的时后
              <load-on-startup>2</load-on-startup>
              //配置初始化参数,可多个
        <init-param>
                      <param-name>键</param-name>
                      <param-value>值</param-value>
              </init-param>
    </servlet>
    <servlet-mapping> //绑定路径,Servlet的映射
            <servlet-name>Servlet名称</servlet-name>
         //Servlet的访问路径(自定义)
            <url-pattern>/hello</url-pattern>
    </servlet-mapping>
   
    //配置session过期时间
    <session-config>
        <session-timeout>30</session-timeout>
    </session-timeout>
   
    //配置全局错误页面,可多个
    <error-page>
              <error-code>404</error-code>
              <location>/404.jsp</location>
    </error-page>
        
    url-pattern三种配置方式
      1.完全路径匹配:以 / 开始。如:/servlet/aaa/ccc
      2.目录匹配:以 / 开始,以 * 结束。如: /* ,/aaa/* ,/aaa/bbb/*
      3.扩展名匹配:以 * 开始的。如: *.do , *.action
      优先级:完全路径匹配 > 目录匹配 > 扩展名匹配


1. 访问原理:根据<url-pattern>的路径访问,根据<servlet-name>找到对应的<servlet-class>,再找到Servert类,服务器调用service()方法
2. 导入jar包:直接放入 WEB-INF 下,无需BuildPath
路径问题
- 相对路径:不能 / 开头,找位置相对关系
  ./ 或 不写 表示当前路径
  ../ 表示上一级路径
- 绝对路径:以 / 开始的
  - 客户端路径:客户端访问服务器时一定要加工程名
  - 服务器端路径:服务器中文件之间的访问,可以不需要加工程名


    Servlet 接口
            init()|(ServletConfig config) //初始化。服务器开启第一次访问时执行一次
            service(ServletRequest request,ServletResponse response) //服务,处理业务逻辑。每请求一次,服务器创建一个线程,执行一次
            destroy() //销毁。servlet被移除或服务器正常关闭时执行一次
            //获取当前servlet的配置对象
            ServletConfig getServletConfig()
            //获取当前项目ServletContext对象
            ServletContext getServletContext()
    GenericServlet 抽象类
            除了service方法没有显示,其他都实现了
    HttpServlet 抽象类
            service做了实现,把参数强转,调用了重载的service方法
            重载的service方法获取请求的方式,根据请求方式的不同调用相应doXxx()方法


Servlet生命周期
默认用户第一次访问Servlet时,服务器会创建这个Servlet实例,并执行init()初始化方法。
任何一次请求服务器都会创建一个线程执行service()方法,在service()方法内部会根据请求方式的不同执行不同的doxxx()方法。
当关闭服务器或从服务器中移除项目时,Servlet的实例就会被销毁,并且执行destroy方法。
Servlet生命周期从始至终有且仅有一个Servlet实例。


ServletContext
    ServletContext 接口。上下文/全局管理者。作用:
        //1. 作为域对象存储数据/共享资源
        setAttribute(String key,Object value) //设置值
            Object getAttribute(String key) //获取值
            removeAttribute(String key) //删除值
            
        //2. 读取web项目下文件
        InputStream getResourceAsStream("/WEB-INF/classes/...") //获取资源以流的形式
            String getRealPath("/WEB-INF/classes/...") //获取文件磁盘真实路径
             方式二:类加载器读取文件,局限于/WEB-INF/classes下的文件
               类名.class.getClassLoader().getResourceAsStream("文件名")
        
        //3. 获得全局初始化参数(web.xml - <context-param>)
        String  getInitParameter(String key) //通过名称获取指定的参数值
            Enumeration getInitParameterNames()  //获取所有的参数名称
        
        //4. 获得文件的MIME类型(大类型/小类型)
        String getMimeType(String 文件名称)
   
    配置全局初始化参数:WEB-INF/web.xml - <web-app> -
      <context-param>
              <param-name>username</param-name>
              <param-value>root</param-value>
      </context-param>
   
ServletConfig
    ServletConfig (web.xml配置文件中当前Servlet的配置对象)
            //获取名称(的servlet-name)
            String getServletName()
            //参数操作(<init-param> 标签下)
            String getInitParameter(String key) //通过参数名称获取指定参数值
            Enumeration getInitParameterNames() //获取所有的参数名称<servlet-name>
    对象创建时机:由服务器创建,通过servlet的init(ServletConfig config)将该对象传入
cookie


【Cookie技术的使用】
获得 cookie  cookie【】cookies=request.getcookies()


向浏览器保存数据:
HttpServletResponse有一个方法:
* void addCookie(Cookie cookie);
获得浏览器带过来的Cookie:
HttpServletRequest有一个方法:
* Cookie[] getCookies();
创建一个Cookie对象:
* Cookie(String name,String value);


Cookie的常用的API:
* getName();     获得cookie 名字
* getValue();    获得cookie值
* setDomain(String domain); -- 设置Cookie的有效域名. //  www.baidu.com  music.baidu.com
* setPath(String path); -- 设置Cookie的有效路径.
* setMaxAge(int maxAge); -- 设置Cookie的有效时间.


Cookie的分类有关:
* 会话级别的Cookie:默认的一次会话Cookie.关闭浏览器Cookie就会销毁.
* 持久级别的Cookie:可以设置Cookie的有效时间.那么关闭浏览器Cookie还会存在. 手动销毁持久性Cookie. setMaxAge(0)---前提是有效路径必须一致.


【session的概述】
Cookie本身是有大小和个数的限制.Session没有限制.Cookie的数据保存在客户端,Session数据保存在服务器端. HTTPsessionSession的执行原理:基于Cookie的.使用Session:* 获得Session:    * request.getSession();保存:request.setAttribute( string name,onject name)获取: object value=request.getAttribute(string name)删除:removeAttribute(string name)


jsp


JSP的执行过程:
* JSP会被翻译成Servlet,编译成class进行执行的.
JSP的嵌入Java代码:JSP的脚本元素
* <%!    %>                :翻译成类中的成员部分. 定义变量,定义方法,定义类.Servlet是线程不安全的,尽量少在类中定义成员属性!!
* <%     %>                :翻译成类的service方法内部的内容. 定义变量,定义类,直接写代码块.
* <%=    %>                :翻译成service方法内部的out.print();
[JSP的指令]
指令的语法:<%@ 指令名称 属性名称=”属性值” 属性名称=”属性值” ...%>
JSP中page指令:<%@ page %> -- 设置JSP的.
设置全局的错误友好页面:        * 在web.xml中设置:  <error-page>          <error-code>404</error-code>          <location>/404.jsp</location>  </error-page>  <error-page>          <error-code>500</error-code>          <location>/500.jsp</location>  </error-page>


【JSP的动作标签】


标签的作用:简化代码.<jsp:forward />                        :用于页面的转发.* <jsp:forward page="/demo1-jsp/demo3-object/demo3.jsp"></jsp:forward><jsp:include />                        :用于页面的包含.(动态包含)<jsp:param />                        :用于带有路径的标签下,传递参数.<jsp:useBean />                        :用于在JSP中使用JavaBean.<jsp:setProperty />                :用于在JSP中向JavaBean设置属性的.<jsp:getProperty />                :用于在JSP中获得JavaBean的属性.




【EL表达式】EL(Expression Language)简化JSP写法,用来替代<% ... %>(JSP2.0开始)

语法

    格式:${EL表达式}
    获取域中数据(从4个域中)
            //获取普通单值数据
            ${xxxScope.域key } //pageScope,requestScope,sessionScope,applicationScope
            ${域key } //依次范围从小到大查找属性值,没有返回空字符串
            //获取集合|数组数据
            ${域key[index]} //获取数组|Listindex对应的值
            ${域key.MapKey} //获取Map中key对应的值
            //获取对象数据
            ${域key.bean属性} //获取对象中属性值
        //[]和.区别:
                []用于有下标的数据(数组,list集合)
                .用于有属性的数据(map,对象)
                如果属性名中包含有特殊的字符.必须使用[""]

【MVC设计模式】
M : Model 模型层
        作用:封装数据,封装对数据的访问,JavaBean
V : View 视图层
        作用:展示数据,JSP
C : Controller 控制层
        作用:接收请求,找到相应JavaBean完成业务逻辑,Servlet
JavaBean+Servlet+JSP





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马