第五阶段-尚硅谷书城案例登录注册的优化和验证码

1.显示登录的用户信息

如下图:登录后将用户信息显示出来
在这里插入图片描述
在这里插入图片描述
登录成功后,将用户的信息放入 Session域中

else {
            //登录 成功
            //保存用户登录的信息到 session 域中
            req.getSession().setAttribute("user",loginUser);
            //跳转到 login_success.jsp
            req.getRequestDispatcher("/pages/user/login_success.jsp").forward(req,resp);
        }

在 login_sucess_menu.jsp 获取session域中的用户名
在这里插入图片描述

修改首页登录界面:

当没用户登录时显示:
在这里插入图片描述
当有用户登录时显示:
在这里插入图片描述
实现:
用 <c:if></c:if>判断 用户是否登录

<%-- 如果用户还没有登录,显示  【登录 和注册的菜单】--%>
				<c:if test="${empty sessionScope.user}">
					<a href="pages/user/login.jsp">登录</a> |
					<a href="pages/user/regist.jsp">注册</a>
				</c:if>
				<%-- 如果用户登录成功,显示  【欢迎 和我的订单、注销】--%>
				<c:if test="${not empty sessionScope.user}">
					<span>欢迎<span class="um_span">${sessionScope.user.username}</span>光临尚硅谷书城</span>
					<a href="pages/order/order.jsp">我的订单</a>
					<a href="userServlet?action=logout">注销</a>&nbsp;&nbsp;
				</c:if>

2.注销登录:

  1. 销毁 session 域中的用户信息
  2. 重定向回首页
 protected void logout(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.销毁 Session 中 用户登录的信息
        req.getSession().invalidate();
        //2.重定向到首页
        resp.sendRedirect(req.getContextPath());
    }

tip: invalidate() 是直接删除 session域中的所有信息

修改首页中的 注销 a标签的跳转界面 并调用销毁的方法

<a href="userServlet?action=logout">注销</a>&nbsp;&nbsp;

3.表单重复提交之 ----验证码

表单重复提交有三种常见的情况:

  1. 提交完表单。服务器使用请求转发进行页面跳转。这个时候,用户按下功能键 F5,就会发起最后一次的请求。造成表单重复提交问题。解决方法:使用重定向进行跳转
  2. 用户正常提交服务器,但是由于网络延迟等原因,迟迟未收到服务器的响应,这个时候,用户以为提交失败,就会着急,然后多点了几次提交操作,也会造成表单重复提交。
  3. 用户正常提交服务器。服务器也没有延迟,但是提交完成后,用户回退浏览器。重新提交。也会造成表单重复提交。

解决思路图:
在这里插入图片描述

3.1、谷歌 kaptcha 图片验证码的使用

谷歌验证码 kaptcha 使用步骤如下:

  1. 导入谷歌验证码的 jar包
    在这里插入图片描述
  2. 在 web.xml 中去配置用于生成验证码的 Servlet 程序
    <servlet>
        <servlet-name>KaptchaServlet</servlet-name>
        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>KaptchaServlet</servlet-name>
        <url-pattern>/kaptcha.jpg</url-pattern>
    </servlet-mapping>

在 regist.jsp 界面 修改 图片的跳转页面

									<label>验证码:</label>
									<input class="itxt" name="code" type="text" style="width: 100px;height: 15px;"
										   id="code" />
									<img id="code_img" alt="" src="kaptcha.jpg" style="float: right; margin-right: 50px;width: 100px;height: 28px;">

在 UserServlet 中 regist 界面 获取验证码再删除验证码

  protected void regist(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取Session中的验证码
        String token = (String) req.getSession().getAttribute(KAPTCHA_SESSION_KEY);
        //删除 Session中的验证码
        req.getSession().removeAttribute(KAPTCHA_SESSION_KEY);
}

在这里插入图片描述
运行结果:
在这里插入图片描述
刷新验证码:
点击验证码图片验证码能够刷新

给验证码绑定单击事件,点击验证码 刷新页面,再给刷新的页面加入 时间戳,保证每次刷新验证码都不同

<script type="text/javascript">
		//页面加载完成之后
		$(function () {
			//给验证码绑定一个单击事件
			$("#code_img").click(function () {
				//在事件响应的function 函数中有一个 this 对象。这个this对象,是当前正在响应事件的dom对象
				//src 属性表示验证码img标签的 图片路径。它可读,可写

				this.src = "${basepath}kaptcha.jpg?d=" + new Date();
			});
</script>

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值