之前我们做出了用户功能的注册与登录功能,这次我们将用户功能完善,包括用户登录显示用户名,注销用户,以及验证码的使用
登录显示用户名
一般来说,我们登录之后会显示用户名,我们之前是写死的,这次改成动态的。
UserServlet
程序中保存用户登录的信息。因为我们登录之后的所有网页都是要显示用户名的,所以不能保存到request
域,而是要保存到session
域。- 修改
login_success_menu.jsp
,,因为我们之前把登录成功之后的菜单信息提取出一个jsp
文件,所以只需要修改这个公共的部分。
- 修改首页
index.jsp
页面的菜单,使其在登录之后也能显示用户信息。
登出注销用户
UserServlet
程序中添加logout
方法
/**
* 注销
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void logout(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1. 销毁Session中用户登录的信息(或者销毁Session)
req.getSession().invalidate();
// 2. 重定向到首页(或登录页面)。
resp.sendRedirect(req.getContextPath());
}
- 修改注销的菜单地址
使用验证码的原因及原理
之前验证码一直是写死的,这次我们实现动态的验证码。使用验证码的原因之一是为了防止用户重复提交表单而产生错误。
表单重复提交有以下三种情况。
- 提交完表单。服务器使用请求转来进行页面跳转。这个时候,用户按下功能键 F5,就会发起最后一次的请求。造成表单重复提交问题。解决方法:这个可以使用重定向来进行跳转
- 用户正常提交服务器,但是由于网络延迟等原因,迟迟未收到服务器的响应,这个时候,用户以为提交失败,就会着急,然后多点了几次提交操作,也会造成表单重复提交。
- 用户正常提交服务器。服务器也没有延迟,但是提交完成后,用户回退浏览器。重新提交。也会造成表单重复提交。
最后两种情况无法通过重定向解决,所以我们可以使用验证码解决。
谷歌 kaptcha 图片验证码的使用
我们使用现有的 jar
包来完成我们的验证码功能。
- 导入谷歌验证码的
jar
包
kaptcha-2.3.2.jar
- 在
web.xml
中去配置用于生成验证码的Servlet
程序,因为kaptcha
提供的也是Servlet
程序,所以要在web.xml
中配置完成才能使用。
<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>
-
在表单中使用
img
标签去显示验证码图片并使用它
-
在服务器获取谷歌生成的验证码和客户端发送过来的验证码比较使用
-
切换验证码,用户有时候可能看不清验证码,所以我们还要提供点击图片替换的功能。
// 给验证码图片绑定单击事件
$("#code_img").click(function () {
// 在事件响应的function函数中有一个this对象,这个this对象,是当前正在响应事件的dom对象
// src 属性表示验证码img标签的图片路径。它可读可写
// 添加随机变量,防止调用缓存
this.src = "${basePath}kaptcha.jpg?d=" + new Date();
});