JSP三:学习Session
会话
也叫会话,由于服务器⽆法识别每⼀次 HTTP 请求的出处(也就是不知道来自于哪个终端),它只会接受到⼀个请求信号,所以就存在⼀个问题:万一浏览器将用户的响应发送给了其他的⼈,出现数据错误,所以这时候必须有⼀种技术来让服务器知道请求来自哪里,这就是会话技术。
会话:就是客户端和服务器之间发⽣的⼀系列连续的请求和响应的过程,打开浏览器操作到关闭浏览器的过程。
会话状态:指服务器和浏览器在会话过程中产生的状态信息,借助于会话状态,服务器能够把属于同⼀次会话的⼀系列请求和响应关联起来。
实现会话有两种方式:
- session
- cookie
Session
属于同⼀次会话的请求都有⼀个相同的标识符:sessionID
我们到JSP中去测试一下,新建一个jsp页面,就叫sessiontest.jsp吧
<body>
<%
String id = session.getId();
%>
<%=id%>
</body>
访问该页面,可以看到获取到了ID,我们新建一个页面,再次访问,会发现ID是一样的。
当我们关闭浏览器后重新打开并访问,会发现此时ID就已经不同啦。这就很好的解释了上面说到的会话,客户端和服务器之间发⽣的⼀系列连续的请求和响应的过程,打开浏览器操作到关闭浏览器的过程。
session 常用的方法:
- String getId(): 获取sessionID
- void setMaxInactiveInterval(int interval): 设置 session 的失效时间,单位为秒
- int getMaxInactiveInterval(): 获取当前 session 的失效时间
- void invalidate(): 设置 session ⽴即失效
- void setAttribute(String key,Object value): 通过键值对的形式来存储数据
- Object getAttribute(String key): 通过键获取对应的数据
- void removeAttribute(String key): 通过键删除对应的数据
登录退出
我们使用session的方式来实现登录和退出功能。
首先需要一提的是,我们在写业务代码时几乎没人会写在jsp里面,也就是上一个博客的案例只是为了演示效果,实际上开发我们需要Servlet和JSP搭配使用,下面我们去看看如何操作。
首先我建一个login2.jsp和weclome.jsp,一个作为登录页面,一个作为登录成功后的页面。
我们先写login2.jsp,将用户名密码传递到login路径下进行验证
<form action="login" method="post">
<table>
<tr>
<td>
用户名:
</td>
<td>
<input type="text" name="username">
</td>
</tr>
<tr>
<td>
密码:
</td>
<td>
<input type="password" name="password">
</td>
</tr>
<tr>
<td>
<input type="submit" value="登录">
</td>
<td>
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
我们去写一个Servlet类,起名为Login,映射路径就为login,我们的代码应该写在doPost下,因为我们上面的表单提交的方式为post,我们获取用户名和密码,跟我们预期的进行比较,将用户名保存进session,跳转到weclome.jsp,如果验证不成功则重新回到login2.jsp
这里我们为什么不需要写什么getRequestDispatcher呢,因为我们是使用session的方式保存,不需要将request转发给下一个页面。
@WebServlet("/login")
public class Login extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
if (username.equals("admin")&&password.equals("123456")) {
HttpSession session = req.getSession();
session.setAttribute("username",username);
resp.sendRedirect("weclome2.jsp");
}else{
resp.sendRedirect("login2.jsp");
}
}
}
weclome2.jsp,
<body>
欢迎回来,亲爱的<%=session.getAttribute("username")%><br>
<a href="loginout">退出登录</a>
</body>
我们再去写一个loginout路径的Servlet类,让session失效即可实现退出登录功能。
@WebServlet("/loginout")
public class LoginOut extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getSession().removeAttribute("username");
req.getSession().removeAttribute("password");
resp.sendRedirect("login2.jsp");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
- mac 下卸载mysql的方法
- ZooKeeper 笔记(1) 安装部署及hello world
- mybatis 使用经验小结
- ZooKeeper 笔记(2) 监听数据变化
- 使用C# 和Consul进行分布式系统协调
- 设置 java -jar 的进程显示名称
- 爱浪携手豆瓣内容、腾讯共同发布AI语音耳机
- Win.ini和注册表的读取写入
- ZooKeeper 笔记(4) 实战应用之【消除单点故障】
- 64位centos 下编译 hadoop 2.6.0 源码
- Python基础原理:FP-growth算法的构建
- MFC中如何画带实心箭头的直线
- 非域环境下使用证书设置数据库镜像
- velocity模板引擎学习(3)-异常处理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法