A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© software0210 初级黑马   /  2019-9-6 16:25  /  1036 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

分页
        前台
                当前页
                每页显示数
        后台
                PageBean
                        当前页                                前台传递
                        每页显示数                        前台传递
                        总个数                                数据库查询                SELECT COUNT(*) FROM 表 WHERE 条件
                        数据                                数据库查询                SELECT * FROM 表 WHERE 条件 LIMIT index,count
                                                                                                                                                        index        ->   (当前页-1)*每页显示数
                                                                                                                                                        count        ->          每页显示数
                        总页数                                手动计算                总个数%每页显示数 == 0 ? 总个数/每页显示数 : 总个数/每页显示数+1
                       
        前台页面
                1.数据显示
                2.页码的遍历
                3.当前页表示
                4.上一页/下一页
                6.总条数/总页数
               
        动态sql
                根据条件的不同.自动生成对应sql语句
       
########################################################################################################################

过滤器
        对访问进行增强(request,response)
       
       
入门
        xml
                1.创建类实现Filter接口
                2.实现doFilter()方法,在改方法中,调用filterChain.doFilter(request,response)放行
                3.在web.xml中进行配置
                        <filter
                                <filter-name
                                <filter-class
                        <filter-mapping
                                <filter-name
                                <url-pattern
        注解
                1.创建类实现Filter接口
                2.实现doFilter()方法,在改方法中,调用filterChain.doFilter(request,response)放行
                3.在类上加@WebFilter("/*")
               
               
