什么是Session;request.getSession().setAttribute()
Session:会话控制,是服务器为了保存用户状态而创建的一个特殊的对象。=>用于存储信息的一个对象

当我们在服务端使用session时,首先要获取session,下面这个图就对服务器获取session的一些情况进行了说明。

Session常用方法
————————————————————————————————
resquest.getSession():得到请求游览器(客户端)对应的session。如果没有,那么就创建应该新的session。如果有那么就返回对应的session
setAttribute(String s, Object o):在session存放属性
getAttribute(String s):从session中得到s所对应的属性
========================================================
removeAttribute(String s):从session中删除s对应的属性
getId():得到session所对应的id
invalidate():使session立即无效
setMaxInactiveInterval(int i):设置session最大的有效时间。注意,这个有效时间是两次访问服务器所间隔的最大时间,如果超过最大的有效时间,那么这个session就失效了。
以房产管理系统登陆界面举例【login.jsp】
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
<link rel="stylesheet" href="<%=request.getContextPath()%>/resources/css/style.css">
<link rel="stylesheet" href="<%=request.getContextPath()%>/resources/css/index_work.css">
<style>
#cont {
text-align: center;
margin-left: 240px;
padding: 20px;
}
</style>
</head>
<body>
<jsp:include page="top.jsp"/>
<div id="cont" style="margin-top: 140px ">
<form method="post" action="${pageContext.request.contextPath}/LoginServlet?type=trueLogin">
<div style="margin-top: 30px">
<label style="color: white">
用户名:
<input type="text" name="username">
</label>
</div> <div style="margin-top: 30px">
<label style="color: white">
密码:
<input type="password" name="password">
</label>
</div>
<div style="margin-top: 30px; padding-left: 60px" >
<select name="state">
<option>客户</option>
<option>经纪人</option>
<option>管理员</option>
</select>
</div> <div style="margin-top:50px">
<input type="submit" value="登录">
<input type="button" value="注册" onclick="location.href='/LoginServlet?type=toRes'">
</div>
<jsp:include page="bottom.jsp"/>
</form>
<h1 style="color: white">${mes}</h1>
</div>
</body>
<%request.getSession().setAttribute("mes", null);%>
</html>
【LoginServlet.java】
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置对客户端请求进行重新编码,防止乱码
req.setCharacterEncoding("UTF-8");
//它是一种获取参数的方法,把jsp文件中的数据读取出来,然后就可以封装利用
String type = req.getParameter("type");
// 校验
System.out.println(type);
if (type == null) {
/*
在学习jsp与后台数据交互内容时,我们会接触到两种类型的跳转
客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的test.jsp
即在servlet中调用转发语句
假设你去办理某个执照,
重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。
转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。
*/
req.getRequestDispatcher("/WEB-INF/login.jsp").forward(req, resp);
}
switch (type) {
case "trueLogin": {
// 接收信息,得到用户名和密码
String userName = req.getParameter("username");
String passWord = req.getParameter("password");
String state = req.getParameter("state");
if (userName == null || passWord == null || "".equals(userName.trim()) || "".equals(passWord.trim())) {
req.getSession().setAttribute("mes", "您的账号或密码不能为空!");
resp.sendRedirect("/LoginServlet");
return;
}
if (state.equals("客户")) {
CustomerServiceImpl customerService = new CustomerServiceImpl();
Customer customer = customerService.login(userName);
if (customer == null) {
req.getSession().setAttribute("mes", "您的账号不正确!请重新输入...");
resp.sendRedirect("/LoginServlet");
return;
}
if (customer.getPassword().equals(passWord)) {
req.getSession().setAttribute("customer", customer);
resp.sendRedirect("/Customer?type=toIndividual");
} else {
req.getSession().setAttribute("mes", "您的密码不正确!请重新输入...");
resp.sendRedirect("/LoginServlet");
}
}
if (state.equals("经纪人")) {
RealestateServiceImpl realestateService = new RealestateServiceImpl();
Realestate realestate = realestateService.login(userName);
if (realestate == null) {
req.getSession().setAttribute("mes", "您的账号不正确!请重新输入...");
resp.sendRedirect("/LoginServlet");
return;
}
if (realestate.getPassword().equals(passWord)) {
req.getSession().setAttribute("realestate", realestate);
resp.sendRedirect("/Property?type=toToIndividual");
return;
} else {
req.getSession().setAttribute("mes", "您的密码不正确!请重新输入...");
resp.sendRedirect("/LoginServlet");
}
}
if (state.equals("管理员")) {
AdminService adminService = new AdminServiceImpl();
AdminEntity adminEntity = adminService.getAdminByUserName(userName);
if (adminEntity == null) {
req.getSession().setAttribute("mes", "您的账号不正确!请重新输入...");
resp.sendRedirect("/LoginServlet");
return;
}
if (adminEntity.getPwd().equals(passWord)) {
req.getSession().setAttribute("adminEntity", adminEntity);
resp.sendRedirect("/AdminServlet?type=admin");
return;
} else {
req.getSession().setAttribute("mes", "您的密码不正确!请重新输入...");
resp.sendRedirect("/LoginServlet");
return;
}
}
break;
}
case "toRes": {
req.getRequestDispatcher("/WEB-INF/register.jsp").forward(req, resp);
break;
}
case "trueRes": {
String userName = req.getParameter("username");
String passWord = req.getParameter("password");
String z_passWord = req.getParameter("z_password");
Integer state = Integer.valueOf(req.getParameter("state"));
if (state == null || "".equals(state) || userName == null || passWord == null || z_passWord == null || userName.trim().equals("") || passWord.trim().equals("") || z_passWord.trim().equals("")) {
req.getSession().setAttribute("mes", "您的账号、密码、确认密码不能为空!");
req.getRequestDispatcher("/WEB-INF/register.jsp").forward(req, resp);
} else if (passWord.equals(z_passWord)) {
AdminService adminService = new AdminServiceImpl();
AdminEntity adminEntity = new AdminEntity();
adminEntity.setUserName(userName);
adminEntity.setPwd(passWord);
adminEntity.setState(state);
boolean b = adminService.addUser(adminEntity);
if (b) {
req.getSession().setAttribute("mes", "注册成功...");
resp.sendRedirect("/LoginServlet");
}
} else {
req.getSession().setAttribute("mes", "您输入的两次密码不一致!");
req.getRequestDispatcher("/WEB-INF/register.jsp").forward(req, resp);
}
break;
}
case "loginExit": {
resp.sendRedirect("/LoginServlet");
}
}
}
}
参考链接:https://blog.csdn.net/m0_51545690/article/details/123384986
什么是Session;request.getSession().setAttribute()的更多相关文章
- request.getSession().setAttribute("",..)和request.setAttribute("",...)的差别
request.getSession.setAttribute()是获得当前会话的session,然后再setAttribute到session里面去,有效范围是session而不是request. ...
- HttpServletRequest中的request.setAttribute()和request.getSession().setAttribute()
request.setAttribute("num",value):有效范围是一个请求范围,不发送请求的界面无法获取到value的值,jsp界面获取使用EL表达式${num}:re ...
- 如何获得 request, "request.getSession(true).setAttribute("a",a);"与“request.setAttribute("a",a);”区别
protected ServletContext getServletContext() { return ServletActionContext.getServletContext();} pro ...
- 转:request.getSession(true)和request.getSession(false)的区别
1.转自:http://wenda.so.com/q/1366414933061950?src=150 概括: request.getSession(true):若存在会话则返回该会话,否则新建一个会 ...
- (转)request.getSession()几种获取情况之间的差异
一.三种情况 HttpSession session = request.getSession(); HttpSession session = request.getSession(true); H ...
- request.getSession();为什么不用response儿用request!
首先回答为什么分别是response和request这两个内置对象.你得先明白你通过获取对象是做什么用的,是往哪用的.第一个PrintWriter out=response.getWriter()是想 ...
- 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)--转
出处:http://blog.csdn.net/xxd851116/archive/2009/06/25/4296866.aspx [前面的话] 在网上经常看到有人对request.getSessio ...
- 【转】于request.getSession(true/false/null)的区别
http://blog.csdn.net/gaolinwu/article/details/7285783 关于request.getSession(true/false/null)的区别 一.需求原 ...
- request.getSession()几种获取情况之间的差异
一.三种情况如下 HttpSession session = request.getSession(); HttpSession session = request.getSession(true); ...
- request.getSession(true)和request.getSession(false)的区别
request.getSession(true)和request.getSession(false)的区别 request.getSession(true):若存在会话则返回该会话,否则新建一个会 ...
随机推荐
- 【Nacos篇】Nacos基本操作及配置
官方文档:https://nacos.io/zh-cn/docs/v2/ecology/use-nacos-with-spring-cloud.html 前置条件:SpringCloud脚手架 单机模 ...
- 用python用户注册和短信验证码逻辑实现案例
一.写代码前分析(逻辑分析OK了才可以顺利成章的敲代码): A.用户发送请求 1.注册账号(用户名不能重复)--按照需求进行判断 2.短信验证码(有效期5分钟)--对短信验证码进行保存 B.用户注册. ...
- Linux 内核设备驱动程序的IO寄存器访问 (上)
Linux 内核提供了一套可缓存的设备 IO 寄存器访问机制,即 regmap.regmap 机制支持以统一的接口,访问多种不同类型的设备 IO 寄存器,如内存映射的设备 IO 寄存器,和需要通过 I ...
- 完全卸载MySQL服务的方法
1. 重新运行安装文件,单击remove移除mysql.此时安装目录中的文件没有完全移除,需要手动删除安装目录的Mysql文件夹. 2. 如果MySQL服务没有移除的话,以管理员方式运行cmd命令:s ...
- Dami 基于事件总线的本地过程调用框架(首次发版)
Dami,专为本地多模块之间通讯解耦而设计(尤其是未知模块.隔离模块.领域模块).零依赖,特适合 DDD. 特点 结合 Bus 与 RPC 的概念,可作事件分发,可作接口调用,可作异步响应. 支持事务 ...
- 使用docker搭建seafile服务器
工作需要在单位和家里的不同电脑上同步指定文件夹及其内容.对比了一些解决方案,最终还是选择熟悉的seafile来做. 需要按照官方文档进行seafile的安装,选择官方推荐的docker方式快速部署. ...
- LeetCode 周赛上分之旅 #46 经典二分答案与质因数分解
️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ...
- 创建第一个C语言文件
创建第一个C语言文件 新建=>项目=>空项目 创建.c文件 我们学的是C语言,c++就不写了 调整字体 快捷键:Ctlr + 鼠标滚轮 通过工具调整 工具库与main()函数 打开一个工具 ...
- python3利用smtplib发送、抄送邮件并附带附件
python3利用smtplib发送.抄送邮件并附带附件 1. 导包 import smtplib from email.mime.text import MIMEText from email.mi ...
- Jenkins 命令执行 -- jetty 敏感信息泄露 --(CVE-2021-2816)&&(CVE-2017-1000353)&&(CVE-2018-1000861)
Jenkins 命令执行 -- jetty 敏感信息泄露 --(CVE-2021-2816)&&(CVE-2017-1000353)&&(CVE-2018-100086 ...