day19_MD5加密_Apache DBUtils_监听器 知识回顾

MD5加密

MD5概述
用户名密码保存在客户端是一种十分危险的行为。所以需要进行加密后保存。
其中MD5就是一种比较常用的加密算法。
与其说MD5算法是一种加密算法,不如说是一种数据指纹(数据摘要)算法。
其特点如下:
任意大小的二进制数经过MD5计算后都能得到一个独一无二的128位二进制数。
不同的数据算出的MD5绝对不相同。
相同的数据算出的MD5一定相同。
只能有明文算出密文,密文是永远也无法算成明文的。
MD5大量应用于计算机中。如数据库中保存的密码通常都是经过MD5加密后的数据。如用户下载文件时可以进行MD5校验防止数据被篡改。
在记住用户名案例中,我们可以使用MD5进行加密后再保存在客户端,从而保证数据安全。
在数据库中保存的密码也不宜直接存储为明文。也要经过MD5加密后存储。
public class MD5 {
public static String md5(String plainText) {
byte[] secretBytes = null;
if(plainText==null){
return null;
}
try {
secretBytes = MessageDigest.getInstance("md5").digest(
plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有md5这个算法!");
}
String md5code = new BigInteger(1, secretBytes).toString(16);
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
}

修改之前的程序:
注册时:RegistServlet
user.setPassword(MD5.md5(user.getPassword()));
service.regist(user);
登录时:
|-普通登录
User user = service.login(username,MD5.md5(password));
|-30天自动登录保存cookie
Cookie alc = new Cookie("autologin",URLEncoder.encode(
user.getUsername()+":"+MD5.md5(user.getPassword()),"utf-8"));

Apache DBUtils

Apache DBUtils介绍
我们编写JDBC代码时发现大量的代码都是重复的,能不能简化JDBC的操作呢?Apache组织为我们提
供了一套开源jar包,大大简化了JDBC操作。
commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,
学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
因此dbutils成为很多不喜欢hibernate的公司的首选。

QueryRunner!!!
(1)如果需要事务控制必须用这组方法 ,
QueryRunner()
<T> T query(Connection conn, String sql, ResultSetHandler<T> rsh)
<T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
int update(Connection conn, String sql)
int update(Connection conn, String sql, Object... params)
int update(Connection conn, String sql, Object param)
(2)如果不需要进行事务控制,可以使用这组方法,不需要每次都传入连接,底层会自己去找数据源要连接
QueryRunner(DataSource ds)
<T> T query(String sql, ResultSetHandler<T> rsh)
<T> T query(String sql, ResultSetHandler<T> rsh, Object... params)
int update(String sql)
int update(String sql, Object... params)
int update(String sql, Object param)

概述
以下代码只需理解:被监听对象、监听器对象、注册监听。
----------------------------
!public class MyJFrame {
public static void main(String[] args) {
//frame就是被监听对象
//new MmL()监听器对象
//当frame窗体上有鼠标移动或拖动时,分别触发监听器对象的mouseMove、mouseDragger
JFrame frame = new JFrame();
class Mml implements MouseMotionListener{
public void mouseDragged(MouseEvent e) {
System.out.println("鼠标拖动了");
}
public void mouseMoved(MouseEvent e) {
System.out.println("鼠标移动");
}
}
frame.addMouseMotionListener(new Mml());
frame.setVisible(true);
}
}
监听器:就是一个实现特定接口的普通java程序,这个程序专门用于监听另外一个java对象(被监听对象)
的方法调用或属性改变,当被监听对象发生以上事件时,监听器的某一个方法会被立即执行。
分析图见:“监听器.png”

监听器分为:普通监听器和Servlet监听器

5.2、Servlet监听器

5.2.1八大监听器
JavaEE中提供了八大监听器,用来监听Servlet中指定事件。
它们监听的事件源分别是ServletContext,HttpSession,ServletRequest这三个域对象进行监听。

Servlet规范针对这三个对象上的操作,又把这多种类型的监听器划分为三种类型:
监听这三个对象的创建与销毁操作
监听域对象中属性的添加或删除操作
监听绑定到HttpSession域中的某个对象的状态改变的操作。

5.2.2开发步骤:
1、创建一个类实现特定的接口,并实现对应的抽象方法
和编写其他事件监听器一样,编写servlet监听器也需要实现特定的接口,并针对
响应的动作实现对应的方法。
2、在web.xml文件进行“注册” 配置

时间: 2024-11-08 20:38:28

day19_MD5加密_Apache DBUtils_监听器 知识回顾的相关文章

C#知识回顾

Main函数是什么? a) 程序入口函数 在程序中使用Main函数有什么需要注意的地方? a) Main函数不能变,有且只有一个 CLR是什么? a) 公共语言运行时 b)  Common Language RunTime 程序集是什么? a) 编译后代码的集合.(包括exe和dll). 加载项目里所有的类到内存,并找到其中的主函数,并作为默认的启动函数调用执行. 当运行一个程序集的时候,CLR做了什么事情? a) 加载项目所有的类到内存,并找到其中的主函数作为默认的启动函数调用执行,但是,如果

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁

1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定.假设我们事先不知道同步函数用的是什么锁:如果在同步代码块中指定的某个锁(测试)和同步函数用的锁相同,就不会出现线程安全问题,如果锁不相同,就会发生线程安全问题. 看下面的代码:t1线程用的同步锁是obj,t2线程在操作同步函数的资源,假设不

JS基础知识回顾:引用类型(一)

在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起,而对象时引用类型的一个实例. 尽管ECMAScript从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构,所以虽然说引用类型与类看起来想死,但他们并不是相同的概念. 不过引用类型有的时候也可以被称为对象定义,因为他们描述的是一类对象所具有的属性和方法. 新对象是使用new操作符后跟一个构造函数来实现的,构造函数本身就是一个函数,只不过该函数时处于创建新对象的目的而定义的. ECMASc

java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream

管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream).管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上.如图所示: 1.管道输入流应该连接到管道输出流 ,输入流和输出流可以直接连接       2.使用多线程操作,结合线程进行操作.通常由某个线程从管道输入流中(PipedInputStream)对象读取.          并由其他线程将其写入到相应的端到输出流中.不能使用单线程

java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提

这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提: * 1.必须要有两个以上的线程,才需要同步. * 2.必须是多个线程使用同一个锁. * 3.必须保证同步中只能有一个线程在运行,锁加在哪一块代码 那么我们要思考的地方有:1.知道我们写的哪些是多线程代码 2.明确共享数据 3.明确多线程运行的代码中哪些语句是操作共享数据的.. 4.要确保使用同一个锁. 下面的代码:需求:两个存户分别往银行存钱,每次村100块,分三次存完. class bank{ private int

java基础知识回顾之---java String final类普通方法

辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      *      * 1,获取:     * 1.1 获取字符串中字符的个数(长度).     *         int length();     * 1.2 取字符串中的某一个字符,其中的参数index指的是字符串中序数.字符串的序数从0开始到length()-1 .     *       

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai