Session详解,学习 Session对象一篇文章就够了

news2025/2/26 19:05:27

目录

1 Session概述

2 Session原理

3 Session使用

3.1 获取Session

3.2 Session保存数据

3.3 Session获取数据

3.4 Session移除数据

4 Session与Request应用区别

4.1 Session和request存储数据

4.2 获取session和request中的值

4.3 session和request区别效果

5 Session的声明周期

5.1 Session有效时间设置

5.2 session销毁

.6 浏览器禁用Cookie解决方案(了解)

6.1 浏览器禁用Cookie的后果

6.2 URL重写

6.3 实现URL重写

7 Session实战权限验证

7.1 创建管理员表manager并添加数据

7.2 创建Web项目

7.3 基础环境搭建

7.4 登录页面

7.5 LoginMgrController

7.6 ShowAllManagerController

7.7 ShowAllManagerJsp

8 Session实战保存验证码

8.1 创建验证码

8.2 登录页面

8.3 LoginMgrController

8.4 ShowAllManagerController

今天的分享就到此结束了

创作不易点赞评论互关三连


1 Session概述

(1)Session用于记录用户的状态。Session指的是一段时间内,单个客户端与Web服务器的一连串相关的交互过程。

(2)在一个Session中,客户可能会多次请求访问同一个资源,也有可能请求访问各种不同的服务器资源。

(3)Session是由服务器端创建的

2 Session原理

(1)Session会为每一次会话分配一个Session对象

(2)同一个浏览器发起的多次请求,同属于一次会话(Session)

(3)首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端

3 Session使用

Session作用域:拥有存储数据的空间,作用范围是一次会话有效

  • 一次会话是使用同一浏览器发送的多次请求。一旦浏览器关闭,则结束会话

  • 可以将数据存入Session中,在一次会话的任意位置进行获取

  • 可传递任何数据(基本数据类型、对象、集合、数组)

3.1 获取Session

Session是服务器端自动创建的,通过request对象获取

package com.cxyzxc.www.servlet01;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "SessionServlet01", value = "/SessionServlet01")
public class SessionServlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求参数的编码格式,这种方式对get请求方式无效
        request.setCharacterEncoding("UTF-8");
        //设置响应编码格式为UTF-8
        response.setContentType("text/html;charset=UTF-8");

        //获取Session对象,首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端
        HttpSession session = request.getSession();
        System.out.println("ID:" + session.getId());//唯一标记

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

3.2 Session保存数据

使用setArrtibute(属性名,Object)保存数据到session中

package com.cxyzxc.www.servlet01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "SessionServlet02", value = "/SessionServlet02")
public class SessionServlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求参数的编码格式,这种方式对get请求方式无效
        request.setCharacterEncoding("UTF-8");
        //设置响应编码格式为UTF-8
        response.setContentType("text/html;charset=UTF-8");

        //获取Session对象,首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端
        HttpSession session = request.getSession();

        //将数据存储以键值对的形式到session对象中,可传递任何数据(基本数据类型、对象、集合、数组)
        session.setAttribute("username","张三");

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

 

3.3 Session获取数据

(1)使用getAttribute("属性名");获取session中数据。

(2)先访问SessionServlet02将数据存储到session对象中,然后通过GetSessionValueServlet01请求获取session中的数据

package com.cxyzxc.www.servlet01;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "GetSessionValueServlet01", value = "/GetSessionValueServlet01")
public class GetSessionValueServlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求参数的编码格式,这种方式对get请求方式无效
        request.setCharacterEncoding("UTF-8");
        //设置响应编码格式为UTF-8
        response.setContentType("text/html;charset=UTF-8");

        //获取Session对象
        HttpSession session = request.getSession();
        //获取session对象中的值,获取的值是Object类型,转换为其对应的类型
        String username = (String) session.getAttribute("username");
        System.out.println("session对象中存储的username值:" + username);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

3.4 Session移除数据

(1)使用removeAttribute("属性名");从session中删除数据

(2)向请求SessionServlet02向session对象中存储数据,然后访问GetSessionValueServlet01可以获取session对象中的值,再访问SessionServlet03移除session对象中存储的数据,最后访问GetSessionValueServlet01获取session对象中的值为null

