目标:
    1、客户管理的展示(查询数据库之后)
    2、登录校验—Md5
    3、客户的新增(BeanUtils)
    问题:
    1、展示页面错乱—少导入jstl的jar
    2、页面乱码— 没有写jsp的头
    3、后台包“dataSource”找不到—web项目,加载driud.properties的时候跟java项目是不一样的。

    规律:等我有时间了,我就干什么,真正有时间了,大把的时间,你其实什么都不干。

    一、项目编程的三层架构(约定俗称的东西)
    controller 层 —> 页面数据的获取以及返回 —> Servlet
    service 层 —> 编写业务(具体的需求)逻辑 —> 自己编写的service类
    规矩:一般任何业务,都需要写接口
    dao层 —> 数据的增删改查 —> JdbcTemlpate
    项目第二天 - 图1
    二、MD5加密
    md5加密实现方式有很多,我们学习的是spring框架给我们写好的一个加密方法
    md5加密是不可逆的: 可以通过明文推导出密文,无法通过密文推导明文
    相对比较安全的。

    1. // 给我一个明文密码,我返回给你一个密文密码
    2. public static String md5(String password){
    3. byte[] bytes = password.getBytes();
    4. String miwen= DigestUtils.md5DigestAsHex(bytes);
    5. return miwen;
    6. }

    如果你所在项目没有使用spring框架,我们也犯不着为了一个工具导入spring的jar包,可以去网络上找一个md5的源码类,写在项目中的utils包下。
    md5是无法根据密文知道明文的,但是可以通过对撞的方式破解。
    https://www.cmd5.com/ 可以进行在线的加密与解密。
    通过穷举字符组合的方式,创建了明文密文对应查询数据库,创建的记录约90万亿条。
    如果我们使用md5的话,最好使用比较复杂的字符串当做密码,不要使用简单的字符串进行密码设置。

    一般的加密方式会根据强大的数据库记录查询出明文,所以我们编写一个方法用于增强我们的加密的密文:

    public static String md5Strong(String password){
            byte[] bytes = password.getBytes();
            String miwen= DigestUtils.md5DigestAsHex(bytes);
            //进行二次加密
            String str = miwen.substring(9,19);
            String salt = "laoyan";//盐
            miwen = DigestUtils.md5DigestAsHex((miwen+str+salt).getBytes());
            return miwen;
        }
    

    三、在jsp页面动态获取虚拟路径名(项目名)
    牢牢地记住 ${pageContext.request.contextPath}
    在servlet中,String path= req.getContextPath(); 获取虚拟路径名

    四、web项目为什么难?
    不是代码逻辑多复杂,而是路径很长
    jsp—>servlet->service—>dao—>jdbcTemplate—>数据库
    页面跳转来,跳转去。

    作业:
    随堂练习全部搞定
    批量删除 编辑 查询 等