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. RedHat8静默安装was

    前言 was(websphere application server),类似weblogic.tomcat,由IBM开发的一种企业级Java容器. 系统版本:redhat 8.2 was版本:was ...

  2. centos7离线安装harbor

    前言 harbor是一个docker私有仓库,基于docker官方的registry,提供GUI.权限控制.项目管理等功能. 安装harbor前,需要先安装docker和docker-compose ...

  3. .NET Core多线程 (4) 锁机制

    合集:.NET Core多线程温故知新 .NET Core多线程(1)Thread与Task .NET Core多线程(2)异步 - 上 .NET Core多线程(3)异步 - 下 .NET Core ...

  4. 浏览器Xbox 云游戏教程

    我这里使用的是韩国的地方因为延迟和网速会比较快 Xbox 云游戏韩国网站 Xbox.com에서 Xbox Cloud Gaming(베타) 首先插件商店下载一个油猴插件 在系统语言和时区改为韩国 在  ...

  5. 推荐一款免费好用的远程桌面:Getscreen

    因为平时有多台设备要用,所以远程桌面是我经常要使用的工具. 最近,正好看到一款不错的远程桌面软件,马上拿出来推荐给大家,如果有需要的可以看看. 今天要推荐的远程桌面软件就是这款叫Getscreen的软 ...

  6. 带你上手基于Pytorch和Transformers的中文NLP训练框架

    本文分享自华为云社区<全套解决方案:基于pytorch.transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据>,作者: 汀丶 . 1.简介 目标: ...

  7. LSTM推导

    LSTM推导 forward propagation def lstm_cell_forward(xt, a_prev, c_prev, parameters): """ ...

  8. 小知识:vi 查找如何不区分大小写

    在使用vi查找数据库的truncate记录日志时,发现对应语句夹杂了大小写,不够规范: 而vi默认查找是区分大小写的,如何不区分大小写查找指定内容呢? 有两种方式: (1)在查找指令后面额外加上\c标 ...

  9. centos7.6 安装Jenkins

    一.安装java环境 yum install -y java-11-openjdk* 三.将Jenkins存储库添加到yum repos wget -O /etc/yum.repos.d/jenkin ...

  10. WebApi中添加Jwt鉴权

    前言 JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息.一个 JWT 实际上就是一个字符串,它由三部分组成,头部.载荷与签 ...