四大作用域:

1  ServletContext   服务器启动,web应用一加载就创建ServletContext对象  作用域为整个web应用。

2  Session    第一次调用reqeust.getSession时创建,当一段时间没有使用或服务器关闭或调用session.invalidate方法时销毁 作用域为整个会话范围。

3  request     每一次请求都会创建一个request,当请求结束时request销毁。作用域为整个请求链。

4   pageContext  当对jsp的请求开始时生成,当响应结束时销毁。   当前jsp页面



cooke和session的比较:

cookie是客户端技术,保存在浏览器。浏览器最多保存300个cookie每个站点不超过20个,大小不超过4kb

session是服务器端技术,基于JSESSIONID cookie或url后拼接的Jsessionid的值进行工作,一个session默认30分钟不使用自动销毁,默认时间可在web.xml文件中进行配置。

session的钝化与活化:
当服务器正常关闭时,还存活着的session会随着服务器的关闭被以文件的形式存储在tomcat的work目录下,这个过程叫做session的钝化
当服务器再次正常开启时,服务器会找到之前的SESSIONS.ser文件从中恢复之前保存起来的session对象这个过程叫做session的活化
想要随着Session被钝化活化的对象它的类必须实现Serializable接口


JSP的组成部分
1 模版元素
直接书写在JSP中的HTML内容,看起来就像写HTML一样的方便,但是最终会在被翻译成Servlet的过程中 out.write()直接输出
2 脚本表达式
<%= 表达式%> 接受的是一段java表达式,在JSP翻译到Servlet的过程中,将会计算表达式的值,利用out.write()输出出去
3  脚本片段
<%  %>直接可以在脚本片段中书写java源代码,其中的源代码将会直接拷贝到翻译过来的servlet中的响应位置上。
4 JSP声明
<%! %>在其中可以写java代码,其中的源代码会被拷贝到servlet中的service方法之外,可以利用它来为servlet增加成员方法、成员变量、静态代码块
5 JSP注释
<%-- --%>被jsp注释包围起来的内容将不会被服务器翻译到servlet之中,要注意区分html注释和java注释的区别
jsp注释不会被翻译到servlet中,会在翻译时遗弃
java注释不会被编译到class文件中,会在编译时遗弃
html注释将会当作模版元素,直接输出到浏览器中,浏览器将不会显示html注释中的内容。



九大隐式对象

page config application response request session out exception pagecontext


PageContext对象
(1)获取其它八大隐式对象,可以认为是一个入口对象。
(2)获取其所有域中的数据
pageContext操作所有域中属性的方法
public java.lang.Object?getAttribute(java.lang.String?name,int?scope)
public void setAttribute(java.lang.String?name, java.lang.Object?value,int?scope)
public void?removeAttribute(java.lang.String?name,int?scope)

pageContext中代表域的常量
PageContext.APPLICATION_SCOPE
PageContext.SESSION_SCOPE
PageContext.REQUEST_SCOPE
PageContext.PAGE_SCOPE 

findAttribute方法,在四大域中搜寻属性,搜寻的顺序是page域、request域、session域、application域,从小域到大域开始搜索,如果搜索到就直接获取该值,如果所有域中都找不到,返回一个null(与el表达式不同,此处返回null,对网页是不友好的)


(3)作为域对象使用
作用的范围:真个jsp页面,是四大作用域中最小的一个。
生命周期:当对jsp的请求开始时生成,当响应结束时销毁。

(4)跳转到其他资源
其身上提供了forward和include方法,简化重定向和转发的操作



事务的四大特性ACID
~原子性:事务的一组操作是原子的不可再分割的,这组操作要么同时完成要么同时不完成。
~一致性: 事务在执行前后数据的完整性保持不变。数据库在某个状态下符合所有的完整性约束的状态叫做数据库具有完整性。在解散一个部门时应该同时处理员工表中的员工保证这个事务结束后,仍然保证所有的员工能找到对应的部门,满足外键约束。
~隔离性:当多个事务同时操作一个数据库时,可能存在并发问题,此时应保证各个事务要进行隔离,事务之间不能互相干扰。
~持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,不能再回滚。



数据库的隔离级别
~Read uncommitted:如果将数据库设定为此隔离级别,数据库将会有脏读、不可重复度、幻读的问题。
~Read committed:如果将数据库设定为此隔离级别,数据库可以防止脏读,但有不可重复度、幻读的问题。
~Repeatable read: 如果将数据库设定为此隔离级别,数据库可以防止脏读、不可重复度,但是不能防止幻读。
~Serializable:将数据库串行化,可以避免脏读、不可重复读、幻读。

安全性来说:Serializable>Repeatable read>Read committed>Read uncommitted
效率来说:Serializable<Repeatable read<Read committed<Read uncommitted
通常来说,一般的应用都会选择Repeatable read或Read committed作为数据库隔离级别来使用。
mysql默认的数据库隔离级别为:REPEATABLE-READ



c3p0连接池:

mysql c3p0配置文件例

<?xml version="1.0"?>
<c3p0-config>
 <default-config>
<property  name="driverClass">com.mysql.jdbc.Driver</property >
<property name="jdbcUrl">jdbc:mysql:///database名</property >
<property name="user">root</property>
<property name="password">root</property>
 </default-config>

 <!-- This app is massive! -->
 <named-config name="mySoruce"> 
  <property  name="driverClass">com.mysql.jdbc.Driver</property >
<property name="jdbcUrl">jdbc:mysql:///database名</property >
<property name="user">root</property>
<property name="password">root</property>
 </named-config>
</c3p0-config>