package com.cxyzxc.www.servlet01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "SessionServlet03", value = "/SessionServlet03")
public class SessionServlet03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求参数的编码格式,这种方式对get请求方式无效
        request.setCharacterEncoding("UTF-8");
        //设置响应编码格式为UTF-8
        response.setContentType("text/html;charset=UTF-8");

        //获取Session对象,首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端
        HttpSession session = request.getSession();

        //通过键移除session作用域中的值
        session.removeAttribute("username");

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

 

4 Session与Request应用区别

(1)request是一次请求有效,请求改变,则request改变

(2)session是一次会话有效,浏览器改变,则session改变

4.1 Session和request存储数据

package com.cxyzxc.www.servlet01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "SessionServlet04", value = "/SessionServlet04")
public class SessionServlet04 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求参数的编码格式,这种方式对get请求方式无效
        request.setCharacterEncoding("UTF-8");
        //设置响应编码格式为UTF-8
        response.setContentType("text/html;charset=UTF-8");

        //获取Session对象
        HttpSession session = request.getSession();

        //使用session存储数据
        session.setAttribute("username","zhangsan");
        //使用request存储数据
        request.setAttribute("password","123456");

        //重定向
        response.sendRedirect("/webProject10_war_exploded/GetSessionValueServlet01");

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

 

4.2 获取session和request中的值

package com.cxyzxc.www.servlet01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "GetSessionValueServlet01", value = "/GetSessionValueServlet01")
public class GetSessionAndRequestValueServlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求参数的编码格式,这种方式对get请求方式无效
        request.setCharacterEncoding("UTF-8");
        //设置响应编码格式为UTF-8
        response.setContentType("text/html;charset=UTF-8");

        //获取Session对象
        HttpSession session = request.getSession();
        //获取session对象中的值,获取的值是Object类型,转换为其对应的类型
        String username = (String) session.getAttribute("username");
        //获取request对象中的值,获取的值是Object类型,转换为其对应的类型
        String password = (String) request.getAttribute("password");

        System.out.println("session对象中存储的username值:" + username);
        System.out.println("request对象中存储的password值:" + password);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

4.3 session和request区别效果

5 Session的声明周期

  1. 开始

    第一次使用到Session的请求产生,则创建Session

  2. 结束

    • 浏览器关闭,则失效

    • Session超时,则失效

      session.setMaxInactiveInterval(seconds);//设置最大有效时间(单位:秒)

    • 手工销毁,则失效

      session.invalidate();//登录退出,销毁

5.1 Session有效时间设置

SessionServlet05类设置session有效期为20秒,先通过请求SessionServlet05类将session存储在,然后在20秒内第一次在GetSessionValueServlet02获取sessionID值,与SessionServlet05类中输出的id值一致,过20秒后在GetSessionValueServlet02类中输出的sessionID值不一致了

 

package com.cxyzxc.www.servlet01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "SessionServlet05", value = "/SessionServlet05")
public class SessionServlet05 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求参数的编码格式,这种方式对get请求方式无效
        request.setCharacterEncoding("UTF-8");
        //设置响应编码格式为UTF-8
        response.setContentType("text/html;charset=UTF-8");

        //获取Session对象,首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端
        HttpSession session = request.getSession();

        //设置session有效期,时间单位为秒
        session.setMaxInactiveInterval(20);

        //输出sessionid值
        System.out.println("SessionServlet05类中输出ID:"+session.getId());

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

5.2 session销毁

先使用GetSessionValueServlet03类获取session的id值,然后使用GetSessionValueServlet04类获取session的id值,两个类获取的id值一致,在GetSessionValueServlet04类中输出id值后销毁了session,然后再在GetSessionValueServlet03类中获取id值,就不一致了,就是服务器新建的session对象了

5.2.1 GetSessionValueServlet03类

