问题遇到的现象和发生背景
javaweb 登录注册后,设置Filter判断session过期,实现登录比如几秒后自动跳转到登录页面
用代码块功能插入代码,请勿粘贴截图
—数据保存
package javabean;
import java.util.HashMap;
import java.util.Map;
public class DBUtil {
//首先创建一个Map集合,用来保存添加的用户
private static Map<String,User> map=new HashMap<String, User>();
//判断改用户名是否被注册过
//boolean containsKey(Object value) 判断集合是否包含指定的值
public Boolean addUser(String username,String password,int age,String sex) {
if(map.containsKey(username)) {
return false;
}else {
User user=new User(username, password, age, sex);
map.put(username, user);
return true;
}
}
//判断改用户名和密码是否输入正确
public static User LoginUser(String username,String password) {
if(map.containsKey(username)) {
User user=map.get(username);
if (user.getPassword().equals(password)) {
return user;
}
return null;
}
return null;
}
}
—home.jsp登录页面
<%--
Created by IntelliJ IDEA.
User: yx
Date: 2022/10/29
Time: 14:12
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>用户登录</title>
<script src="jquery-3.5.1.min.js" type="text/javascript"></script>
<script src="bootstrap.min.js"></script>
<link rel="stylesheet" href="bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="css/style.css" />
</head>
<body>
<%
//对传入的数据进行接受并显示
Object key=request.getAttribute("key");
if(key!=null)
out.println(key);
%>
<form action="logindo.jsp" method="post">
<div class="mycenter">
<div class="mysign">
<div class="col-lg-11 text-center text-info">
<h2>请登录</h2>
</div>
<div class="col-lg-10">
<input type="text" class="form-control" name="username" placeholder="请输入账户名" required autofocus/>
</div>
<div class="col-lg-10"></div>
<div class="col-lg-10">
<input type="password" class="form-control" name="password" placeholder="请输入密码" required autofocus/>
</div>
<div class="col-lg-10">
<button type="submit" class="btn btn-success col-lg-12">登录</button>
<a href="zhuce.jsp" class="btn btn-success col">注册</a>
</div>
</div>
</div>
</form>
<style>
.col-lg-10 .btn-success{
width: 70px;
}
.col-lg-10 .col{
/*padding-right: 20px;*/
margin-top: 7px;
}
.col-lg-10 a{
position: absolute;
right: -8px;
/*margin-right: 20px;*/
}
</style>
<script>
</script>
</body>
</html>
—zhuce注册页面
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<%--action 将输入的数据传入注册处理页面--%>
<form action="zhucedo.jsp" method="post">
用户名:<input type="text" name="username"><br>
密 码:<input type="password" name="password"><br>
年 龄:<input type="text" name="age"><br>
性 别: 男<input type="radio" value="男" name="sex"> 女<input type="radio" name="sex" value="女">
<input type="submit" value="注册">
</form>
</body>
</html>
—zhecudo注册判断
<%@page import="javabean.DBUtil"%>
<%@ page import="javabean.User" %>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<%
//获取传递过来的数据
String username=request.getParameter("username");
String password=request.getParameter("password");
//将request.getParameter();转换成为int型,使用Integer.parseInt()方法
int age=Integer.parseInt(request.getParameter("age"));
//因为在运行是系统会用默认的编码格式对传入的数据进行编码而原本的iso-8859-1,而这编码格式没有中文因此会产生乱码问题
//通过系统默认的编码格式进行解码,在通过设置utf-8的编码
String sex=new String(request.getParameter("sex").getBytes("iso-8859-1"),"utf-8");
//创建DBUtil类对注册的用户数据进行判断
DBUtil util=new DBUtil();
Boolean b=util.addUser(username, password, age, sex);
// User user=DBUtil.LoginUser(username, password);
User user=DBUtil.LoginUser(username, password);
if(b==true){
//注册成功后用getRequestDispatcher将页面跳转到登录页面,setAttribute用来传递不同的参数
//在登录界面接收后呈现出不同的数据用于区分跳转的页面和直接登录页面
// out.print("<script>alert('用户名或密码错误!请重新输入!');window.location.href='home.jsp'</script>");
HttpSession session1=request.getSession();
session1.setMaxInactiveInterval(8);
request.setAttribute("key", "注册成功,请登录!");
session1.setAttribute("user",user);
request.getRequestDispatcher("/home.jsp").forward(request, response);
}
%>
</body>
</html>
—logindo
<%@page import="javabean.User"%>
<%@page import="javabean.DBUtil"%>
<%@ page import="java.io.PrintWriter" %>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<%
// PrintWriter out = response.getWriter();
String username=request.getParameter("username");
String password=request.getParameter("password");
User user=DBUtil.LoginUser(username, password);
HttpSession session1 = request.getSession();
// User user=(User)request.getAttribute("user");
//处理乱码
if(user==null){
request.getRequestDispatcher("home.jsp").forward(request, response);
}else {
// Cookie cookie=new Cookie("user",username);
// cookie.setMaxAge(8);
// response.addCookie(cookie);
// HttpSession session1=request.getSession();
// session1.setMaxInactiveInterval(8);
// session1.setAttribute("user",user);
// HttpSession session1 = request.getSession();
// session1.setAttribute("user",user);
// out.println("登录成功!");
//登录成功跳转到用户信息页面
session1.setAttribute("user", user);
// response.sendRedirect("/mvc/flower.jsp");
request.getRequestDispatcher("flower.jsp").forward(request, response);
}
%>
</body>
</html>
—商品页面
<%--
Created by IntelliJ IDEA.
User: yx
Date: 2022/11/6
Time: 10:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table>
<tr>
<td width="100px"></td><td width="100">鲜花名称</td> <td width="100">鲜花单价</td>
</tr>
<form action="buycar.jsp" method="post">
<tr>
<td width="150px"><img style="height:100px" src="./ph/玫瑰花.jpg" name="pic"></td>
<td>玫瑰花</td>
<td>$520</td><td>
<input type="submit" name="buy" value="加入购物车"></td>
</tr>
<%--在web开发过程中,对于在页面存储但不需要显示出来的值,我们通常使用上面的代码来存储。--%>
<input type="hidden" name="flowername" value="玫瑰花">
<input type="hidden" name="price" value="$520">
</form>
<form action="buycar.jsp" method="post">
<tr>
<td width="150px"><img style="height:100px" src="./ph/五彩花.jpg" name="pic"> </td>
<td>五彩花</td>
<td>$400</td><td>
<input type="submit" name="buy" value="加入购物车"></td>
</tr>
<%-- <input type="hidden" name="pic" value="img">--%>
<input type="hidden" name="flowername" value="五彩花">
<input type="hidden" name="price" value="$400">
</form>
<form action="buycar.jsp" method="post">
<tr>
<td width="150px"><img style="height:100px" src="./ph/拜杰花.jpg" name="pic"></td>
<td>拜杰花</td>
<td>$150</td><td>
<input type="submit" name="buy" value="加入购物车"></td>
</tr>
<input type="hidden" name="flowername" value="拜杰花">
<input type="hidden" name="price" value="$150">
</form>
<form action="buycar.jsp" method="post">
<tr>
<td width="150px"><img style="height:100px" src="./ph/油头花.jpg" name="pic"></td>
<td>油头花</td>
<td>$230</td><td>
<input type="submit" name="buy" value="加入购物车"></td>
</tr>
<input type="hidden" name="flowername" value="油头花">
<input type="hidden" name="price" value="$230">
</form>
<form action="buycar.jsp" method="post">
<tr>
<td width="150px"><img style="height:100px" src="./ph/紫罗兰.jpg" name="pic" ></td>
<td>紫罗兰</td><td>$140</td>
<td><input type="submit" name="buy" value="加入购物车"></td>
</tr>
<input type="hidden" name="flowername" value="紫罗兰">
<input type="hidden" name="price" value="$140">
</form>
</table>
<a href="buycar.jsp">查看购物车</a>
</body>
</html>
运行结果及报错内容
无法实现session设置时间后,无法跳转到登录页面,拦截器布置到设置哪一个页面
我想要达到的结果
javaweb 登录注册后,设置Filter判断session过期,实现登录比如几秒后自动跳转到登录页面