Html页面
<%--
Created by IntelliJ IDEA.
User: 白菜你个cabbage
Date: 2019/11/3
Time: 13:39
To change this template use File | Settings | File Templates.
--%>
<%--(1)新建一个login.jsp页面,制作一个表单,包含用户名和密码框登录按钮以及一个在二周内无需登录的选择框。该页面检查cookies中是否存在名为user的项,
如果存在,则不显示登录表,并跳到hello.jsp页面。--%>
<%--(2)将登录的表单交由一个servlet来处理,这个servlet收集用户名和密码,并向客户端发送cookie。注意设置cookie的有效周期为2周。--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录页面</title>
</head>
<body>
使用cookie技术使用户在二周内免登录
<form action="Experiment/dealServlet" method="post">
登录名:<input type="text" name="username"/>
密 码:<input type="password" name="passWd"/><br>
<input type="checkbox" name="keep"/>两周免登录<br>
<input type="submit" value="登录"/>
</form>
<%
HttpSession hs = request.getSession();
String name = (String)hs.getAttribute("name");
if(name!=null){
out.println(name);
if(name.equals("user")){
response.sendRedirect("hello.jsp");
}
}
%>
</body>
</html>
设置Cookie
package Experiment;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
public class dealServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
String user = req.getParameter("username");
String passwd = req.getParameter("passWd");
if(user.equals(passwd)){
String keep = req.getParameter("keep");
if(keep!=null){//如果复选框被选中,即创建两周免登录
Cookie name = new Cookie("name","user");
Cookie mima = new Cookie("passwd","passWd");
name.setMaxAge(14*24*3600);
mima.setMaxAge(14*24*3600);
resp.addCookie(name);
resp.addCookie(mima);
}
//为了用户名和密码的安全性,以Session的方式传递这两个值
HttpSession hs = req.getSession(true);
hs.setMaxInactiveInterval(30);//设置session失效时间
hs.setAttribute("name",user);
hs.setAttribute("passwd",passwd);
resp.sendRedirect("cookies");
}
}
}
逻辑处理
package Experiment;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
public class cookies extends HttpServlet {
String username;
String passwd;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置服务器端以UTF-8编码进行输出
resp.setCharacterEncoding("UTF-8");
//设置浏览器以UTF-8编码进行接收,解决中文乱码问题
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
//获取session的值
HttpSession hs = req.getSession();
String name = (String)hs.getAttribute("name");
String passwd = (String)hs.getAttribute("passwd");
if(name==null){ //判断直接访问欢迎界面的用户是否合法(session没有用户名,不是从登录界面进入的)
String cname="";
String cpasswd="";
Cookie[] allCookies=req.getCookies(); //获取Cookie
if(allCookies!=null)
{
for(int i=0;i<allCookies.length;i++)
{
Cookie temp=allCookies[i];
if(temp.getName().equals("name"))
{
cname=temp.getValue(); //获得cookie中的用户名和密码
}
else if(temp.getName().equals("passwd"))
{
cpasswd=temp.getValue();
}
}
}
resp.sendRedirect("http://localhost:8080/javaWeb_war_exploded/successCookies.jsp"); //直接登录欢迎界面且cookie中无值,跳转登录界面
}
out.println("成功"+name);
//resp.sendRedirect("http://localhost:8080/javaWeb_war_exploded/successCookies.jsp");
}
}