day14-jdbc案例(简单的curd&分页)

分页:
    将数据按照页码划分,提高用户的体验度.
分类:
    逻辑分页:一次性将内容加载到内存(list),获取自己想要的数据 sublist截取.缺点:维护起来麻烦
    物理分页:(经常使用) 每次只去查询当前页需要的数据 缺点:和数据库交互多
mysql: limit
    格式:
        select ..... limit m,n;
            [m+1,m+n]
    规律:
        查看第n也数据: limit (n-1)*pageSize,pageSize
每页中需要的数据:
    5个
    当前页内容 list 通过limit查询
    当前页 currPage 前台传递过来
    每页显示的条数 pagesize 固定
    总条数 totalCount count(*)查询
    总页数 Math.ceil(totalCount*1.0/pageSize)
封装成一个pagebean

在前台展示:
    1.当前页数据 遍历 pb.list
    2.展示首页 上一页... 然后给他们添加超链接
    3.判断是否是第一页 若是:不展示 首页和上一页
    4.判断是否是最后一页 若是:不展示 尾页和下一页
    5.将所有的页码展示
        forEach begin="1" end="${pb.totaoPage}"
    6.判断是否是当前页
        若是:则不加超链接
        若不是:加超链接

day15-AJAX&Jquery

原生ajax:
    1.获取核心对象 XMLHttpRequest
    2.编写回调函数
        xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState==4 && xmlhttp.status==200){
                alert(xmlhttp.responseText);
            }
        }
    3.open操作 设置访问的方式和路径
        xmlhttp.open("get","url");
    4.send操作
        xmlhttp.send("post的参数")
         若有参数需要设置一个头
            xmlhttp.setRequestHeader("content-type","form表单enctype属性")
////////////////////////
jquery中ajax
    掌握的:
        $.get(url,params,fn,type);
            type:"json"
        $.post(url,params,fn,type);

    理解:
        $.ajax(选项);
            选项:
                url:
                type:
                data:
                success:fn
                error:
                dataType:"json"
json:轻量级的数据格式
    格式1:
        {"key":value,"key1":value}
    格式2:
        [e1,e2]
jsonlib:
    1.导入jar包
    2.使用api
        JSONArray.formObject(数组或者list);
        JSONObject.formObject(bean或者map);
//////////////////////////////////////////
获取jquery对象:
    $("选择器") jQuery("选择器");
jquery对象>>dom对象
    方式1:
        jquery对象.get(index);

    方式2:
        jquery对象[index]
dom对象>>jquery对象
    $(dom对象)

页面载入
    $(function(){})

派发事件
    jquery对象.事件(function(){...});

选择器:
    #id值  .class值  标签名  [属性]  [属性='值']
    a b:后代    a>b:孩子  a+b:大弟弟  a~b:所有弟弟
    :first :last :odd :even :eq|gt|lt(index)
    :hidden
    :checked  :selected
属性和css:
    prop|attr
    css

文本 标签体
    val()
    html() text()

文档处理
    内部插入
        append prepend 
    外部插入
        after before
    删除
        remove
效果:
    隐藏|显示
        show() hide()
    淡入淡出
        fadeIn() fadeOut()
    滑入滑出
        slideDown() slideUp()

遍历
    jquery对象.each(function(){
    });

day16-Listener&Filter

listener(了解)
    监听器,监听javaweb中三个域对象
    监听对象的创建和销毁
        ServletContextListener
            在项目启动的时候加载配置文件
        ServletRequestListener
        HttpSessionListener
    监听对象的属性的变化
        ServletContextAttributeListener
        ServletRequestAttributeListener
        HttpSessionAttributeListener
    监听javabean在session中状态
        注意:让javabean自动感知在session中的状态,不需要在配置文件配置
        HttpSessionActivationListener(钝化和活化)
        HttpSessionBindingListener(绑定和解绑)
    编写:
        1.编写监听器
        2.编写配置文件
            <listener>
                <listener-class>
            </listener>
    ///////////////////////////////////
filter(★)
    过滤器,过滤请求和响应
    filter编写步骤:
        1.编写一个类 
            必须实现Filter接口
            必须重写方法
        2.编写配置文件
            注册filter
            绑定路径
    filter生命周期方法:
        doFilter(request,response,chain)
            使用步骤:
             1.强转
             2.编写自己的业务
             3.放行
    url-pattern的配置:
        完全匹配
        目录匹配
        后缀名匹配
    多个filter都匹配到的时候,执行时机是根据在xml中的filter-mapping顺序决定

    filter-mapping中的两个子标签
        servlet-name:过滤指定的servlet
        dispatcher:过滤那种方式过来的请求
            REQUEST:只过滤从浏览器发送过来的请求 (默认) 一旦显式的写出来disparcher 默认的就不起作用了
            FORWARD::只过滤请求转发过来的请求

////////////////////////////////////////////////////////////////////
注解:了解注解,可以使用注解
servlet3.0:体验下注解,完成文件上传
类加载器(了解)
动态代理(★):加强方法

day17-基础加强

注解:
    注释:给程序员看的
    注解:给jvm看的

    java中三个注解:
        @Override:声明该方法是从父类上继承过来的
        @SuppressWarnings:抑制警告 
        @Deprecated:声明该方法不赞成使用

    自定义注解:
        注解属性
            类型:
                基本类型
                string
                class
                annotation
                enum
                以上类型的一维数组
            若有属性,使用的时候必须有值

        元注解
            @Retention:声明注解保留到那个阶段
                SOURCE:
                CLASS:
                RUNTIME:
            @Target:声明注解作用在那个部分
                TYPE:
                METHOD:
                FILED:
    注解的格式:
        @interface 注解名{

        }
    ///////////////////////////////////
    ///////////////////////////////////
servlet3.0
    注解开发
        @WebServlet(urlPatterns="/demo1")
        @WebListener
        @WebFilter(urlPatterns="/demo2")

    文件上传
        浏览器端的要求:
            表单的提交方式必须是post
            表单必须有文件上传组件
            表单的enctype属性值为 multipart/form-data

        服务器获取的时候
            servlet3.0要求
                添加一个@MultipartConfig
                获取普通的组件  
                    request.getParameter(name属性的值)
                获取文件上传组件
                    Part part=request.getPart("name属性的值")

                    //获取文件的名称
                    Stirng sss=part.getHeader("content-disposition")
                    //然后截取才能获取文件名称
                    sss.substring(sss.indexof("filename=")+10,sss.length-1);

                    //获取文件流
                    part.getInputStream();

                    //删除临时文件
                    part.delete()

        上传时候需要注意的问题:
            文件重名 随机名称
            文件安全 重要的文件放在 web-inf meta-inf  服务器磁盘
            目录分离
                时间
                用户
                文件个数
                随机目录

//////////////////////////////////////////
动态代理(★)
    jdk中proxy
        前提:实现接口

        Proxy.newProxyInstance(被代理对象.getClass().getClassLoader(),
        被代理对象.getClass().getInterfaces(),new InvocationHandler(){
            invoke(代理对象,当前执行的方法,需要的参数){


            }
        });