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】

image弱化存储API操作

-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的区别:

image

数据批处理通常需要开启事务!

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:

image

========获取插入数据的主键

    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的方法,显然是为了让子类覆盖而设计的.

posted @ 2020-07-02 15:52  小海_macro  阅读(163)  评论(0编辑  收藏  举报