资讯动态

cookie用法案例 (第11周JSP)

发布时间:2026/8/22 20:44:28 来源:尧图企业网站定制
一、index.jsp登录页自动读取 Cookie% page contentTypetext/html;charsetUTF-8 languagejava % % String nameValue ; String passwordValue ; Cookie[] cookies request.getCookies(); if (cookies ! null) { for (int i 0; i cookies.length; i) { Cookie c cookies[i]; if (username.equals(c.getName())) { nameValue c.getValue(); } if (userpass.equals(c.getName())) { passwordValue c.getValue(); } } } % !DOCTYPE html html head meta charsetUTF-8 titleCookie 登录页面/title /head body h2用户登录/h2 form actionset.jsp methodpost 用户名 input typetext namename value% nameValue % brbr 密码 input typetext namepassword value% passwordValue % brbr input typesubmit value登录 /form /body /html二、set.jsp接收登录信息保存 Cookie然后跳转欢迎页% page contentTypetext/html;charsetUTF-8 languagejava % % request.setCharacterEncoding(UTF-8); String uname request.getParameter(name); String upassword request.getParameter(password); if (uname null) { uname ; } if (upassword null) { upassword ; } Cookie usernameCookie new Cookie(username, uname); Cookie userpassCookie new Cookie(userpass, upassword); usernameCookie.setMaxAge(7 * 24 * 60 * 60); userpassCookie.setMaxAge(7 * 24 * 60 * 60); usernameCookie.setPath(request.getContextPath()); userpassCookie.setPath(request.getContextPath()); response.addCookie(usernameCookie); response.addCookie(userpassCookie); // 登录后跳转到欢迎页 response.sendRedirect(welcome.jsp); %三、welcome.jsp欢迎页% page contentTypetext/html;charsetUTF-8 languagejava % % String username ; Cookie[] cookies request.getCookies(); if (cookies ! null) { for (int i 0; i cookies.length; i) { Cookie c cookies[i]; if (username.equals(c.getName())) { username c.getValue(); } } } if (.equals(username)) { username 游客; } % !DOCTYPE html html head meta charsetUTF-8 title欢迎页/title /head body h2登录成功/h2 p欢迎你% username %/p a hrefindex.jsp返回登录页面/a /body /html----------------------------------------------------------------------------------------------------------------------------下面讲解这个 JSP Cookie 登录小应用的核心知识点。一、这个小应用的本质是什么这个程序本质上是在演示服务器如何让浏览器保存一段数据并在下次访问时自动带回来。用户第一次输入用户名、密码后set.jsp把它们保存进 Cookie。浏览器收到 Cookie 后会把 Cookie 存在本地。以后用户再访问index.jsp浏览器会自动把 Cookie 发给服务器服务器就能把用户名和密码重新显示到输入框里。所以这个程序的核心不是“登录验证”而是Cookie 保存数据 Cookie 读取数据 表单数据回显二、Cookie 是什么Cookie 是服务器发送给浏览器保存的一小段文本数据。可以这样理解服务器浏览器请你保存 username张源。 浏览器好的我保存下来。 下次浏览器访问服务器时 浏览器服务器这是我之前保存的 username张源。 服务器收到我把它显示到页面上。Cookie 的特点是1. Cookie 保存在浏览器端。 2. Cookie 是一组 key-value 数据。 3. 浏览器访问同一个网站时会自动携带对应 Cookie。 4. Cookie 可以设置有效时间。 5. Cookie 不适合保存敏感信息比如明文密码。三、整个程序的执行流程你的程序一般有三个页面index.jsp 登录页面 set.jsp 接收表单并保存 Cookie welcome.jsp 登录成功欢迎页执行过程如下1. 用户打开 index.jsp。 2. index.jsp 调用 request.getCookies() 读取浏览器中的 Cookie。 3. 如果 Cookie 中有 username 和 userpass就把它们放到输入框 value 中。 4. 用户输入用户名和密码点击登录。 5. 表单提交到 set.jsp。 6. set.jsp 使用 request.getParameter() 获取用户输入。 7. set.jsp 创建 Cookie 对象。 8. set.jsp 使用 response.addCookie() 把 Cookie 写回浏览器。 9. set.jsp 使用 response.sendRedirect(welcome.jsp) 跳转到欢迎页。 10. 用户返回 index.jsp 时Cookie 被再次读取表单自动回显。最核心的一句话index.jsp 负责读 Cookieset.jsp 负责写 Cookiewelcome.jsp 负责显示登录成功。四、表单提交的核心知识点登录页中的表单代码form actionset.jsp methodpost 用户名 input typetext namename value% nameValue % 密码 input typetext namepassword value% passwordValue % input typesubmit value登录 /form这里有三个重点。第一个是actionset.jsp。它表示表单提交后把数据发送到set.jsp页面。第二个是methodpost。它表示用 POST 方式提交数据。相比 GETPOST 不会把表单数据直接拼在地址栏后面。第三个是namename和namepassword。这个非常关键。后端 JSP 获取数据时靠的就是这个name属性。比如前端写input typetext namename后端就要这样取String uname request.getParameter(name);如果前端写的是input typetext nameusername后端就必须写String uname request.getParameter(username);所以input 的 name 属性必须和 request.getParameter() 里的参数名一致。五、request.getParameter() 是什么在set.jsp中String uname request.getParameter(name); String upassword request.getParameter(password);它的作用是从请求中获取表单提交过来的数据。用户在页面输入用户名张源 密码123456提交后set.jsp就可以通过request.getParameter(name)拿到张源。通过request.getParameter(password)拿到123456。所以request.getParameter()的本质是从浏览器提交过来的请求数据中取值。六、Cookie 的创建在set.jsp中Cookie usernameCookie new Cookie(username, uname); Cookie userpassCookie new Cookie(userpass, upassword);这两行代码创建了两个 Cookie。第一个 Cookie名字username 值用户输入的用户名第二个 Cookie名字userpass 值用户输入的密码Cookie 是键值对形式username 张源 userpass 123456核心语法Cookie 对象名 new Cookie(Cookie名字, Cookie值);七、response.addCookie() 是什么创建 Cookie 之后还必须把 Cookie 发送给浏览器。代码是response.addCookie(usernameCookie); response.addCookie(userpassCookie);这两行的作用是服务器把 Cookie 添加到响应中发送给浏览器保存。注意这里不是服务器自己保存 Cookie而是告诉浏览器请你保存 username 和 userpass 这两个 Cookie。所以request 代表浏览器发给服务器的请求。 response 代表服务器返回给浏览器的响应。在这个程序里request.getParameter() 从请求中取表单数据 request.getCookies() 从请求中取 Cookie response.addCookie() 把 Cookie 放进响应中返回浏览器 response.sendRedirect() 让浏览器跳转页面八、setMaxAge() 是什么代码usernameCookie.setMaxAge(7 * 24 * 60 * 60); userpassCookie.setMaxAge(7 * 24 * 60 * 60);它的作用是设置 Cookie 的保存时间。单位是秒。60 秒 1 分钟 60 * 60 1 小时 24 * 60 * 60 1 天 7 * 24 * 60 * 60 7 天所以这段代码表示Cookie 保存 7 天。如果不设置setMaxAge()Cookie 默认是会话级 Cookie。也就是说浏览器关闭后Cookie 通常就失效。常见写法cookie.setMaxAge(60); // 保存 60 秒 cookie.setMaxAge(60 * 60); // 保存 1 小时 cookie.setMaxAge(24 * 60 * 60); // 保存 1 天 cookie.setMaxAge(7 * 24 * 60 * 60);// 保存 7 天 cookie.setMaxAge(0); // 删除 Cookie九、setPath() 是什么代码usernameCookie.setPath(request.getContextPath()); userpassCookie.setPath(request.getContextPath());它的作用是设置 Cookie 的有效路径。简单说只有访问这个路径范围内的页面时浏览器才会携带这个 Cookie。比如你的项目访问路径是http://localhost:8080/CookieDemo/index.jsp那么项目名是/CookieDemorequest.getContextPath()得到的就是/CookieDemo设置cookie.setPath(request.getContextPath());意思是这个 Cookie 在当前 Web 项目下都有效。如果不设置路径有时候 Cookie 只在某个局部路径下有效可能导致其他 JSP 页面读不到 Cookie。所以考试或实验中推荐写上cookie.setPath(request.getContextPath());十、request.getCookies() 是什么在index.jsp中Cookie[] cookies request.getCookies();这行代码的作用是获取浏览器本次请求携带过来的所有 Cookie。注意返回的是数组Cookie[] cookies因为浏览器可能保存很多 Cookie比如username张源 userpass123456 JSESSIONIDxxxxxx themedark所以需要遍历数组。十一、为什么要判断 cookies ! null代码if (cookies ! null) { for (int i 0; i cookies.length; i) { Cookie c cookies[i]; } }原因是第一次访问页面时浏览器可能还没有任何 Cookie。如果此时直接遍历for (int i 0; i cookies.length; i)可能会报空指针异常NullPointerException所以必须先判断if (cookies ! null)这是 JSP/Java Web 中很重要的防错意识。十二、如何根据 Cookie 名称取值代码if (username.equals(c.getName())) { nameValue c.getValue(); } if (userpass.equals(c.getName())) { passwordValue c.getValue(); }这里有两个方法c.getName()获取 Cookie 的名字。c.getValue()获取 Cookie 的值。例如有一个 Cookieusername张源那么c.getName()结果是usernamec.getValue()结果是张源为什么写username.equals(c.getName())而不是c.getName().equals(username)因为前者更安全。如果c.getName()意外为空前者不会报错。十三、为什么输入框能自动显示数据关键代码input typetext namename value% nameValue %这里的value决定输入框默认显示什么内容。比如input typetext value张源页面上输入框里就会显示张源而% nameValue %是 JSP 表达式作用是把 Java 变量输出到 HTML 页面中。所以value% nameValue %意思是把从 Cookie 中读取到的用户名显示在输入框里。这就是“表单回显”的核心。十四、response.sendRedirect() 是什么在set.jsp中response.sendRedirect(welcome.jsp);它的作用是让浏览器重新跳转到 welcome.jsp。执行过程是服务器告诉浏览器你去访问 welcome.jsp。 浏览器收到指令后再发起一次新的请求访问 welcome.jsp。所以重定向的特点是1. 地址栏会发生变化。 2. 浏览器会重新发送一次请求。 3. 常用于登录成功后跳转页面。在你的程序中它表示保存 Cookie 成功后进入欢迎页。十五、welcome.jsp 为什么也能显示用户名因为浏览器访问welcome.jsp时也会自动携带 Cookie。所以welcome.jsp也可以写Cookie[] cookies request.getCookies();然后从里面找到username最后输出欢迎你% username %这说明 Cookie 不是只给某一个 JSP 用的只要路径范围允许当前 Web 项目下的 JSP 页面都可以读取它。十六、Cookie 和 Session 的区别这个非常容易被老师问。对比项CookieSession保存位置浏览器端服务器端安全性较低较高数据大小较小相对较大生命周期可设置过期时间通常随会话结束或超时失效典型用途记住用户名、偏好设置保存登录状态、用户信息是否能被用户看到可以被查看和修改用户不能直接查看一句话区别Cookie 存在浏览器Session 存在服务器。Cookie 适合保存简单信息Session 适合保存重要登录信息。十七、为什么真实项目不能保存明文密码因为 Cookie 保存在浏览器端用户可以在浏览器开发者工具里看到。如果你把密码保存成userpass123456那么别人拿到电脑或 Cookie就可能看到密码。所以真实项目中不能这样做。真实项目一般做法是1. 用户输入用户名和密码。 2. 服务器验证用户名和密码。 3. 验证成功后在 Session 中保存登录状态。 4. Cookie 中最多保存一个 Session ID 或 Token。 5. 不直接保存明文密码。你的实验保存密码只是为了演示 Cookie 的读写和表单回显。课堂答题可以这样说本实验为了演示 Cookie 的使用把密码保存到了 Cookie 中。但真实项目中不应保存明文密码应使用 Session 或 Token 保存登录状态。十八、这个实验最核心的四行代码写 CookieCookie usernameCookie new Cookie(username, uname); response.addCookie(usernameCookie);读 CookieCookie[] cookies request.getCookies(); nameValue c.getValue();表单回显input typetext namename value% nameValue %页面跳转response.sendRedirect(welcome.jsp);十九、“你这个程序怎么实现的”可以这样回答这个程序主要利用 Cookie 实现表单数据保存和回显。用户在index.jsp输入用户名和密码后表单通过 POST 方式提交到set.jsp。set.jsp使用request.getParameter()获取表单数据然后创建 Cookie 对象并通过response.addCookie()把 Cookie 返回给浏览器保存。保存完成后使用response.sendRedirect(welcome.jsp)跳转到欢迎页。当用户再次访问index.jsp时浏览器会自动携带 Cookie页面通过request.getCookies()获取 Cookie 数组遍历后取出用户名和密码并通过 JSP 表达式放入 input 的 value 属性中从而实现用户名和密码的自动回显。二十、最容易出错的地方第一input的name和request.getParameter()不一致。例如input namename后端必须是request.getParameter(name);第二第一次访问时没有判断 Cookie 是否为空。必须写if (cookies ! null)第三创建了 Cookie但是忘记添加到响应中。必须写response.addCookie(cookie);第四Cookie 路径没有设置好导致其他页面读不到。推荐写cookie.setPath(request.getContextPath());第五中文可能乱码。建议在接收表单前写request.setCharacterEncoding(UTF-8);二十一、用一句话总结这个实验这个 JSP Cookie小应用通过response.addCookie()把用户输入的数据保存到浏览器再通过request.getCookies()读取浏览器带回来的数据最后利用 input 的value属性实现登录信息回显并在登录后跳转到欢迎页面。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价