湖南大学JavaEE期末整理(二)——第四、五、六章

故事扮演 提交于 2021-01-19 14:34:32

清单为复习课时老师说的重点,高亮部分为PPT上标明“考”的部分。全部整理自PPT,仅供参考。

JavaEE重点清单(接一)

  1. JDBC
  2. PreparedStatement
  3. EL表达式
  4. JSTL 概念选择题
  5. Hibernate

四、JDBC

JDBC驱动程序的类型

  1. JDBC-ODBC桥驱动程序及OCBC驱动程序
  2. 本地API部分Java驱动程序
  3. JDBC-Net纯Java驱动程序
  4. 本地协议纯Java驱动程序
    JDBC体系结构
接口名 说明
DriverManager 加载和卸载各种驱动程序并建立与数据库的连接
Connection 与数据的连接
PreparedStatement 执行预编译的SQL语句
ResultSet 查询出来的数据库数据结果集
Statement 执行SQL语句并将数据检索到ResultSet中

PreparedStatement

PreparedStatement执行预编译的sql语句,支持参数化查询,使用setShort,setString等方法为参数赋值,如参数的SQL类型为INTEGER,则用setInt方法。

优点

  1. 写法参数化,如String sql = "insert into user(username,password) values(?,?)";
  2. 比Statement更快。性能更优,因为其已预编译在数据库系统中,参数化sql也不是字符串追加。
  3. 可防止SQL注入式攻击。数据库完成SQL指令的编译后才套用参数运行,因此参数中含有破坏性的指令不会被运行。

示例

conn = getConnection();
String sql = "insert into user(username,password,"+
  "sex,phonenum,userType) values(?,?,?,?,?)";
ps = conn.prepareStatement(sql);

DataSource

实现方式:1.直连数据库。使用DataSource.getConnection()产生一个标准的connection对象,使用完close,每次都需要重新建立与数据库的连接;2.连接池连接。DataSource内部封装了一个连接池,产生的connection对象自动加入到连接池中,可被下次重用。

系统管理员部署DataSource:
BasicDataSource ds = new BasicDataSource();
ds.setServerName("server_1");
ds.setDatabaseName("javaee");
//安装在server_1服务器上的数据库javaee

Context ctx = new InitialContext();
ctx.bind("jdbc/MySQLDB",ds);
//将BasicDataSource 的ds对象与逻辑名jdbc/ MySQLDB绑定在一起

/**********************************/
程序员使用DataSource
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("jdbc/MySQLDB");
//通过 JNDI 取得DataSource 对象
Connection con = ds.getConnection();
//获取连接

Connection pool(连接池)

减少资源开销和创建连接的时间,简化编程模式。

private static BasicDataSource getDataSource(){
   
   
	BasicDataSource  basicDataSource = new BasicDataSource();
	basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
	basicDataSource.setUrl("jdbc:mysql://localhost:3306/javaee");
	basicDataSource.setUsername("username");
	basicDataSource.setPassword("password");
	
	//设置池被启动时初始化的创建连接个数
	basicDataSource.setInitialSize(3);
	//设置最大活动连接数
	basicDataSource.setMaxTotal(50);
	//设置最大空闲连接数
	basicDataSource.setMaxIdle(10);
	//从连接池获取一个连接时,最大的等待时间,超出则抛出异常
	basicDataSource.setMaxWaitMillis(1000);
	return basicDataSource;
}

五、JSTL和EL

EL表达式

使Web程序开发人员能够利用JSTL和EL来开发Web程序,取代了传统直接在页面上嵌入Java程序的做法,提高程序可读性、维护性和方便性。

作用

  1. 获取数据:替换JSP中的脚本表达式,从各种类型的web域中检索Java对象、获取数据
  2. 执行运算:在JSP中执行基本的关系逻辑、数学运算
  3. 获取web常用开发对象:定义了一些隐式对象
  4. 调用Java方法:自定义EL函数调用Java类的方法
EL语法
  • 在<%@page 标签里加上isELIgnored=“false”
  • ${标识符}
    语句在执行时会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找不到返回“”
//使用Scriptlet获取数据:
<%=request.getAttribute("userBean").getName()%>
//使用EL表达式:
${
   
    requestScope.userBean.name}
//也可以用
userBean[name]

//可以进行数学逻辑运算
${
   
    81/9}
${
   
    true || false}

EL常用对象,即${隐式对象名称}中的名称介绍:

  1. pageContext:jsp中的pageContext对象
  2. pageScope:page域中保存属性的Map对象,单一个jsp page的范围内,例如${pageScope.userList}
  3. requestScope:request请求域中用于保存属性的Map对象,常用于两个jsp页面之间的请求。${requestScope.name}等价于request.getAttribute(“name”)
  4. sessionScope:session域中用于保存属性的Map对象
  5. applicationScope:application域中用于保存属性的Map对象,从服务器开始到关闭期间
  6. Cookie:保存了所有cookie的Map对象
  7. Header:保存了所有http请求头字段的Map对象

JSTL标签

允许开发人员像使用HTML标签那样在JSP中开发Java功能。扩充了一个JSP标签库来完成通用任务,如循环、国际化、条件执行等。

JSTL标签概述

应用最多的是核心标签,格式化标签、XML标签应用有限。

防范xss攻击,通过fn的escapeXml方法把可能被解释为XML标记的字符进行转义。

<input type="text" name="foo" value="${fn:escapeXml(param.foo)}"/>

使用

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!--后续的标签都会以<c: 开头-->

标签 JSTL用法 原用法/解释
c:set <c:set var=“name” value="${‘gareen’}" scope=“request” /> <%request.setAttribute(“name”,“gareen”)%>
c:out <c:out value="${name}" <c:out value="${name}"
c:remove <c:remove var=“name” scope=“request” /> <%request.removeAttribute(“name”)%>
c:choose 对应<c:when><c:otherwise> 在众多选项中做选择
c:forEach <c:forEach items="${userList}" var=“user" varStatus=“st” > items="${userList}"表示遍历的集合;var="user"表示把每个集合中的元素放在user上;varStatus="st"表示遍历的状态
c:if 通过<c:if test="">进行条件判断

六、Hibernate简介

一个开放源代码的对象关系映射框架,对JDBC进行了轻量级的对象封装。不仅提供了从Java类到数据表之间的映射,也提供了查询和事物机制,大大减少了操作数据库的开发工作量。

数据持久化:程序中的数据以某种形式保存到某存贮介质中。实现:1.Serialization序列化,将对象存储到文件中;2.JDBC存储到数据库中;3.ORM将对象通过对象/关系映射存储到关系数据库中;4.ODB:以对象为存储单位的新型数据库。

在这里插入图片描述
持久化对象在Hibernate中的三种状态与转换

  1. 瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象。
  2. 持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库。
  3. 脱管(detached):数据库中有数据与之对应,但当前没有session与之关联;托管对象状态发生改变,Hibernate不能检测到。
    在这里插入图片描述
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!