☞ 实例:验证码登录
index.jsp
<%@ page language="java"
import="java.util.*,java.time.LocalDateTime,java.time.format.DateTimeFormatter"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</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">
<script type="text/javascript">
function changeCode() {
//得到图片元素
var img = document.getElementById("validateCode");
img.src = "/day0528_ValidateCode/servlet/vc1?time=" + new Date().getTime();
}
</script>
</head>
<body>
<form action="/day0528_ValidateCode/servlet/doLogin" method="post">
<div style="width:350px">
<table width="100%">
<tr>
<td width="25%">用户名:</td>
<td width="50%"><input style="width:100%;height:100%"
type="text" name="username" /></td>
<td width="25%"></td>
</tr>
<tr>
<td>密码:</td>
<td><input style="width:100%;height:100%" type="password"
name="password" /></td>
</tr>
<tr>
<td>验证码:</td>
<td><input style="width:100%;height:100%" type="text"
name="code" /></td>
<td><img id="validateCode"
src="/day0528_ValidateCode/servlet/vc1" onclick="changeCode()" /></td>
</tr>
<%
String info = (String) request.getAttribute("msg");
if (info != null) {
out.print("<tr>");
out.print("<td colspan='3'>");
out.print("☞ 登录失败: "+info);
out.print("</td>");
out.print("</tr>");
}
%>
<tr>
<td colspan="2"><input style="width:100%;height:100%"
type="submit" value="登录" /></td>
</tr>
</table>
</div>
</form>
<%
//获取cookie
Cookie[] cks = request.getCookies();
String time = "";
for (int i = 0; cks != null && i < cks.length; i++) {
if ("lastAccessTime".equals(cks[i].getName())) {
time = cks[i].getValue();
LocalDateTime tempTime = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
time = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss").format(tempTime);
out.print("最近访问时间:" + time);
}
}
//写入cookie
//cookie参数只能为ASCII字母数字,不能有其他字符
String time1 = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").format(LocalDateTime.now());
Cookie ck = new Cookie("lastAccessTime", time1);
//访问哪些路径时携带当前cookie(以该路径为前缀)
//注意cookie保存的时间是访问当前Servlet的时间,与这里设置的Path无关,这里的Path只其携带作用
//ck.setPath("/");
ck.setMaxAge(60 * 2);
response.addCookie(ck);
%>
</body>
</html>
ValidateCodeDemo1.java
package xyz.kuoa.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.dsna.util.images.ValidateCode;
public class ValidateCodeDemo1 extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//告诉客户端不使用缓存
response.setHeader("pragma", "no-cache");
response.setHeader("cache-control", "no-cache");
response.setIntHeader("expires", 0);
ValidateCode vc = new ValidateCode(90, 30, 4, 9);
//得到生成的字符,写入Session
String code = vc.getCode();
request.getSession().setAttribute("code", code);
vc.write(response.getOutputStream());
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
DoLogin.java
package xyz.kuoa.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DoLogin extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
String code = request.getParameter("code");
String realCode = (String) request.getSession().getAttribute("code");
if(realCode.equalsIgnoreCase(code)){
request.setAttribute("msg", "验证码错误");
request.getRequestDispatcher("/index.jsp").forward(request, response);
return;
}else if(!("tom".equals(username)&&"123".equals(password))){
request.setAttribute("msg", "用户名/密码错误");
request.getRequestDispatcher("/index.jsp").forward(request, response);
}else{
out.print("登录成功!");
}
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>ValidateCodeDemo1</servlet-name>
<servlet-class>xyz.kuoa.servlet.ValidateCodeDemo1</servlet-class>
</servlet>
<servlet>
<servlet-name>DoLogin</servlet-name>
<servlet-class>xyz.kuoa.servlet.DoLogin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidateCodeDemo1</servlet-name>
<url-pattern>/servlet/vc1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DoLogin</servlet-name>
<url-pattern>/servlet/doLogin</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>