cookie学习

1.创建cookie

/**
 * 在服务器端创建Cookie,并且发送给浏览器
 * Cookie本身就是字符串的键值对,每个Cookie只能保存一个键值对
 */
@WebServlet("/Demo1WriteCookieServlet")
public class Demo1WriteCookieServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.创建Cookie对象。
        Cookie man = new Cookie("user", "NewBoy");
        //2.设置过期时间(单位是:秒),必须在发送之前设置
        man.setMaxAge(60 * 10);   //10分钟
        //3.发送给浏览器
        response.addCookie(man);

        //存储中文(tomcat8.0以上值可以是中文,但键不能是中文,否则会出现500异常)
        Cookie cn = new Cookie("Country", "中国");
        response.addCookie(cn);

        //可选:输出一点信息
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.print("向浏览器写入了Cookie的信息");
    }

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

2.读取cookie

/**
 * 读取Cookie的信息,显示在浏览器上
 */
@WebServlet("/Demo2ReadCookieServlet")
public class Demo2ReadCookieServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        //1.通过请求对象的方法获取所有的Cookie信息
        Cookie[] cookies = request.getCookies();
        //2.如果浏览器端没有Cookie,获取到null,所以要判断一下
        if (cookies == null) {
            out.println("浏览器端没有Cookie信息");
        }
        //3.不为空才遍历数组,输出每个Cookie的键和值
        else {
            for (Cookie cookie : cookies) {
                out.print("键:" + cookie.getName() + ",值:" + cookie.getValue() + "<br/>");
            }
        }
    }

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

3.cookie存储时间
在这里插入图片描述
4.get session 获取会话对象

/**
 * 向会话域中添加键和值
 * 底层是Map结构:可以保存多个键和值,键是String类型,值是Object类型
 */
@WebServlet("/Demo3SetSessionServlet")
public class Demo3SetSessionServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.通过请求对象,获取会话对象。第1次访问创建新的会话,以后每次访问使用之前创建好的会话。不同的用户之间,会话数据不能共享
        HttpSession session = request.getSession();
        //2.向会话域中添加键和值
        session.setAttribute("product", "LV牌包包");
        session.setAttribute("price", 2000);

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.print("向会话域中添加了键和值<br/>");
        out.print("会话ID:" + session.getId() + "<br/>");
    }

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

5.从会话中读取值以及设置超时

/**
 * 从会话域中获取
 */
@WebServlet("/Demo4GetSessionServlet")
public class Demo4GetSessionServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取会话对象,第二次访问获取的是上一次相同的会话对象
        HttpSession session = request.getSession();
        //2.从会话域中获取数据
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.print("获取会话域中数据:<hr/>");
        out.print("商品名:" + session.getAttribute("product") + "<br/>");
        out.print("价格:" + session.getAttribute("price") + "<br/>");
        out.print("会话ID:" + session.getId() + "<br/>");
        //设置过期时间为10秒
        session.setMaxInactiveInterval(10);

        //销毁会话:会话马上无效
        //session.invalidate();

        //获取会话过期的时间
        out.print("会话过期时间是:" + session.getMaxInactiveInterval() + "秒");
    }

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

6.session的钝化和激活
在这里插入图片描述
也可以在web.xml里配置会话过期时间

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
	version="4.0">

    <!-- 配置会话过期的时间 -->
    <session-config>
        <!-- 单位是:分钟 -->
        <session-timeout>5</session-timeout>
    </session-config>

</web-app>

7.注册面加上验证码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>欢迎注册</title>
    <link href="css/register.css" rel="stylesheet">
</head>
<body>

<div class="form-div">
    <div class="reg-content">
        <h1>欢迎注册</h1>
        <span>已有帐号?</span> <a href="login.jsp">登录</a>
    </div>
    <form id="reg-form" action="RegisterServlet" method="post">
        <table>
            <tr>
                <td>用户名</td>
                <td class="inputs">
                    <input name="username" type="text" id="username">
                    <br>
                    <span id="username_err" class="err_msg" style="display: none">用户名不太受欢迎</span>
                </td>

            </tr>

            <tr>
                <td>密码</td>
                <td class="inputs">
                    <input name="password" type="password" id="password">
                    <br>
                    <span id="password_err" class="err_msg" style="display: none">密码格式有误</span>
                </td>
            </tr>

            <tr>
                <td>验证码</td>
                <td class="inputs" style="text-align: left;">
                    <!-- 输入验证码 -->
                    <input name="verifyCode" type="text" id="verifyCode" style="width: 100px;">
                    <!-- 验证码图片:通过Servlet生成的图片 -->
                    <img src="VerifyCodeServlet" id="imgCode" onclick="changeVerifyCode()" title="看不清,点击换一张"/>

                    <script type="text/javascript">
                        //换一张验证码
                        function changeVerifyCode() {
                            //重新访问服务器换一张新的,替换src属性。浏览器发现地址相同,就不再访问服务器了。每次提交不同的参数即可。
                            document.getElementById("imgCode").src = "VerifyCodeServlet?num=" + Math.random();
                        }
                    </script>
                </td>
            </tr>


        </table>

        <div class="buttons">
            <input value="注 册" type="submit" id="reg_btn">
        </div>
        <br class="clear">
    </form>

</div>
</body>
</html>
/**
 * 验证码访问地址,生成一张图片
 */
@WebServlet("/VerifyCodeServlet")
public class VerifyCodeServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.调用工具类生成图片。参数:宽,高,输出流,验证码长度。返回生成的字符串验证码
        String code = CheckCodeUtil.outputVerifyImage(120, 50, response.getOutputStream(), 4);
        //2.将验证码放到会话域中
        HttpSession session = request.getSession();
        session.setAttribute("code", code);
        //3.输出到控制台
        System.out.println("验证码是:" + code);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //如果注册有汉字,考虑汉字乱码的问题
        request.setCharacterEncoding("utf-8");

        //模板代码:rout
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        //0.先判断验证码是否正确
        String verifyCode = request.getParameter("verifyCode");  //用户提交的
        //从会话域中获取服务器生成的验证码
        HttpSession session = request.getSession();
        String code = (String) session.getAttribute("code");
        //如果不等于 (不区分大小写)
        if (!verifyCode.equalsIgnoreCase(code)) {
            out.print("验证码错误<a href='register.html'>请重试</a>");
            //不再继续
            return;
        }

        //1.获取用户名和密码  ctrl+d 复制一行
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        //2.判断用户名是否存在
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);

        //3.调用业务层
        UserService userService = new UserService();
        boolean success = userService.register(user);

        //3.如果存在,提示:注册失败   快捷键:inn 和 ifn
        if (success) {
            //输出注册成功
            out.println("注册成功,<a href='login.jsp'>请登录</a>");
        }
        //4.否则就添加用户,提示:注册成功
        else {
            out.print("用户名:" + username + ",已经存在,<a href='register.html'>请重试</a>");
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值