会话管理技术实战(用户登录案例)
[1].创建一个User类,封装用户名和密码。
[2].提供一个首页面,欢迎用户登录:IndexServlet,提供一个退出的链接。
[3].提供一个登录的Servlet:处理登录请求。
[4].提供一个退出的Servlet:处理退出首页面的功能。
登录界面:login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/chapter05/LoginServlet" method="post">
用户名:<input type="text" name="username"><br/>
密码: <input type="password" name="password"/><br/>
<input type="submit" value="提交" id="bt"/>
</form>
</body>
</html>
User.java:
package cn.itcast.chapter05.example02;
/*
* alt+shift+a:一次性写多行代码
*/
public class User {
private String name;
private String password;
public User() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
LoginServlet.java(login.html表单的数据提交到了这里)
package cn.itcast.chapter05.example02;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//1.获取用户名和密码
String name=request.getParameter("username");
String psw=request.getParameter("password");
// System.out.println("username="+name+"password="+psw);
//2.判断用户名和密码是否正确 用户名是传智播客 密码是123,就认为是正确的
if("传智播客".equals(name)&&"123".equals(psw)) {
//这里本应查数据库,代码量会更大,暂时模拟一下
//登陆成功,跳转到主页面,保存用户信息
User u=new User();
u.setName(name);
u.setPassword(psw);
HttpSession session=request.getSession();
session.setAttribute("key",u);
//自己创建cookie,让session使用自己的cookie,不用默认cookie
Cookie c=new Cookie("JESSIONID",session.getId());
c.setMaxAge(3600*24*7);
c.setPath("/chapter05");
response.sendRedirect("/chapter05/index");
}else {
//登录失败
response.getWriter().print("用户名和密码错误,登陆失败!");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
IndexServlet.java(登陆成功之后的显示界面)
package cn.itcast.chapter05.example02;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class IndexServlet
*/
public class IndexServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//用来欢迎用户登录,并且显示用户信息
response.setContentType("text/html;charset=utf-8");
//1.获取用户信息
HttpSession session=request.getSession();
User user=(User)session.getAttribute("key");
//2.判断用户是否存在
if(user==null) {//用户不存在,也就是用户根本没有登录
response.sendRedirect("/chapter05/login.html");
}else {
String name=user.getName();
String url="<a href='/chapter05/logOut'>退出</a>";
response.getWriter().print("欢迎您: "+name+" 登录本网站 "+url);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
退出界面:LogOutServlet.java(销毁session)
package cn.itcast.chapter05.example02;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 退出功能
*/
public class LogOutServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//清空session
HttpSession session=request.getSession();
session.removeAttribute("key");
session.invalidate();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
运行服务器之后:
1.现在login.html中输入正确的用户名和密码(用户名输入“传智播客”,密码输入"123")
2.点击提交按钮之后
3.点击退出按钮之后会跳转到LogOutServlet(这个页面功能是销毁session)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?