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. 一文详述流媒体传输网络MediaUni

    一张「多元融合」的网络. 黄海宇|演讲者 大家好,我是阿里云视频云的黄海宇,今天分享主题是MediaUni--面向未来的流媒体传输网络设计与实践. 下面我将会从应用对流媒体传输网络的要求.MediaU ...

  2. AVR汇编(二):AVR架构介绍

    AVR汇编(二):AVR架构介绍 ATmega328P介绍 ATmega328P是Atmel公司(现Microchip公司)推出的一个基于AVR架构的高性能低功耗单片机,拥有32KB的Flash.1K ...

  3. AVR汇编(六):分支指令

    AVR汇编(六):分支指令 分支指令用于改变程序的执行流,分为无条件分支和条件分支两类. 无条件分支指令 JMP JMP 指令用于无条件跳转,类似于C中的 goto 关键字, JMP 指令的跳转范围为 ...

  4. Unity TextMeshPro 添加中文字体遇见的问题以及解决方案

    前言 按标准官方教程为 Unity TextMeshPro 添加中文字体时出现了各种奇奇怪怪的问题,于是有了这篇随笔. 中文字体解决方案 以下步骤适用于 TextMeshPro 3.0.6. 字符数量 ...

  5. 52条SQL语句,性能优化!

    52条SQL语句,性能优化! SQL语句性能优化 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2,应尽量避免在 where 子句中对 ...

  6. SpringBoot 后端配置 Https 教程

    以阿里云为例子 1. 申请 SSL 证书 1. 注册域名 打开阿里云官网,搜索域名 点击域名注册,输入域名,点击搜索 选择心仪的域名,点击购买,打钱 进入域名控制台,进行实名认证 2. 申请 SSL ...

  7. 其它——MyCat实现分库分表

    文章目录 MyCat实现分库分表 一 开源数据库中间件-MyCat 二 MyCat简介 三 MyCat下载及安装 3.1 MySQL安装与启动 3.2使用docker启动多个数据库 3.3 MyCat ...

  8. Composite 组合模式简介与 C# 示例【结构型3】【设计模式来了_8】

    〇.简介 1.什么是组合设计模式? 一句话解释:   针对树形结构的任意节点,都实现了同一接口,他们具有相同的操作,可以通过某一操作来遍历全部节点. 组合模式通过使用树形结构来组合对象,用来表示部分以 ...

  9. 01-spfile和pfile的区别,生成,加载和修复

    oracle数据库的配置文件指的是系统在启动到"nomount"阶段需要加载的文件,也叫做pfile或者spfile,但是其实pfile和spfile是不同的文件. 不同的数据库配 ...

  10. 算法学习笔记(3.1): ST算法

    ST表 在RMQ(区间最值)问题中,著名的ST算法就是倍增的产物.ST算法可以在 \(O(n \log n)\) 的时间复杂度能预处理后,以 \(O(1)\) 的复杂度在线回答区间 [l, r] 内的 ...