package com.cxyzxc.www.servlet01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "GetSessionValueServlet03", value = "/GetSessionValueServlet03")
public class GetSessionValueServlet03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求参数的编码格式,这种方式对get请求方式无效
        request.setCharacterEncoding("UTF-8");
        //设置响应编码格式为UTF-8
        response.setContentType("text/html;charset=UTF-8");

        //获取Session对象
        HttpSession session = request.getSession();

        //输出sessionid值
        System.out.println("GetSessionValueServlet03类中输出ID:"+session.getId());

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

 

5.2.2 GetSessionValueServlet04类

package com.cxyzxc.www.servlet01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "GetSessionValueServlet04", value = "/GetSessionValueServlet04")
public class GetSessionValueServlet04 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求参数的编码格式,这种方式对get请求方式无效
        request.setCharacterEncoding("UTF-8");
        //设置响应编码格式为UTF-8
        response.setContentType("text/html;charset=UTF-8");

        //获取Session对象
        HttpSession session = request.getSession();

        //输出sessionid值
        System.out.println("GetSessionValueServlet04类中输出ID:"+session.getId());

        //销毁session
        session.invalidate();

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

.6 浏览器禁用Cookie解决方案(了解)

6.1 浏览器禁用Cookie的后果

服务器在默认情况下,会使用Cookie的方式将sessionID发送给浏览器,如果用户禁止Cookie,则sessionID不会被浏览器保存,此时,服务器可以使用URL重写这样的方式来发送sessionID

 

多次请求GetSessionValueServlet05类输出的session的id值都不相同,并且在网站的Cookie对象中没有session的id值存在

 

6.2 URL重写

浏览器在访问服务器上的某个地址时,不再使用原来的那个地址,而是使用经过改写的地址(即在原来的地址后面加上了sessionID)

6.3 实现URL重写

response.encodeRedirectURL(String url)生成重写的URL

6.3.1 重写URL

package com.cxyzxc.www.servlet01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "GetSessionValueServlet06", value = "/GetSessionValueServlet06")
public class GetSessionValueServlet06 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求参数的编码格式,这种方式对get请求方式无效
        request.setCharacterEncoding("UTF-8");
        //设置响应编码格式为UTF-8
        response.setContentType("text/html;charset=UTF-8");

        //获取Session对象
        HttpSession session = request.getSession();

        //输出sessionid值
        System.out.println("GetSessionValueServlet06类中输出ID:"+session.getId());

        //重写URL追加session值
        String newURL = response.encodeURL("/webProject10_war_exploded/GetSessionValueServlet07");
        System.out.println("重写后的URL:"+newURL);
        //重定向
        response.sendRedirect(newURL);

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

 

6.3.1 获取session

package com.cxyzxc.www.servlet01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "GetSessionValueServlet07", value = "/GetSessionValueServlet07")
public class GetSessionValueServlet07 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求参数的编码格式,这种方式对get请求方式无效
        request.setCharacterEncoding("UTF-8");
        //设置响应编码格式为UTF-8
        response.setContentType("text/html;charset=UTF-8");

        //获取Session对象
        HttpSession session = request.getSession();

        //输出sessionid值
        System.out.println("GetSessionValueServlet07类中输出ID:"+session.getId());


    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

7 Session实战权限验证

 

7.1 创建管理员表manager并添加数据

 

7.2 创建Web项目

创建Web项目,导入相关jar包

  • commons-dbutils-1.7.jar

  • druid-1.1.5.jar

  • mysql-connector-java-5.1.25-bin.jar

  • servlet-api.jar

7.3 基础环境搭建

在项目下创建包目录结构如下

  • com.cxyzxc.www.controller包:调用业务逻辑Servlet

  • com.cxyzxc.www.dao包:数据访问层接口

  • com.cxyzxc.www.dao.impl包:数据访问层接口实现类

  • com.cxyzxc.www.entity包:实体类

  • com.cxyzxc.www.jsp包:打印显示页面Servlet

  • com.cxyzxc.www.service包:业务逻辑层接口

  • com.cxyzxc.www.service.impl包:业务逻辑层接口实现类

  • com.cxyzxc.www.utils包:工具类

  • database.properties:数据库连接及连接池配置文件

7.4 登录页面

