HttpSession 简单操作使用

HttpSession

  1. 什么是HttpSession?
    HttpSession 是服务器端的技术,服务器会为每一个用户创建一个独立的Session。 属于回话的之一。
  2. Session原理:
    当用户第一次访问servlet时服务器会给该用户创建一个独立的Session,并且生成一个独立的SessionID,这个sessionId在响应浏览器时会被装进cookie中,同尔被保存到浏览器中,当用户下一次访问Servlet时,请求会携带cookie中的sessionId去访问 服务器根据这个Sessionid去查看是否有对应的session对象如果有就是用,没有就创建一个。
  3. session域和Context域request域大小

    创建session 获取session 保存session中数据

        //创建获取session对象
        HttpSession session = request.getSession();
        //保存session中数据
        session.setAttribute("userName", name);

## 测试session域中数据 ##

//测试获取session域中的数据
        HttpSession session = request.getSession();
        String  name = (String)session.getAttribute("userName");
        //响应到网页上
        response.getWriter().write(name);
        //打印session的ID
        System.out.println(session.getId());

购物车案例把书添加到购物车

1.创建书的实体类。

private String ID;
    private String name;
    public Book() {
        super();
    }
    public Book(String iD, String name) {
        super();
        ID = iD;
        this.name = name;
    }
    public String getID() {
        return ID;
    }
    public void setID(String iD) {
        ID = iD;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Book [ID=" + ID + ", name=" + name + "]";
    }

2.模拟假数据,在添加一个保存书的容器

//声明一个保存书的容器 
    private static HashMap<String, Book> books = new HashMap<>();
    //添加数据
    static {
        books.put("1", new Book("1","葵花宝典"));
        books.put("2", new Book("2","九阴真经"));
        books.put("3", new Book("3","九阳神功"));
        books.put("4", new Book("4","如来神掌"));
        books.put("5", new Book("5","辟邪剑法"));
    }
    // 获取集合的方法
    public static HashMap<String, Book>  getBooks() {


        return books;
    }
    // 按ID查找书的方法
    public static Book findBookById(String id) {
        return books.get(id);
    }

3.获取所有书籍,显示在网页上

request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        /*
         * 获取所有书
         * 遍历输出到网页
         * 需要遍历输出书名到网页 添加a标签
         * 点击书名知道点的是那本书
         */
        PrintWriter out=response.getWriter();
        HashMap<String, Book> books = BookUtil.getBooks();
        for (String key:books.keySet()) {
            Book book = books.get(key);
            request.getContextPath();
            //响应到网址
            out.write("<a href='"+request.getContextPath()+"/AddBook?id="+book.getID()+"'>"+book.getName()+"</a><br/>");
        }
        //添加查看购物车的连接
        out.write("<a href='"+request.getContextPath()+"/ShowCar'>查看购物信息</a>");
        //修改设置session的有效时间
        HttpSession session = request.getSession();
        session.setMaxInactiveInterval(10);

4.利用session获取书的id 把书添加到容器中

//获取参数
        String id = request.getParameter("id");
        Book book = BookUtil.findBookById(id);
        //创建一个容器(相当于购物车 保存买的书)
        //两种情况 一个已经存过二没存过
        HttpSession session = request.getSession();
        ArrayList<Book> car = (ArrayList<Book>)session.getAttribute("car");
        if (car == null) {
            //相当于第一次访问创建容器
            car = new ArrayList<>();
        }
        // 把书添加到容器中 
        car.add(book);
        //然后把这个容器添加到session中
        session.setAttribute("car", car);
  1. 在页面获取添加到购物车的书籍通过session实现
PrintWriter out = response.getWriter();
        // 获取session对象
        HttpSession session = request.getSession();
        // 判断session中数据是否为空
        ArrayList<Book> car = (ArrayList<Book>) session.getAttribute("car");

        if (car != null) {
            // 遍历输出
            for (Book book : car) {
                out.write(book + "<br/>");
            }
        } else {
            out.write("没有购物信息");
            // 2秒调回商品显示页面
            response.setHeader("refresh", "3;url=" + request.getContextPath() + "/ShowAllBooks");
        }

验证码

1.手写不依赖jar包

int width = 110;
        int height = 25;
        // 在内存中创建一个图像对象
        //创建一个画布
        BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        // 创建一个画笔
        Graphics g = img.getGraphics();

        // 给图片添加背景色
        g.setColor(Color.PINK);// 设置一个颜色
        g.fillRect(1, 1, width - 2, height - 2);// 填充颜色

        // 给边框一个色
        g.setColor(Color.RED);
        g.drawRect(0, 0, width - 1, height - 1);// 设置边框的显示坐标

        // 设置文本样式
        g.setColor(Color.BLUE);
        g.setFont(new Font("宋体", Font.BOLD | Font.ITALIC, 15));

        // 给图片添加文本
        Random rand = new Random();
        int position = 20;
        for (int i = 0; i < 4; i++) {
            g.drawString(rand.nextInt(10) + "", position, 20);// 给图片填充文本
            position += 20;
        }

        // 添加9条干扰线
        for (int i = 0; i < 9; i++) {
            g.drawLine(rand.nextInt(width), rand.nextInt(height), rand.nextInt(width), rand.nextInt(height));
        }
        // 将图片对象以流的方式输出的客户端
        ImageIO.write(img, "jpg", response.getOutputStream());

2.使用jar包
添加 ValidateCode.jar

//使用jar包生成验证码
        ValidateCode vCode = new ValidateCode(200, 30, 4, 12);
        //获取生成的验证码字符串
        String  code = vCode.getCode();
        //传值方式 1. 拼接网址字符串  2.域对象
        request.getSession().setAttribute("wcode", code);
        System.out.println(code);
        //写到网页上通过响应字节流写会网页
        vCode.write(response.getOutputStream());

实现登录带有验证码

1.先创建一个验证码

//使用jar包生成验证码
        ValidateCode vCode = new ValidateCode(200, 30, 4, 12);
        //获取生成的验证码字符串
        String  code = vCode.getCode();
        //传值方式 1. 拼接网址字符串  2.域对象
        request.getSession().setAttribute("wcode", code);
        System.out.println(code);
        //写到网页上通过响应字节流写会网页
        vCode.write(response.getOutputStream());

2.逻辑

// 获取请求的参数(表单提交的数据)
        String name = request.getParameter("userName");
        String pwd = request.getParameter("pwd");
        String code = request.getParameter("code");
        // 获取域中的session
        HttpSession session = request.getSession();
        String wcode = (String) session.getAttribute("wcode");
        //获取字节流
        PrintWriter out = response.getWriter();
        if (name.equals("admin") && pwd.equals("123")) {
            // 判断验证码(忽略大小写)
            if(!code.equalsIgnoreCase(wcode)) {
                //提示用户 验证码错误
                //使用request域保存验证码错误的信息
                request.setAttribute("msg", "瞎吧,你输错了验证码");
                request.getRequestDispatcher("/1.jsp").forward(request, response);
            }else {

                request.getRequestDispatcher("/2.jsp").forward(request, response);
            }
        } else {
            // 提示失败 3 秒会登陆页面
            response.setHeader("refresh", "3;url=" + request.getContextPath() + "/1.jsp");
        }

3.jsp中代码这里写图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值