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">
用户名:&nbsp;
<input type="text" name="username">
</label>
</div> <div style="margin-top: 30px">
<label style="color: white">
&nbsp; &nbsp;密码:&nbsp;
<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">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="submit" value="登录">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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()的更多相关文章

  1. request.getSession().setAttribute(&quot;&quot;,..)和request.setAttribute(&quot;&quot;,...)的差别

    request.getSession.setAttribute()是获得当前会话的session,然后再setAttribute到session里面去,有效范围是session而不是request. ...

  2. HttpServletRequest中的request.setAttribute()和request.getSession().setAttribute()

    request.setAttribute("num",value):有效范围是一个请求范围,不发送请求的界面无法获取到value的值,jsp界面获取使用EL表达式${num}:re ...

  3. 如何获得 request, "request.getSession(true).setAttribute("a",a);"与“request.setAttribute("a",a);”区别

    protected ServletContext getServletContext() { return ServletActionContext.getServletContext();} pro ...

  4. 转:request.getSession(true)和request.getSession(false)的区别

    1.转自:http://wenda.so.com/q/1366414933061950?src=150 概括: request.getSession(true):若存在会话则返回该会话,否则新建一个会 ...

  5. (转)request.getSession()几种获取情况之间的差异

    一.三种情况 HttpSession session = request.getSession(); HttpSession session = request.getSession(true); H ...

  6. request.getSession();为什么不用response儿用request!

    首先回答为什么分别是response和request这两个内置对象.你得先明白你通过获取对象是做什么用的,是往哪用的.第一个PrintWriter out=response.getWriter()是想 ...

  7. 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)--转

    出处:http://blog.csdn.net/xxd851116/archive/2009/06/25/4296866.aspx [前面的话] 在网上经常看到有人对request.getSessio ...

  8. 【转】于request.getSession(true/false/null)的区别

    http://blog.csdn.net/gaolinwu/article/details/7285783 关于request.getSession(true/false/null)的区别 一.需求原 ...

  9. request.getSession()几种获取情况之间的差异

    一.三种情况如下 HttpSession session = request.getSession(); HttpSession session = request.getSession(true); ...

  10. request.getSession(true)和request.getSession(false)的区别

    request.getSession(true)和request.getSession(false)的区别   request.getSession(true):若存在会话则返回该会话,否则新建一个会 ...

随机推荐

  1. CodeForces CF1846G 题解

    CodeForces CF1846G 题解 CodeForces题目链接 洛谷题目链接 标准答案是状压之后,转化成Dijkstra算法跑最短路.我这里提供一个不一样的思路. 题意简述 主人公得了病,有 ...

  2. SpringBoot3集成ElasticSearch

    目录 一.简介 二.环境搭建 1.下载安装包 2.服务启动 三.工程搭建 1.工程结构 2.依赖管理 3.配置文件 四.基础用法 1.实体类 2.初始化索引 3.仓储接口 4.查询语法 五.参考源码 ...

  3. Hybrid App 技术路径带动性能的提升

    说到 Hybrid App(混合应用)大家都不陌生,因为这种开发模式大行其道发展的这些年取代了很多原生和 Web 应用,为什么大家对这种「Native + HTML5」的开发模式额外偏爱呢? 因为一方 ...

  4. 解放生产力orm并发更新下应该这么处理求求你别再用UpdateById了

    解放生产力orm并发更新下应该这么处理求求你别再用UpdateById了 背景 很多时候为了方便我们都采用实体对象进行前后端的数据交互,然后为了便捷开发我们都会采用DTO对象进行转换为数据库对象,然后 ...

  5. 【Bash】rm -r 与 rmdir 区别

    目录 背景 二者区别 rmdir rm -r rm -rf 测试过程 配置环境 rmdir rm -r rm -rf 参考资料 背景 今天学弟在使用 NVMe-over-TCP 时发现无法卸载 nvm ...

  6. 用ChatGPT三分钟免费做出数字人视频- 提升自媒体魅力

    本教程收集于:AIGC从入门到精通教程汇总 操作指引 ChatGPT产生文案=>腾讯智影数字人播报=>粘贴文案=>导出视频. 说明:部分资源只有会员才能用~,非会员可生成5分钟视频. ...

  7. MAUI+Masa Blazor APP 各大商店新手发布指南(三)vivo篇

    目录 前言 准备材料 审核流程 测试报告 隐私测试报告 隐私行为数据 其他问题 总结 前言 上架vivo商店,使用厂家的离线推送当然是一个重要原因,与小米不同,vivo的推送服务可以在应用未上架的情况 ...

  8. 这个 AI 机器人会怼人,它是怎么做到的?

    近期,机器人"Ameca"接入了 Stable Diffusion,它一边与旁边的人类工程师谈笑风生,一边熟练地用马克笔在白板上画出一只简笔的猫,最后还在白板右下角签名. 当 Am ...

  9. sql-labs--Less-1--Error based-Single quotes

    sql="SELECT * FROM users WHERE id='id' LIMIT 0,1"; 打开第一关,我们看到如下界面,上面写着Please input the ID ...

  10. 使用 OpenTelemetry 构建 .NET 应用可观测性(2):OpenTelemetry 项目简介

    前世今生 OpenTracing OpenTracing 项目启动于 2016 年,旨在提供一套分布式追踪标准,以便开发人员可以更轻松地实现分布式追踪. OpenTracing 定义了一套 Traci ...