7.4.1 login.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>管理员登录页面</title>
        <link type="text/css" rel="stylesheet" href="css/login.css"/>
    </head>

    <body>
        <div>
            <form action="LoginMgrController" method="post">
                <p>
                    账号:<input type="text" name="username"/>
                </p>
                <p>
                    密码:<input type="password" name="password"/>
                </p>
                <p>
                    <input type="submit" value="登录"/>
                </p>
            </form>
        </div>
    </body>
</html>

 

7.4.2 login.css

* {
    margin: 0;
    padding: 0;
}

div {
    width: 400px;
    background-color: #ccc;
    margin: 30px auto;
    padding-top: 30px;
    text-align: center;
}

p {
    margin-top: 10px;
}

input {
    outline: none;
}

7.5 LoginMgrController

package com.cxyzxc.www.controller;

import com.cxyzxc.www.entity.Manager;
import com.cxyzxc.www.service.ManagerService;
import com.cxyzxc.www.service.impl.ManagerServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "LoginMgrController", value = "/LoginMgrController")
public class LoginMgrController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1、处理乱码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        //2、收参(获取客户端发送过来的请求数据)
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        //3、调用业务方法
        ManagerService managerService = new ManagerServiceImpl();
        Manager manager = managerService.login(username, password);


        //4、处理结果,根据结果做不同的跳转
        if (manager != null) {//manager不为null,说明账号和密码正确,登录成功
            //将获取的账号和密码信息存储在session中
            HttpSession session = request.getSession();
            session.setAttribute("manager", manager);
            //跳转到显示所有管理员信息的Servlet
            response.sendRedirect("/managerProject01_war_exploded/ShowAllManagerController");
        } else {//manager为null。说明账号或者密码错误,登录失败
            response.sendRedirect("/managerProject01_war_exploded/login.html");
        }


    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

7.6 ShowAllManagerController

package com.cxyzxc.www.controller;

import com.cxyzxc.www.entity.Manager;
import com.cxyzxc.www.service.ManagerService;
import com.cxyzxc.www.service.impl.ManagerServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;

