9.25 [JavaWeb] 会话技术(Session&Cookie).简单分页查询

Session

session,在服务器端保存用户多次请求的数据。(注意:session技术,还是依赖cookie技术)

1 、session是服务器开辟的一个用来存储数据的空间

2 、 服务器为每个浏览器单独开辟一个session

3 、 服务器根据浏览器发送过来的cookie,来确认当前浏览器使用哪个session

——在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

Session生命周期

Session对象的创建时间:

当第一次调用request.getSession()的时候创建session容器.

如果第一次访问jsp页面,也会创建session容器

Session的销毁:

1、 (自动销毁)Session在服务器的存活时间。Session对象在服务器内部有默认的存活的时间。一般默认是30分钟。如果在30分钟内,用户没有再对当前这个服务器中的资源进行任何的访问操作,这时只要时间到达30分钟,服务器会自动的销毁这个session。

2、在程序执行中,手动销毁session容器, 使用 session.invalidate()

3、 不正常关闭服务器。直接点击控制台的红点,强制关闭tomcat

如果是正常关闭服务器,这时服务器内部会使用IO流中的序列化技术把这个Session对象保存在tomcat/work目录下面。

Cookie

Cookie是在浏览器端保存用户请求的信息。

创建一个 cookie,cookie 是 servlet 发送到 Web 浏览器的少量信息,这些信息由浏览器保存,然后发送回服务器。cookie 的值可以唯一地标识客户端,因此 cookie 常用于会话管理。

一个 cookie 拥有一个名称、一个值和一些可选属性,比如注释、路径和域限定符、最大生存时间和版本号。一些 Web 浏览器在处理可选属性方面存在 bug,因此有节制地使用这些属性可提高 servlet 的互操作性。

servlet 通过使用 HttpServletResponse#addCookie 方法将 cookie 发送到浏览器,该方法将字段添加到 HTTP 响应头,以便一次一个地将 cookie 发送到浏览器。浏览器应该支持每台 Web 服务器有 20 个 cookie,总共有 300 个 cookie,并且可能将每个 cookie 的大小限定为 4 KB。

浏览器通过向 HTTP 请求头添加字段将 cookie 返回给 servlet。可使用 HttpServletRequest#getCookies 方法从请求中获取 cookie。一些 cookie 可能有相同的名称,但却有不同的路径属性。

cookie 影响使用它们的 Web 页面的缓存。
1、创建Cookie,以键值对的方式存储

 	Cookie cookie1 = new Cookie("admin", "admin");//创建Cookie
    Cookie cookie2 = new Cookie("password", "password");
    cookie1.setMaxAge(60 * 60);//设置Cookie生命周期,以秒为单位
    cookie2.setMaxAge(60 * 60);
    response.addCookie(cookie1);//使用响应存储Cookie
    response.addCookie(cookie2);

2、可以获取全部Cookie的值,根据需求需存取

<%
    String password = null;
    String admin = null;
    Cookie[] cookies = request.getCookies();
    if (cookies != null && cookies.length > 0) {
        for (int i = 0; i < cookies.length; i++) {
            if ("admin".equals(cookies[i].getName())) {//判断是否为需要的值
                admin = cookies[i].getValue();
            }
            if ("password".equals(cookies[i].getName())) {//判断是否为需要的值
                password = cookies[i].getValue();
            }
        }
    }

%>

Cookie的生命周期

Cookie存储在浏览器端,如果不进行删除,将会导致数据量越来越大。因此Cookie是有生命周期的,一定时间后Cookie会自动删除。Cookie可以通过setMaxAge()设置生存时间,如果不设置,将会在浏览器关闭的时候自动删除。将生命周期设置为0,将会立即删除Cookie

Cookie路径设置

Cookie路径可以通过setPath方法设置当前目录和旗下子目录servlet都获取cookie,一般setPath(“/”),表示当前项目所有目录都可以获取cookie

cookie和session的区别

1、cookie数据存放在客户的浏览器上,session数据存放在服务器上;

2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗;

考虑到安全应当使用session

3、session会在一定时间内保存在服务器上,当访问量增加时,会比较占用服务器的性能;

考虑到减轻服务器性能方面,应当使用cookie

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie;

5、将登录信息等重要信息存放在cookie,其他信息如果需要保留,可以放在cookie中;

简单分页查询

分页的五大参数 :

1.当前页
2.页量(每次显示数据)
3.总记录数
4.总页数
5. 当前页的集合 封装成一个工具类

public class PageUtils<T> {
    //当前页
    private Integer currentPageNo;
    //表示页量
    private Integer PageSize;
    //表示总记录数
    private Integer totalPageCount;
    //总页数
    private Integer totalPageSize;
    //当前页数据
    private List<T> uList;
    }

***记得给上GetterAndSetter方法 ***

//获取当前页与页量
        String currentPageNoStr = request.getParameter("currentPageNo");
        String pageSizeStr = request.getParameter("PageSize");
        Integer currentPageNo = null;
        Integer pageSize = null;
        //对页量的处理
        if (pageSizeStr != null && pageSizeStr != "") {
            pageSize = Integer.parseInt(pageSizeStr);
            //小于等于1的情况
        } else {
            pageSize = 10;
        }
        //总记录数
        Integer totalPageCount = loginService.selectCount();
        //总页量
        Integer totalPageSize = totalPageCount % pageSize == 0 ? totalPageCount / pageSize : totalPageCount / pageSize + 1;

        //做判断  对当前页的处理
        if (currentPageNoStr != null && currentPageNoStr != "") {
            currentPageNo = Integer.parseInt(currentPageNoStr);
            if (currentPageNo <= 1) {
                currentPageNo = 1;
            }
            //大于总页数
            if (currentPageNo >= totalPageSize) {
                currentPageNo = currentPageNo;
            }
        } else {
            currentPageNo = 1;
        }
        //当前页的数据
        List<Login> loginList = loginService.selectAll(currentPageNo, pageSize);
        //实例化工具类
        PageUtils<Login> pageUtils = new PageUtils<>();
        //给工具类的五个参数赋值
        pageUtils.setCurrentPageNo(currentPageNo);
        pageUtils.setPageSize(pageSize);
        pageUtils.setTotalPageCount(totalPageCount);
        pageUtils.setTotalPageSize(totalPageSize);
        pageUtils.setuList(loginList);
        //把工具类放到作用域
        request.setAttribute("pageUtils", pageUtils);
        //转发到界面
        request.getRequestDispatcher("index.jsp").forward(request, response);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值