过滤器拦截路径最常的:
        /user/*
        /*
        *.do
       
拦截方式
        **REQUEST[默认]                        浏览器访问(重定向)
        **FORWARD                                        请求转发
        **ASYNC                                        异步请求
        INCLUDE
        ERROR
       
       
过滤器链
        执行顺序
                ABCD目标资源DCBA
        排列规则
                注解
                        按照字母顺序
                xml
                        按先后顺序
       
       
动态代理                ->                 JDK       

注意:        必须实现接口

        1.目标对象
        2.接口 代理对象 = (接口)Proxy.newProxyInstance(目标对象.getClass().getClassLoader(),目标对象.getClass().getInterfaces(),new InvocationHandler(){
                                                        public Obejct invoke(Object proxy,Method method,Object[] args){
                                                                Object result = null;
                                                                if(method.getName().equals("要被增强的方法")){
                                                                        //需要被增强
                                                                        //执行方法之前增强的逻辑
                                                                        result = method.invoke(目标对象,args);
                                                                        //执行方法之后增强的逻辑
                                                                }else{
                                                                        result = method.invoke(目标对象,args);
                                                                }
                                                                return result;
                                                        }
                                          });
        3.代理对象.目标方法进行增强的逻辑执行
       
       
ServletContextListener
        监听ServletContext的创建(tomcat服务器启动)
        监听ServletContext的销毁(tomcat服务器关闭)

1..回顾
        a.列表显示
        b.登录
        c.添加
        d.删除
        e.修改(**)
       
        三层架构
                web
                        1.接收前台数据(request.getParamter())
                        2.把数据进行封装(BeanUtils)
                        3.把数据传给service        (loginUser = loginService.login(u))
                        4.对service返回的结果进行判断        if(loginUser == null)
                        5.返回页面
                                response.getWriter().write()
                                response.sendRedirect()
                                request.getRequestDispatcher().forward()
                service
                        1.把数据传给dao(loginUser = loginDao.login(u))
                        2.接收结果返回给web(return loginUser)
                dao
                        去数据库执行操作(CRUD)
                        把结果返回service
                       
#########################################################################                       
2..今天内容
        选中删除

        ******
        分页
        ******
       
                        分页?
                                减轻服务器压力
                                提升用户体验
                               
                        分页实现
                                前台
                                        传递给后台
                                                每页显示数
                                                当前页码
                                        前台页面展示
                                                数据        EL+JSTL
                                                页码        JSTL+EL+总页数
                                                总页数       
                                                总条数
                                                当前页        c:if
                                       
                                后台
                                        后台把数据返回给前台
                                                1.数据->List
                                                2.总记录数
                                                3.总页数
                                                4.当前页码
                                                5.每页显示数
                                               
                                        把目标数据进行封装->PageBean
                                       
                                       
                               
                        1.前台传递给后台   每页显示数,当前页码
                        2.后台       
                                接收参数 -> 查到对应的数据返回给前台
                                封装PageBean
                                如何封装
                                        1.数据->List                数据库查询
                                                SELECT * FROM 表 WHERE 条件 LIMIT index,count
                                                        index        ->   开始查询的索引
                                                        count        ->         每页显示的条数                ->每页显示数(已经存在)
                                                                index的计算方式
                                                                        (当前页-1)*每页显示数               
                                               
                                        2.总记录数                        数据库查询
                                        3.总页数                        自己计算
                                                总记录数%每页显示数 == 0 ? 总记录数/每页显示数 : 总记录数/每页显示数+1
                                                       
                                        4.当前页码                        前台传递的参数
                                        5.每页显示数                前台传递的参数
                                把pageBean对象存到request域中,请求转发显示       
               
       
       
       
        复杂分页(了解)
       
                动态sql(掌握!!)
                        根据条件的不同,自由的拼接sql语句

回顾
        ServletContext
                作用:
                        1.全局的域对象
                                context.setAttribute()
                                context.getAttribute()
                                context.removeAttribute()
                        2.获取文件的服务器绝对路径
                                web目录
                                        context.getRealPath("/文件路径")
                                WEB-INF目录
                                        context.getRealPath("/WEB-INF/文件路径")
                                src目录
                                        context.getRealPath("/WEB-INF/classes/文件路径")
                        3.获取文件的mime类型
                                context.getMimeType("文件")
                               
                                        text/html
                                        application/json
                下载案例(二头一流)
                        1.获取文件名称                        request.getParameter("name")
                        2.获取文件的服务器路径       
                        3.加载文件,加载到FileInputStream
                        4.获取文件的mime类型
                        5.设置Content-Type response.setContentType()
                        6.判断请求头User-Agent,判断是否是火狐或者谷歌
                        7.火狐用BASE64,谷歌用URL编码对文件名进行编码
                        8.设置Content-Disposition头, attachment;filename=文件名
                        9.用服务器的输出流将文件的输入流对拷到浏览器
        会话
                概念:多次请求
                cookie(浏览器端)和session(服务器端)
                cookie的原理
                        1.第一次访问目标服务器,服务器创建cookie对象
                        2.服务器将数据回写的时候会通过SET-COOKIE响应头把cookie传到浏览器
                        3.浏览器会保存该cookie,下次访问目标服务器时会通过COOKIE请求头将cookie发送到服务器
                        4.服务器接收cookie实现业务逻辑
                cookie的特点
                        1.cookie保存在浏览器,不安全
                        2.cookie最大4K,最多20个
                        3.cookie默认关闭浏览器会直接销毁
                        4.cookie可以一次发送多个
                        5.cookie在tomcat8开始支持中文,如果必须使用,在出现中文/空格/特殊字符的时候,可以对内容进行URL编码再进行发送
                        6.cookie支持作用范围(具体访问路径)
                        7.cookie可以在服务器端对其进行销毁也可以持久化
                        8.cookie如果本地浏览器清除缓存后,cookie就不存在
                       
                API
                        创建
                                Cookie c = new Cookie("key","value")
                                c.setMaxAge()
                                c.setPath()
                                c.setDomain()
                                c.setValue()
                                response.addCookie(c)
                        获取
                                Cookie[] cks = request.getCookies()
                                遍历
                                c.getName()
                                c.getValue()
                               
#############################################################################################
        JSP
                动态资源
                原理
                        jsp本质就是一个servlet
                注意事项
                        jsp只支持get/post/head这3种请求
                脚本
                        <% %>        代码
                        <%! %>        全局,有线程安全问题
                        <%= %>        页面显示
                注释
                        html        <!-- -->
                        css                /* */
                        js                // 或者 /* */
                        jsp                <%-- --%>
                9大内置对象(背下来)
                        application        -> ServletContext
                        session                -> HttpSession
                        request                -> HttpServletRequest
                        pageContext        -> PageContext
                        response        -> HttpServletResponse
                        out                        -> JspWriter
                        config                -> ServletConfig
                        page                -> Object(实际时当前servlet的对象!!!!)
                        exception        -> Throwable
                       
                jsp对应的servlet在浏览器第一次访问时创建
               
                       
       
       
        SESSION(全部都是重点)
                        HttpSession
       
                        作用
                                作为域对象进行数据共享
                                        setAttribute()
                                        getAttribute()
                                        removeAttribute()
                        api
                                创建
                                        request.getSession()
                                       
                        注意:
                                request.getSession()
                                        判断是否存在session,如果不存在则创建,存在则获取
                                       
                        原理
                                session是基于cookie
                                cookie数据在浏览器,不安全,类型只能是字符串
                                session数据在服务器,安全,类型是Object
                               
                                1.第一次访问目标服务器,,服务器调用request.getSession()创建session对象
                                2.session对象内部有一个属性id,此id唯一,服务器在返回数据的时候,会创建一个JSESSIONID的cookie,cookie的格式   JSESSIONID=session对象的id
                                3.浏览器接收cookie,JSESSIONID,保存
                                4.下次访问服务器携带JSESSIONID的cookie到服务器,服务器request.getSession()获取session,根据JSESSIONID的cookie的value值去和session对象的id值去比较
                                5.如果服务器的session对象中的id值和cookie的value值一样,则是操作同一个session\
                               
                        session的特点
                                1.浏览器一旦关闭,会导致cookie被销毁,所以session会被重新创建
                                2.session实现持久化 -> cookie持久化
                                        c = new Cookie("JSESSIONID",session.getId())
                                        c.setMaxAge(+)
                                        response.addCookie(c)
                                3.session钝化和活化
                                        tomcat实现
                                4.session销毁
                                        a.服务器非正常关闭
                                        b.默认销毁时间30分钟
                                        c.自杀  session.invilidate()
                               
                               
                               

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马