@WebServlet(name = "ShowAllManagerController", value = "/ShowAllManagerController")
public class ShowAllManagerController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1、处理乱码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        //通过HttpSession完成权限控制
        HttpSession session =request.getSession();
        //获取session中存储的值
        Manager manager = (Manager)session.getAttribute("manager");
        //判断获取的值
        if(manager!=null){
            //调用业务,只做业务,业务与显示分离
            ManagerService managerService = new ManagerServiceImpl();
            List<Manager> managers =managerService.showAllManager();
            //将获取的数据存储在request作用域中
            request.setAttribute("managers",managers);
            //转发,跳转到显示结果的Servlet
            request.getRequestDispatcher("/ShowAllManagerJsp").forward(request,response);
        }else{
            //说明没有登录,要先去登录才能进行显示
            response.sendRedirect("/managerProject01_war_exploded/login.html");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

7.7 ShowAllManagerJsp

package com.cxyzxc.www.jsp;

import com.cxyzxc.www.entity.Manager;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

@WebServlet(name = "ShowAllManagerJsp", value = "/ShowAllManagerJsp")
public class ShowAllManagerJsp extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1、处理乱码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        //2、获取数据
        List<Manager> managers = (List<Manager>) request.getAttribute("managers");

        //获取输出流
        PrintWriter printWriter = response.getWriter();
        if (managers.size() != 0) {
            printWriter.println("<html>");
            printWriter.println("<head>");
            printWriter.println("<title>所有管理员</title>");
            printWriter.println("<link type=\"text/css\" rel=\"stylesheet\" href=\"css/table.css\" />");
            printWriter.println("</head>");
            printWriter.println("<table border='1px' cellspacing='0'>");
            printWriter.println("<tr>");
            printWriter.println(" <th>序号</th>");
            printWriter.println(" <th>账号</th>");
            printWriter.println(" <th>密码</th>");
            printWriter.println(" <th>操作</th>");
            printWriter.println(" </tr>");
            for (int i = 0; i < managers.size(); i++) {
                printWriter.println("<tr>");
                printWriter.println("<td>" + (i + 1) + "</td>");
                printWriter.println("<td>" + managers.get(i).getUsername() + "</td>");
                printWriter.println("<td>" + managers.get(i).getPassword() + "</td>");
                printWriter.println("<td><a href=\"#\">修改</a> <a href=\"#\">删除</a></td>");
                printWriter.println("</tr>");
            }
            printWriter.println("</table>");
            printWriter.println("</html>");
        } else {
            printWriter.println("<h2>数据库中没有数据查询</h2>");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

8 Session实战保存验证码

生成验证码的方式有很多种,可以使用随机数的方式实现,也可以使用ValidateCode类来实现(需要导入ValidateCode.jar包)。在这里,我们学习使用ValidateCode类来生成验证码

8.1 创建验证码

package com.cxyzxc.www.controller;

import cn.dsna.util.images.ValidateCode;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

/**
 * 此Servlet的作用是生成验证码并将生成的验证码存储到session中、发送到页面中显示
 */
@WebServlet(name = "VerificationServlet", value = "/VerificationServlet")
public class VerificationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置验证码规格
        ValidateCode validateCode = new ValidateCode(200, 20, 4, 10);
        //获取验证码
        String code = validateCode.getCode();
        //将验证码存储在session中
        HttpSession session = request.getSession();
        session.setAttribute("code",code);
        //将验证码输出到客户端
        validateCode.write(response.getOutputStream());
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

8.2 登录页面

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>管理员登录页面</title>
        <link type="text/css" rel="stylesheet" href="css/login.css"/>
    </head>

    <body>
        <div>
            <form action="LoginMgrController" method="post">
                <p>
                    账号:<input type="text" name="username"/>
                </p>
                <p>
                    密码:<input type="password" name="password"/>
                </p>
                <p>
                    验证码:<input type="text" name="verification"/>
                    <img src="/managerProject02_war_exploded/VerificationServlet" />
                </p>
                <p>
                    <input type="submit" value="登录"/>
                </p>
            </form>
        </div>
    </body>
</html>

8.3 LoginMgrController

package com.cxyzxc.www.controller;

import com.cxyzxc.www.entity.Manager;
import com.cxyzxc.www.service.ManagerService;
import com.cxyzxc.www.service.impl.ManagerServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "LoginMgrController", value = "/LoginMgrController")
public class LoginMgrController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1、处理乱码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        //2、收参(获取客户端发送过来的请求数据)
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String inputCodde = request.getParameter("verification");

        //获取session中的验证码
        HttpSession session = request.getSession();
        String codes = (String) session.getAttribute("code");

        if (!inputCodde.isEmpty() && inputCodde.equalsIgnoreCase(codes)) {
            //3、调用业务方法
            ManagerService managerService = new ManagerServiceImpl();
            Manager manager = managerService.login(username, password);

            //4、处理结果,根据结果做不同的跳转
            if (manager != null) {//manager不为null,说明账号和密码正确,登录成功
                //将获取的账号和密码信息存储在session中
                HttpSession session2 = request.getSession();
                session2.setAttribute("manager", manager);
                //跳转到显示所有管理员信息的Servlet
                response.sendRedirect("/managerProject02_war_exploded/ShowAllManagerController");
            } else {//manager为null。说明账号或者密码错误,登录失败
                response.sendRedirect("/managerProject02_war_exploded/login.html");
            }
        } else {//验证码不对,重新登录
            response.sendRedirect("/managerProject02_war_exploded/login.html");
        }


    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

8.4 ShowAllManagerController

package com.cxyzxc.www.controller;

import com.cxyzxc.www.entity.Manager;
import com.cxyzxc.www.service.ManagerService;
import com.cxyzxc.www.service.impl.ManagerServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

@WebServlet(name = "ShowAllManagerController", value = "/ShowAllManagerController")
public class ShowAllManagerController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //通过HttpSession完成权限控制
        HttpSession session =request.getSession();
        //获取session中存储的值
        Manager manager = (Manager)session.getAttribute("manager");
        //判断获取的值
        if(manager!=null){
            //调用业务,只做业务,业务与显示分离
            ManagerService managerService = new ManagerServiceImpl();
            List<Manager> managers =managerService.showAllManager();
            //将获取的数据存储在request作用域中
            request.setAttribute("managers",managers);
            //转发,跳转到显示结果的Servlet
            request.getRequestDispatcher("/ShowAllManagerJsp").forward(request,response);
        }else{
            //说明没有登录,要先去登录才能进行显示
            response.sendRedirect("/managerProject02_war_exploded/login.html");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

今天的分享就到此结束了

创作不易点赞评论互关三连

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Transformer:开启CV研究新时代

来源&#xff1a;投稿 作者&#xff1a;魔峥 编辑&#xff1a;学姐 起源回顾 有关Attention的论文早在上世纪九十年代就提出了。 在2012年后的深度学习时代&#xff0c;Attention再次被翻了出来&#xff0c;被用在自然语言处理任务&#xff0c;提高RNN模型的训练速度。但是由…

数据库(4)--视图的定义和使用

一、学习目的 加深对视图的理解&#xff0c;熟练视图的定义、查看、修改等操作 二、实验环境 Windows 11 Sql server2019 三、实验内容 学生&#xff08;学号&#xff0c;年龄&#xff0c;性别&#xff0c;系名&#xff09; 课程&#xff08;课号&#xff0c;课名&#xff0c;…

收藏|一文掌握数据分析在企业的实际流程

一、数据分析概念 1.1 数据分析 是指用适当的统计分析方法对收集来的大量数据进行分析&#xff0c;将他们加以汇总和理解并消化&#xff0c;以求最大化地开发数据的功能&#xff0c;发挥数据的作用。 1.2 数据分析包括 描述性数据分析&#xff08;初级数据分析&#xff09;…

兼职平台小程序【源码好优多】

简介 微信小程序兼职平台以及问答悬赏平台的整合项目&#xff0c;兼职平台以及问答社区&#xff0c;是一个可以用于学生项目开发或者毕设的小型项目。 功能介绍 微信授权登录 用户兼职选择 优质学长/学姐推荐 兼职推荐 问答板块 评论/回复板块 用户个人中心 页面截图 …

深度学习Week15-common.py文件解读(YOLOv5)

目录 简介 一.基本组件 1.1autopad 1.2Conv 1.3 Focus 1.4Bottleneck 1.5BottleneckCSP 1.6 C3 1.7 SPP 1.8Concat 1.9Contract、Expand 二、重要类 2.1非极大值抑制&#xff08;NMS&#xff09; 2.2AutoShape 2.3 Detections 2.4 Classify 三、实验 &#x1f…

WGCNA | 值得你深入学习的生信分析方法!~(网状分析-第三步-模块与特征分析)

1写在前面 之前我们完成了WGCNA输入数据的清洗&#xff0c;网络构建和模块识别。&#x1f618; 而且还介绍了如何对大型数据分级处理&#xff0c;有效地减少了内存的负担。&#x1f637; 接着就是最重要的环节了&#xff0c;将不同module与表型或者临床特征相联系&#xff0c;进…

共享模型之工具(一)

1.线程池 1.1.线程池产生背景 1>.线程是一种系统资源,每创建一个新的线程都需要占用一定的内存(分配栈内存),在高并发场景下,某一时刻有大量请求访问系统,如果针对每个请求(任务)都创建一个新的线程,那么对内存的占用是相当大的,有可能还出现OOM(内存溢出),甚至会导致整个…

配置中心Config

引入依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.6.RELEASE</version></parent><properties><spring-cloud.version>Finchley.SR…

设计模式:桥接模式让抽象和实现解耦,各自独立变化

一、问题场景 现在对”不同手机类型“的 “不同品牌”实现操作编程(比如: 开机、关机、上网&#xff0c;打电话等) 二、传统解决方案 传统方案解决手机使用问题类图&#xff1a; 三、传统方案分析 传统方案解决手机操作问题分析 1、扩展性问题(类爆炸)&#xff0c;如果我们…

JavaのString类这一篇就够了(包含StringBuffer_Builder)

1.&#x1f957;String类简介 在我们写代码的时候&#xff0c;String总是充斥着前前后后。 但你会不会经常力不从心&#xff0c; “这个*** 字符串怎么** 转换不成功啊” “*** 这个字符串到底是常量还是对象啊” “这*** 字符串内存结构到底* * * 是什么啊” “为啥我的字符串…

Java 在二叉树中增加一行

623. 在二叉树中增加一行中等给定一个二叉树的根 root 和两个整数 val 和 depth &#xff0c;在给定的深度 depth 处添加一个值为 val 的节点行。注意&#xff0c;根节点 root 位于深度 1 。加法规则如下:给定整数 depth&#xff0c;对于深度为 depth - 1 的每个非空树节点 cur…

LeetCode 83. 删除排序链表中的重复元素

原题链接 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 给定一个已排序的链表的头 headheadhead &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;…

Springboot+ElasticSearch构建博客检索系统-学习笔记01

课程简介&#xff1a;从实际需求分析开始&#xff0c;打造个人博客检索系统。内容涵盖&#xff1a;ES安装、ES基本概念和数据类型、Mysql到ES数据同步、SpringBoot操作ES。通过本课&#xff0c;让学员对ES有一个初步认识&#xff0c;理解ES的一些适用场景&#xff0c;以及如何使…

C语言实例|编写C程序在控制台打印余弦曲线

C语言文章更新目录 C语言学习资源汇总&#xff0c;史上最全面总结&#xff0c;没有之一 C/C学习资源&#xff08;百度云盘链接&#xff09; 计算机二级资料&#xff08;过级专用&#xff09; C语言学习路线&#xff08;从入门到实战&#xff09; 编写C语言程序的7个步骤和编程…

30岁了,说几句大实话

是的&#xff0c;我 30 岁了&#xff0c;还是周岁。 就在这上个月末&#xff0c;我度过了自己 30 岁的生日。 都说三十而立&#xff0c;要对自己有一个正确的认识&#xff0c;明确自己以后想做什么&#xff0c;能做什么。 想想时间&#xff0c;过得真快。 过五关斩六将&…

基于圆展开自适应三边测量算法的室内定位

基于圆展开自适应三边测量算法的室内定位 具有无线通信功能的移动设备的日益普及刺激了室内定位服务的增长。室内定位用于实时定位设备位置&#xff0c;方便访问。然而&#xff0c;由于大量障碍物&#xff0c;与室外定位相比&#xff0c;室内定位具有挑战性。全球定位系统非常适…

【MyBatis】| MyBatis分页插件PageHelper

目录 一&#xff1a;MyBatis使⽤PageHelper 1. limit分⻚ 2. PageHelper插件 一&#xff1a;MyBatis使⽤PageHelper 1. limit分⻚ &#xff08;1&#xff09;概念&#xff1a; ①页码&#xff1a;pageNum&#xff08;用户会发送请求&#xff0c;携带页码pageNum给服务器&am…

Pom.xml详解

目录 1、Maven的下载安装 2、什么是pom&#xff1f; 3、较完整的pom元素 4、默认生成Maven工程的pom内容 5、自定义的属性变量 6、依赖管理 6.1、整体依赖关系列表 6.2、依赖关系的传递性 6.3、依赖传递可能造成的问题 6.3.1、scope依赖范围 6.3.2、依赖调节 6.3.3…

【分享】如何通过集简云将ChatGPT人工智能接入到我们的飞书机器人中?

ChatGPT是一款非常强大的人工智能产品&#xff0c;可以有创造性的回复和创作文字&#xff0c;图片&#xff0c;适用于很多办公场景。这篇文章将介绍如何将ChatGPT接入到我们的飞书机器人中。 在集简云中的ChatGPT应用 目前集简云提供了两个ChatGPT应用: OpenAI(ChatGPT&#x…

EdgeCOM嵌入式边缘计算机的参数配置

EdgeCOM嵌入式边缘计算机的参数配置&#xff1a; 下面以 eth0 为例进行命令说明。 在 Linux 系统下&#xff0c;使用 ifconfig 命令可以显示或配置网络设备&#xff0c;使用 ethtool 查询及 设置网卡参数。 设置 IP 地址&#xff0c;查看当前网卡详情&#xff1a; rootfl-imx6u…