什么是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):若存在会话则返回该会话,否则新建一个会 ...
随机推荐
- [go]封装go的docker镜像
前言 多阶段封装docker镜像,使用scratch镜像,尽量减小镜像包的体积. 封装用于编译的go镜像 Dockerfile FROM golang:1.20.1 AS builder WORKDI ...
- 原神盲盒风格:AI绘画Stable Diffusion原神人物公仔实操:核心tag+lora模型汇总
本教程收集于:AIGC从入门到精通教程汇总 在这篇文章中,我们将深入探讨原神盲盒的艺术风格,以及如何运用AI绘画技术(Stable Diffusion)--来创造原神角色公仔.我们将通过实践操作让读者 ...
- 完全卸载MySQL服务的方法
1. 重新运行安装文件,单击remove移除mysql.此时安装目录中的文件没有完全移除,需要手动删除安装目录的Mysql文件夹. 2. 如果MySQL服务没有移除的话,以管理员方式运行cmd命令:s ...
- Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全
系列文章 Nomad 系列文章 Traefik 系列文章 Tailscale 系列文章 概述 终于到了令人启动的环节了:Nomad+Traefik+Tailscale 集成实现零信任安全. 在这里: ...
- HTML一键打包IPA(苹果IOS应用)工具 网站打包 APP
工具简介 HTML一键打包IPA(苹果应用)工具可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码,支持在苹果设备上安装运行. 该软件已经被GDB苹果网页一键打包工具取代,详 ...
- Visual Studio 2022 设置代码补全
Visual Studio 2022 设置代码补全 VS默认使用 Tab 键进行代码补全. 若要使用回车补全需要重新设置,具体路径如下: 工具----选项----文本编辑器----C/C++--- ...
- 【Azure 存储服务】访问Azure Blob File遇见400-Condition Headers not support错误的解决之路
问题描述 在微软云存储账号的服务中,存储一些静态图片,然后通过App Service访问,但是遇见了400 - condition headers not support 错误. 在单独通过浏览器访问 ...
- Go 语言开发环境搭建
Go 语言开发环境搭建 目录 Go 语言开发环境搭建 一. GO 环境安装 1.1 下载 1.2 Go 版本的选择 1.3 安装 1.3.1 Windows安装 1.3.2 Linux下安装 1.3. ...
- MQ系列16:MQ实现消息过滤处理
MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系 ...
- 19. 从零开始编写一个类nginx工具, 配置数据的热更新原理及实现
wmproxy wmproxy是由Rust编写,已实现http/https代理,socks5代理, 反向代理,静态文件服务器,内网穿透,配置热更新等, 后续将实现websocket代理等,同时会将实现 ...