学习资料黑马java。
Cookie,主要用于用户无登入情况下的身份识别。
package cn.web.Cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
在服务器中的Servlet判断是否有一个名为lastTime的cookie
1. 有:不是第一次访问
1. 响应数据:欢迎回来,您上次访问时间为:2018年6月10日11:50:20
2. 写回Cookie:lastTime=2018年6月10日11:50:01
2. 没有:是第一次访问
1. 响应数据:您好,欢迎您首次访问
2. 写回Cookie:lastTime=2018年6月10日11:50:01
*/
@WebServlet("/cookieTest")
public class CookieTest extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("test/html;charset=utf-8");
//1.获取cookie
Cookie[] cookies = request.getCookies();
//2.遍历cookie数组
if (cookies != null && cookies.length > 0)
{
//输入iter则弹出快捷键
for (Cookie cookie : cookies) {
//3.获取cookie名称
String name = cookie.getName();
if("lastname".equals(name)) //有该数据,不是第一次访问
{
//获取当前时间,并更新cookie
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
String format = simpleDateFormat.format(date);//把date按格式排好
cookie.setValue(format); //传入cookie中,覆盖掉原来的值
//设置cookie存活时间
cookie.setMaxAge(60*60*24*30);
response.addCookie(cookie);
//响应数据,获取数据value值
String value = cookie.getValue();
response.getWriter().write("欢迎回来,您上次访问的时间是:"+value);
break;
}
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
案例:带验证码的登入界面
文件结构:
核心逻辑简述:
1.通过验证码生成Servlet生成一个验证码,并把正确的文本存在session中。
2.用户输入三个值,账号,密码,和验证码。
3.从request中get到这三个参数,并先用用户的验证码和session中存放的正确结果做对比。
3.1如果不对,则转发一个“验证码不对”的String到前端。
3.2如果正确,则开始判断用户名和密码。
4.把用户名和密码拿出来,通过连接池去数据库中查询。
5.如果找到了,则封装起来用户名和密码。如果没找到,则返回一个Null。
6.进行相应的跳转。
Login.jsp – 登入界面首页
有个小技巧 div中,如果想空的时候不显示,可以用三元运算符:
<div> <%=request.getAttribute("cc_error") == null? "":request.getAttribute("cc_error")%></div>
此外,关于jsp中写java <%= xxxxx %>是不能有分号的,这就是一个单行的表达式。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Login</title>
<script>
//当窗口加载完,触发事件。
window.onload = function () {
//当id为img(就是下方的绑定的image)被点击,触发事件
document.getElementById("img").onclick = function () {
var date = new Date(); //加入时间戳 这样每次点击就是一次新访问了checkcode
this.src=