快要遗忘的JAVA知识之温故而知新

1、session和cookie区别?

cookie:
    在浏览器端缓存诸如用户输入等小型非敏感数据,不安全。
    关闭浏览器cookie销毁除非设置了有效期
session:
    在服务器端存储诸如数据库查询等敏感数据,session id自动由浏览器端cookie维护。
    session id和session丢失一个,session失效
    session id丢失:
        关闭浏览器,cookie丢失,session id丢失
    session丢失:
        用户退出登录,或服务器关闭,session到期(默认30min),session丢失
    
    

2、PreparedStatment和Statment的区别?

Statment:
    不能够对SQL进行动态的赋值
    容易发生SQL注入
    对于相同的SQL,如果只是值不同,mysql会对每条SQL进行编译,编译很耗时。
PreparedStatment:
    可以对SQL进行动态赋值,问号当做占位符
    会对传入的值多特殊处理,过滤掉非法字符,能避免SQL注入
    对于相同的SQL,如果只是值不同,mysql只会编译一次。


SQL注入:
    如果将用户提交的数据插入到数据库中,数据中含有“1 or 1”等非法字符,会原封不动地拼接在SQL语句中,就会对数据库造成损害,或者数据泄露。

3、ThreadLocal

ThreadLocal:
    解决一个线程内所有代码间的数据共享
    场景:
        由于用户的一次请求创建一个线程,我们可以利用ThreadLocal封装Connection对象,实现Web项目中单次请求的jdbc事务操作
    助记思路:
        dao层代码:
        ThreadLocal<Connection> thread=new ThreadLocal();
        Connection conn=thread.getConnection(url,user,password);
        if(conn==null){
              conn=DriverManager.getConnection(url,user,password);  
              thread.set(conn);
        }
        service层逻辑:
            调用dao层方法获取Connection连接,调用dao层方法执行事务内的多次DML操作,
            DML操作全部执行成功,提交事务,否则回滚事务。
            事务操作结束关闭连接。
            ###DML操作全部执行成功的判定:
                由于使用executeUpdate方法进行DML操作,该方法返回的此次操作影响的记录条数。
                我们判断所有DML操作返回值是否包含0,不含0则DML操作全部执行成功。

拓展:
    ThreadLocal可不可以替代数据库连接池技术?

=========================================
回顾servlet三大作用域对象
    request:一次请求内的数据共享
    session:一个用户多次请求间的数据共享
    application:多个用户间的数据共享。一个web项目中只有一个application对象。
                    
    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二百四十九先森

你的打赏是我努力的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值