Servlet_过滤器&监听器【背后的机制——欠火候】
过滤器——对数据和相应的功能进行统一处理
创建过滤器:
【1】实现Filter接口
【2】在web.xml当中注册该过滤器
过滤器的生命周期:
【1】启动的时候就会被初始化
【2】初始化顺序按照web.xml中的注册顺序,由上而下进行执行。
【3】过滤器拦截的顺序:也是按照注册在web.xml中的顺序。
链式调用过滤器的情况:
chain.doFilter(hreq, resp);
前提条件是:<url-pattern>*.do</url-pattern>过滤器的url-pattern的值均为*.do
[note:]想要请求抵达servlet,必须完成链式调用
Filter & Spring得拦截器功能类似,包裹交互层(controller/servlet)进行操作
AOP:包裹业务层进行操作
Servlet当中得三大域:彻底与代码解耦
-监听作用域本身
-监听作用域得元素
创建监听:
【1】实现监听得接口
【2】
域对象创建与销毁 域对象内得属性变化
【1】Application :
-容器加载,调用application监听得contextInitialized方法 监听到作用域当中所有的元素的增减和修改
-容器在关闭得时候,调用contextDestroyed()方法 监听到修改的元素的值为旧值
【2】Session 容器关闭\手动销毁\时间到期
当session当中添加
当
【3】Request
-监听绑定:
【1】将监听放入session
【2】当监听加入session后,触发valueBound方法
【3】当session中,修改或者删除该监听的时候,触发valueUnbound
【4】优点:刻意根据传入的对象,实现1对1的监听;缺点:对代码有耦合
Open session in view:保障三级缓存开发得技术!
【1】可以不必使用数据库连接池
【2】优势:提高查询得效率
【3】劣势:高并发得情况下,会导致连接数不够用
【4】
J2EE——回顾【JDBC】{夯实基础!!!!!!—框架搭建的基石!!!!}
J2EE阶段是web项目基石。
J2EE:
【1】JDBC
【2】Servlet+JSP
【3】封装交互层和持久层框架
SSM :Spring \ SpringMVC \ Mybatis
项目:数据监控平台(动态报表)
【1】Zookeeper
【2】定时任务
【3】消息系统
【4】大数据hive
【5】前端的动态报表框架:echarts
JDBC:持久层操作:本质数据操作![底层:Socket协议进行连接]
-其他链接桥技术是对JDBC的进一步封装。
-访问不同的关系型数据库:提供统一的接口,但是需要提供不同的驱动。【mysql\oracle\sqlserver\DB2】
-JDBC驱动依赖:注意如何定位使用的依赖:mysql/J 8.0前后半分
JDBC使用步骤
【1】加载驱动 :执行Driver类的静态嗲马快: Class.forName() 或者直接new
【2】创建连接: DriverManager.getConnection(url,user,password) url:访问连接串 user:数据库用户名 password:
-url: jdbc:mysql://[协议头] 【访问地址+端口3306】 /数据库名
【3】创建查询通道
Connection.createStatement() / preparedStatement
-查询操作:D :select
-修改操作:DML : i u d
【4】查询:执行sql。
-statement,executeQuery()
-resultSet.next() :resultSet指向的是查询结果的前一条。 // resultSet.getInt/getString/getObject ——列名/匿称【推荐】/列游标【从1开始】——返回的为整型!
-取得值可以正常转换
【5】PreparedStatement:【1】预编译sql语句【2】防止sql注入
-网络安全:正常情况下得开发者,关注得是怎么防御!
-获取信息
-瘫痪服务器
-控制
从系统/应用层面
D-DOS问题:瞬间大量的访问链接。
SQL注入:
占位符技术
- 占位符从1开始
-占位符必须和值一一对应
- 占位符不能再字符串当中被识别
-所有传给占位符的参数会被当成一个独立的值
批处理是面试经常会问的!
statement&&prestatement的区别:
数据批处理通常需要开启事务!
unique:是除了主键之外,索引最高效的索引。【尽可能避免字符串索引——尽可能使用数字索引】
String uuid = java.util.UUID.randomUUID().toString();
Long ts = Long.valueOf(new Date().getTime()+""+new Random().nextInt(10000));=========
对于开启事务:
connection.setAutoCommit(false);
要注意:捕获异常后的事务回滚操作。connection.rollback();
以及:最终的连接关闭操作。connection.close();
======
通过connection获取DatabaseMetaData:
========获取插入数据的主键
ResultSet rSet = pStatement.getGeneratedKeys();
if (rSet.next()) {
rSet.getObject(1);//获取插入行的主键
}
JDBC的连接池【2S内给到结果;2s~7s为访问网站的极限】
正常情况下的sql操作,每次都需要创建连接Connection,会严重影响性能
① 每次要重新创建
② 每次都要关闭
③ 一旦关闭后,所有之前缓存的内容都要重新解析
====解决方案:使用数据库连接池
【1】一个连接的对象池
【2】每次从池中获取一个连接
【3】用完连接后,要归还链接,即归池
【4】如果池中的连接对象被取空,则所有后续连接则进入等待,等待有连接被归池
beeline –u jdbc:hive2://localhost:10000
一个protected的方法,显然是为了让子类覆盖而设计的.