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. 牛客小白月赛65 E题 题解

    原题链接 题意描述 构造一个\(1\)到\(n\)的排列,使得其中正好有\(k\)个二元组\((i, j)\)满足,\(1\le i\lt j\le n\) && \(a_i - a_ ...

  2. CentOS系统修改yum源

    看了一下自己之前写的文章,写的那叫一个垃圾.无地自容.作为一个菜鸡.现在不妨在博客上记录一下自己学习的记录,同时发表出来,也算作是对自己的勉励. 吾辈不孤,吾道不寡,诸君加油! 下面进入正题: Cen ...

  3. 音视频FAQ(一):视频直播卡顿

    一.摘要 本文介绍了视频直播卡顿的四个主要原因,用户网络问题.用户设备性能问题.技术路线的选择和实现问题.因本文主要阐述视频直播的卡顿,故技术路线的实现指的是:CDN供应商的实现问题,包含CDN性能不 ...

  4. Unity UGUI的Button组件的介绍及使用

    UGUI的Button(按钮)组件的介绍及使用 1. 什么是UGUI的Button组件? UGUI(Unity GUI)是Unity引擎中的一套用户界面系统,Button(按钮)是其中的一个常用组件. ...

  5. 《最新出炉》系列入门篇-Python+Playwright自动化测试-15-playwright处理浏览器多窗口切换

    1.简介 浏览器多窗口的切换问题相比大家不会陌生吧,之前宏哥在java+selenium系列文章中就有介绍过.大致步骤就是:使用selenium进行浏览器的多个窗口切换测试,如果我们打开了多个网页,进 ...

  6. Programming abstractions in C阅读笔记:p139-p143

    <Programming Abstractions In C>学习第55天,p139-p140,总结如下: 一.技术总结 1.文件I/O操作 文件I/O操作可以分为一下这些步骤: (1)声 ...

  7. 分拣平台API安全治理实战 | 京东物流技术团队

    导读 本文主要基于京东物流的分拣业务平台在生产环境遇到的一些安全类问题,进行定位并采取合适的解决方案进行安全治理,引出对行业内不同业务领域.不同类型系统的安全治理方案的探究,最后笔者也基于自己在金融领 ...

  8. 二叉搜索树(Binary Search Tree,BST)

    二叉搜索树(Binary Search Tree,BST) 二叉搜索树(Binary Search Tree),也称二叉查找树或二叉排序树,是一种特殊的二叉树,它满足以下性质 对于二叉搜索树的每个节点 ...

  9. 使用MySQL存储过程提高数据库效率和可维护性

    MySQL 存储过程是一种强大的数据库功能,它允许你在数据库中存储和执行一组SQL语句,类似于编程中的函数.存储过程可以大幅提高数据库的性能.安全性和可维护性.本文将详细介绍MySQL存储过程的使用. ...

  10. Flutter 编写收音机开源

    之前写的一个 Flutter 收音机,支持桌面端和手机端,在https://www.cnblogs.com/imlgc/p/17536481.html ,写完之后就不怎么管了.后面陆陆续续有人邮件索要 ...