在Web开发中,由于HTTP协议限制,服务器不会保存客户端的状态信息,因此需要一种机制来实现在一个会话期间内对客户端状态信息的保存和共享。这个机制就是Session。
Servlet中Session简介和使用例子
在Web开发中,由于HTTP协议限制,服务器不会保存客户端的状态信息,因此需要一种机制来实现在一个会话期间内对客户端状态信息的保存和共享。这个机制就是Session。
Session简介
Session,它是基于一个用户会话机制的,一旦打开Session,就对站点所有页面的访问都有效。Session是在服务器端保存的一种数据结构,用于跟踪用户的状态。开发者可以把数据存储在Session中,比如保存用户登录信息、用户浏览过的商品信息等。不同的用户拥有独立的Session,因此不同用户之间的数据不会互相干扰。
Session本身是由服务器创建,创建后会生成一个Session ID,通常通过Cookie或URL传递给客户端。当客户端发送请求时,服务端会根据Session ID确定当前请求的Session,相当于实现了客户端和服务端之间的持久性连接。一个Session记录可以包含多个参数,程序通过修改或删除Session记录的属性,实现Session记录的存储。
Session使用例子1
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
HttpSession session = request.getSession();
if(username.equals("admin") && password.equals("admin")){
session.setAttribute("user", "admin");
response.sendRedirect("/index");
}else{
response.sendRedirect("/login.html");
}
}
}
在这个例子中,我们在用户登录成功后,调用了request.getSession()方法,获取当前的Session。我们可以通过调用HttpSession的setAttribute()方法,存储用户信息。用户信息存储之后,我们使用重定向把用户导向系统的首页。
Session使用例子2
@WebServlet("/cart")
public class CartServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
List<String> cartList= (List<String>) session.getAttribute("cart");
if(cartList.size()>0){
cartList.remove(0);
}
PrintWriter out = response.getWriter();
out.println("已删除第一个商品");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
List<String> cartList= (List<String>) session.getAttribute("cart");
if(cartList == null){
cartList = new ArrayList<>();
session.setAttribute("cart", cartList);
}
String commodity= request.getParameter("commodity");
cartList.add(commodity);
PrintWriter out = response.getWriter();
out.println("添加成功");
}
}
这个例子中,演示了如何在Session中保存一个购物车信息,并对购物车信息进行增删操作。当用户第一次访问购物车时,由于Session并未创建,需要先检查Session是否存在,如果不存在,则通过request.getSession()方法创建一个新的Session。在购物车中新增商品时,我们只需要从Session中取出之前的购物车,加入新的商品即可。代码如下所示:
HttpSession session = request.getSession();
List<String> cartList= (List<String>) session.getAttribute("cart");
if(cartList == null){
cartList = new ArrayList<>();
session.setAttribute("cart", cartList);
}
String commodity= request.getParameter("commodity");
cartList.add(commodity);
而删除商品时,只需要从Session中取出购物车列表,移除第一个商品即可,代码如下所示:
HttpSession session = request.getSession();
List<String> cartList= (List<String>) session.getAttribute("cart");
if(cartList.size()>0){
cartList.remove(0);
}
总结
Session提供了一种存储和共享用户会话状态信息的机制,通过在Servlet中使用Session,使得Servlet程序可以实现和用户的长期交互和状态共享。在使用Session的过程中,需要注意Session ID的管理和Session的超时时间等问题,掌握Session机制可以为Web应用的开发带来很多便利。
本文标题为:servlet中session简介和使用例子
基础教程推荐
- Java开发学习之Bean的生命周期详解 2023-01-09
- Java中Pattern用法实例(正则表达式) 2023-02-19
- 浅谈request.getinputstream只能读取一次的问题 2023-08-01
- Netty网络编程实战之搭建Netty服务器 2023-06-10
- Java之对象销毁和finalize方法的使用 2023-02-28
- java线程并发控制同步工具CountDownLatch 2023-04-07
- Spring、SpringMVC和SpringBoot的区别及说明 2023-06-17
- 解析springBoot-actuator项目构造中health端点工作原理 2022-11-05
- 一文了解Java动态代理的原理及实现 2023-02-19
- SpringMVC加载控制与Postmand的使用和Rest风格的引入及RestFul开发全面详解 2023-06-10