本帖最后由 小石姐姐 于 2018-6-1 09:28 编辑
反射/内省/事务/TreadLocal/分页/Ajax-Json
#反射:
- **让方法执行,invoke()**
- newInstance():实例化
- setAccessible();强制
- Constructor();构造
- feild();属性
- method();方法
#内省(introspector)
- 用来获取JavaBean的属性及属性的get/set方法
- Java.beans:就是一个满足了特定格式的Java类
- 需要提供无参数的构造方法
- 属性私有
- 对私有的属性提供
- 通过Introspector.BeanInfo()获取类的属性名称,返回BeanInfo
- getPropertyDestriptors();类中所有的属性,返回PropertyDestriptors,Map键值对
- 只是获取类中的get和set方法
- getReadMthod()
- getwriterMethod()
#事务
- 逻辑上的一组操作,组成操作的各个逻辑单元一起成功,一起失败
####mysql的事务的管理:
1. 手动开启事务:
- start transaction
- commit/rollback
2. 设置一个自动提交参数:
- show variables like '%commit%' 查看与commit相关参数
- set autocommit = 0 将参数设置成OFF
####JDBC中的事务管理(Connection(里面也可设置隔离级别setTransactionTsolation))(面试)
- read uncommitted(不安全,性能快):未提交读,脏读,不可重复读,虚读都可能发生
- read committed(oracle默认),已提交读,避免脏读,但是不可重复读和虚读有可能发生
- repeatable read(mysql默认),可重复的,避免脏读,但是虚读有可能发生
- Serializable(安全,性能慢)串行化的,避免脏读,不可重复读,虚读的发生
- **原子性**强调事务的不可分割
- **一致性**,强调的是事务执行前后,数据的完整性要保持一致
- **隔离性**,一个事务的执行不应该受到其他事务的干扰,如果不考虑事务的隔离性,会引发一系列的问题(脏读,不可重复读,幻读/虚读)
- **引发的一些安全性的问题(ACID)**:
- 一类是读问题:
- 脏读:一个事务读到另一个事务还没有提交的数据
- 不可重复读:一个事务读到了另一个事务已经提交的update数据,导致在当前的事务中多次查询结果不一致
- 虚读/幻读(概率性,执行很多次才出现一次):一个事务读到另一个事务已经提交的insert数据,导致在当前的事务中多次的查询结果不一致
- 一类是写问题
- 引发两类的丢失更新(了解就行)
- **持久性**,事务一旦结束(提交/回滚)数据就持久保存到了数据库
1. 开启事务:需要关闭自动提交
- setAutoCommit(false);默认是turn自动提交
//业务
2. 提交事务
- commit()
3. 回滚事务(有异常)
- rollback();
# ThreadLocal当前线程#
- 把Connection对象绑定当前线程
- 注意,一个线程绑定一个Connection对象,一个线程内多个conn对象是指向同一个
# MVC和EE开发三层结构的区别 #
- 客户端层
- java Applet
- HTML,CSS,JS
- WEB层
- Servlet+JSP
- 业务层
- EJB(企业级的JAVAbean重量级的)
- 持久层
####EE开发的三层结构,详情查看图解
#商品的添加的功能:
- 重复提交的问题
1. 添加完商品之后,转发到一个页面,刷星该页面
2. 网速很慢,点击提交的按钮,其实已经在提交类但是网速慢,不停的点击提交
- 解决重复提交的根本解决办法:令牌机制(一次性)
1. 生成随机的令牌保存在session中.
2. 在表单提交的时候,将随机的令牌放入到表单的隐藏字段中
3. 在Servlet中获取session中和表单的中的令牌是否一致
4. 如果一致执行插入操作,不一致跳转到其他页面,将令牌销毁
#修改商品中主要记住的
- 要在修改页面的表上方加上一个隐藏字段
<input type="hidden" name ="pid" value="${ product.pid }" />
- 多选或者复选框内的数据回选
<c:if test="${ pd.cid==4 }">selected</c:if>
#商品分页的显示
- 分页条:
- 首页,上一页[1][2][3][4][5][6]下一页,尾页
- 分页功能的实现:
1. 物理分页(一般使用这种):一次只差10条记录,点击下一页,再去查询后10条
- 主要使用SQL语句进行控制的分页
- 缺点:经常需要和数据库进行交互
- 优点:如果数据量特别大,不会导致内存的溢出
2. 逻辑分页:一次性将所有数据全都查询出来,再根据需要进行截取
- List集合进行控制,subList()
- 缺点:数据量如果特别大,容易导致内存的溢出
- 优点:与数据库交互次数少
3. 不同的数据库对分页的语句也是不一样的
- MYSQL进行分页,limit关键字
- select*form xxx where .. Group by ... Having...Order by ... Limit a,b; -- a:从哪里开始 b:查询的记录数
- 根据页数去计算limit后面的连个参数
- currPage begin pageSize
- 1 0 10
- 2 10 10
- 3 20 10
- begin = (currPage - 1) * pageSize
- 参数的传递
- 前台--->后台:currPage
- 后台--->前台:cuurPage,totalPage(总页数),totalCount(总记录数),pageSize,List集合
- 使用一个JavaBean封装参数:
- 后台--->前台:传递一个JavaBean就行
- Oracle 进行分页,使用SQL语句嵌套
- SQL Server 数据库进行分页:使用top关键字
#异步Ajax
- 原生的JS的写法去实现
- 利用JQ去写Ajax(重要)
- 什么是Ajax:
1. Ajax:异步的 JavaScript And xml
- 使用的是老技术,用的是新思想
2. 区别:
- 异步,局部刷新
- 同步,全部刷新
3. AJAX的功能:完成页面的额局部刷新,不中断用户的体验
- 早期的时候JS技术根部不收重视,后台开发人员经常讲JS当成一种玩具式语言
- JS中有一个对象XMLHttpRequest对象可以向服务器异步发送请求,传统的B/S结构的软件,所有实现功能都需要在服务器端写代码(胖服务器),现在有类AJAX以后,可以将部分代码写到客户端浏览器(瘦服务器---RIA:Rich Internet Application)
- FLEX:AS脚本编程(不支持手机端,倒闭了)
- XML:使用xml作为数据传递的格式---JSON(比较小,用的多)
# JSON轻量级的数据交换格式 #
- 可以用JavaScript直接来解析
- 对象表示为键值对
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
- JSON的数据格式
{“id”:1,”name”:aaa}
[{“id”:1,”name”:aaa},{“id”:2,”name”:bbb}]
{
“city”:{“cid”:1,”cname”:”xxx”}
}
- JSON的生成工具
- JSONLIB 转换JSON数据:
* JSONArray :将数组或List集合转成JSON.
* JSONObject :将对象或Map集合转成JSON.
- 刚拿到的data对象是一个文本的String字符串,还不是真正的JSON对象,
- 如果不想要,那就用这个来去除里面属性:config.setExcludes(new String [ ] { " pid " });
- 数据结构自己能手写出来
|