案例描述:

这个示例是基于基本的登录案例,添加了验证码的功能。
原始案例可以参考文章《JavaWeb之HttpSession》中的示例②。

效果展示

login.jsp

java smtps添加信任证书怎么设置 java登录界面添加验证码_案例


succ.jsp

java smtps添加信任证书怎么设置 java登录界面添加验证码_验证码_02

一、大体流程图:

java smtps添加信任证书怎么设置 java登录界面添加验证码_错误信息_03

二、目录结构

这个案例用到的几个目录和文件,用红框标出。其余的都可以忽略。

java smtps添加信任证书怎么设置 java登录界面添加验证码_javaweb_04

三、源代码

源代码只选取核心部分展示。其余的大同小异,没有意义。

  1. login.jsp
<html>
	<script type="text/javascript">
		function _change() {
			// 得到img元素
			var imgele = document.getElementById("vcodeimage");
			// 修改src,其实还是原来的src
			imgele.src = "/JavaWebLearning/VerifyCodeServlet?a=" + new Date().getTime();
		}
	</script>

	<head>
		<base href="<%=basePath%>">

		<title>登录</title>

		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

	</head>

	<body>
		<%-- 本页面提供表单信息,还要显示错误信息 --%>

		<h1>登录</h1>

		<%
		/*
		读取名为uname的cookie,
		如果为空,显示 ""空字符串
		如果不为空,显示cookie的值
		 */
		String uname = "";
		// 获取所有的cookie
		Cookie[] cs = request.getCookies();
		// 如果存在cookie
		if (cs != null) {
			// 循环遍历所有的cookie
			for (Cookie c : cs) {
				// 找到名字为uname的cookie
				if ("uname".equals(c.getName())) {
					// 把这个cookie的值给uname这个变量
					uname = c.getValue();
				}
			}
		}
	%>

		<%
		String msg = "";
		msg = (String) request.getAttribute("msg");
		if (msg == null) {
			msg = "";
		}
	%>

		<form action="/JavaWebLearning/LoginServlet" method="post">
			<div>用户:</div>
			<input type="text" name="username" value="<%=uname%>" /><br />
			<div>密码:</div>
			<input type="password" name="password" /><br />
			<div>验证码:</div>
			<input type="text" name="verifyCode" size="3" /> <img id="vcodeimage" src="/JavaWebLearning/VerifyCodeServlet" />
			<a href="javascript:_change()">看不清,换一张</a> <br /> <input type="submit" value="submit" />
		</form>
		<font color="red"> <b> <%=msg%> </b> </font>
	</body>

</html>
  1. succ.jsp
<body>
	<h1>succ.jsp</h1>
	<%
	String username = (String) session.getAttribute("username");
	if (username == null) {
		/*
		 * 1.向request域中保存错误信息,转发到login.jsp
		 */
		request.setAttribute("msg", "用户未登陆,请登陆!");
		request.getRequestDispatcher("/session2/login.jsp").forward(request, response);
		return;
	}
%> 欢迎用户
	<%=username%>访问!!!
</body>
  1. LoginServlet.java
public class LoginServlet extends HttpServlet {

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/*
		 * 校验验证码 1. 从session中获取正确的验证码 2. 从表单中获取用户填写的验证码 3. 进行比较 4.
		 * 如果相同,向下运行,否则保存错误信息到request域,转发到login.jsp
		 */
		String sessionCode = (String) request.getSession().getAttribute(
				"session_vcode");
		System.out.println("系统传递过来的:" + sessionCode);
		String formCodeString = request.getParameter("verifyCode");
		System.out.println("用户输入的:"+formCodeString);
		if (!formCodeString.equalsIgnoreCase(sessionCode)) {
			// 保存错误信息到request域
			request.setAttribute("msg", "验证码输入错误,请重新输入!");
			// 得到一个转发器
			RequestDispatcher qr = request
					.getRequestDispatcher("/session2/login.jsp");
			// 转发
			qr.forward(request, response);
			return;

		}

		/*
		 * 1. 获取表单数据
		 */
		// 处理中文问题
		request.setCharacterEncoding("utf-8");
		// 获取表单数据
		String username = request.getParameter("username");
		String password = request.getParameter("password");

		/*
		 * 2. 校验用户名和密码是否正确,预设用户名和密码分别为:“root”,“0000”
		 */
		if ("root".equalsIgnoreCase(username) && "0000".equals(password)) {
			/******* 附加项 *************************************************************/
			// 把用户名保存到cookie中,发送给客户端浏览器。
			// 当再次打开login.jsp时,login.jsp中会读取request中的cookie,把它显示到用户名文本框中

			// 1. 创建cookie
			Cookie cookie = new Cookie("uname", username);
			// 2. 设置cookie生命时长为7天。
			cookie.setMaxAge(60 * 60 * 24 * 7);
			// 3. 保存cookie
			response.addCookie(cookie);

			/******* 附加项 *************************************************************/

			/*
			 * 3.如果成功 -> 保存用户信息到session中 -> 重定向到succ.jsp
			 */

			// 获取session
			HttpSession session = request.getSession();
			// 向session域中保存用户名
			session.setAttribute("username", username);
			// 重定向到succ.jsp
			response.sendRedirect("/JavaWebLearning/session2/succ.jsp");
		} else {
			/*
			 * 如果失败 -> 保存错误信息到request域中 -> 转发到login.jsp
			 */
			// 保存错误信息到request域
			request.setAttribute("msg", "用户名或密码错误!");
			// 得到一个转发器
			RequestDispatcher qr = request
					.getRequestDispatcher("/session2/login.jsp");
			// 转发
			qr.forward(request, response);
		}
	}
}
  1. VerifyCodeServlet.java
public class VerifyCodeServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/*
		 * 生成图片,保存图片上的文本到session域中,把图片响应给客户端
		 */
		VerifyCode vc = new VerifyCode();
		BufferedImage image = vc.getImage();
		// 保存图片上的文本到session域中。
		System.out.println("系统生成的验证码:"+vc.getText());
		request.getSession().setAttribute("session_vcode", vc.getText());
		vc.output(image, response.getOutputStream());
	}
}
  1. VerifyCode.java
    这里的内容和上一篇博客完全重合,大家可以参考上一篇的代码。

end.