首页 > 其他分享 >Servlet Session基本概念和使用方法,获取Session对象: 在Servlet中,可以使用HttpServletRequest对象的getSession()方法来获取当前请求的Sessi

Servlet Session基本概念和使用方法,获取Session对象: 在Servlet中,可以使用HttpServletRequest对象的getSession()方法来获取当前请求的Sessi

时间:2023-12-04 12:56:27浏览次数:43  
标签:username 对象 Session println Servlet out

Servlet Session基本概念和使用方法,获取Session对象: 在Servlet中,可以使用HttpServletRequest对象的getSession()方法来获取当前请求的Session对象

目录

Session介绍

Session使用步骤

Session示例

LoginServlet

success.jsp

failure.jsp


Session介绍

Session是Web开发中的一种机制,用于在服务器端跟踪和管理用户的状态信息。它允许服务器在用户访问网站期间存储和检索与特定用户相关的数据。

当用户访问服务器时,服务器会为每个用户创建一个唯一的会话,并为该会话分配一个唯一的会话标识符(Session ID)。这个会话标识符通常通过Cookie在客户端保存,但也可以通过URL参数或其他方式传递。通过会话标识符,服务器能够识别特定用户的请求,并在会话中存储和检索数据。

通过使用Session,服务器可以在用户的整个访问过程中保持用户状态,并且可以在不同的页面和请求之间共享数据。这对于实现用户认证、数据共享、购物车管理等功能非常有用。

需要注意的是,Session数据存储在服务器端的内存或其他持久化存储中,因此会对服务器的资源消耗和性能产生影响。

Session使用步骤

1、获取Session对象: 在Servlet中,可以使用HttpServletRequest对象的getSession()方法来获取当前请求的Session对象。如果Session不存在,该方法将创建一个新的Session。

HttpSession session = request.getSession();

2、存储数据: 可以使用Session对象的setAttribute()方法将数据存储在Session中。这个方法接受两个参数,第一个参数是数据的名称(键),第二个参数是要存储的数据(值)。

session.setAttribute("username", "John");

3、获取数据: 可以使用Session对象的getAttribute()方法来获取Session中存储的数据。该方法接受一个参数,即要获取的数据的名称(键),并返回相应的值。

String username = (String) session.getAttribute("username");

4、删除数据: 可以使用Session对象的removeAttribute()方法来从Session中删除特定的数据。

session.removeAttribute("username");

5、设置Session过期时间: 可以通过setMaxInactiveInterval()方法设置Session的过期时间(以秒为单位)。如果在指定的时间内没有对Session进行访问,Session将过期并被销毁。

session.setMaxInactiveInterval(1800); // 设置为30分钟

6、销毁Session: 可以使用Session对象的invalidate()方法手动销毁Session,并释放所有与Session相关的资源。

session.invalidate();

这些是使用Servlet Session的基本方法。通过存储和获取Session数据,可以在不同的HTTP请求之间传递和共享用户信息。请注意,Servlet Session是在服务器端存储数据的,客户端只会收到一个Session ID,而不会直接访问Session数据。

Session示例

演示了如何存储和获取用户的登录状态

LoginServlet

  1. import jakarta.servlet.ServletException;
  2. import jakarta.servlet.annotation.WebServlet;
  3. import jakarta.servlet.http.*;
  4. import java.io.IOException;
  5. import java.io.PrintWriter;
  6. @WebServlet("/login")
  7. public class LoginServlet extends HttpServlet {
  8. private static final long serialVersionUID = 1L;
  9. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  10. throws ServletException, IOException {
  11. String username = request.getParameter("username");
  12. String password = request.getParameter("password");
  13. // 检查用户名和密码是否有效(在此处添加验证逻辑)
  14. if (isValidUser(username, password)) {
  15. // 创建Cookie对象
  16. Cookie userCookie = new Cookie("username", username);
  17. // 设置Cookie的生命周期(这里设置为1小时)
  18. userCookie.setMaxAge(60);
  19. // 将Cookie添加到响应中
  20. response.addCookie(userCookie);
  21. Cookie[] cookies = request.getCookies();
  22. response.setContentType("text/html");
  23. PrintWriter out = response.getWriter();
  24. out.println("<html>");
  25. out.println("<body>");
  26. out.println("<h3>欢迎, " + username + "!</h3>");
  27. out.println("</body>");
  28. out.println("</html>");
  29. } else {
  30. response.setContentType("text/html");
  31. PrintWriter out = response.getWriter();
  32. out.println("<html>");
  33. out.println("<body>");
  34. out.println("<h3>登录失败,请检查用户名和密码。</h3>");
  35. out.println("</body>");
  36. out.println("</html>");
  37. }
  38. if ("A".equals(username) && "123".equals(password)) {
  39. HttpSession session = request.getSession();
  40. session.setAttribute("username", username);
  41. // 重定向到登录成功页面
  42. response.sendRedirect("success.jsp");
  43. } else {
  44. // 重定向到登录失败页面
  45. response.sendRedirect("failure.jsp");
  46. }
  47. }
  48. // 获取所有的Cookie
  49. private boolean isValidUser(String username, String password) {
  50. // 在此处进行用户名和密码的验证,可以连接数据库或使用硬编码的方式进行验证
  51. // 返回true表示验证通过,返回false表示验证失败
  52. // 这里只是一个示例,实际应用中应该使用更安全的验证方式
  53. return "A".equals(username) && "123".equals(password);
  54. }
  55. }

success.jsp

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Login Success</title>
  5. </head>
  6. <body>
  7. <h1>Welcome, <%= session.getAttribute("username") %>!</h1>
  8. <p>登录成功页面</p>
  9. </body>
  10. </html>

failure.jsp

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Login Failure</title>
  5. </head>
  6. <body>
  7. <h1>Login Failed</h1>
  8. <p>登录失败页面</p>
  9. </body>
  10. </html>

原文链接:https://blog.csdn.net/m0_67906358/article/details/131123207

标签:username,对象,Session,println,Servlet,out
From: https://www.cnblogs.com/sunny3158/p/17874682.html

相关文章

  • java中http请求中sessionID的生成方式
    java中http请求中sessionID的生成方式今天的笔记是为了搞清楚4个问题,搞清楚这四个问题,那么我工作上的困难也就解决了。1).sessionId是在什么地方生成的?2).sessionId的生产规则是怎么样的?3).sessionId存储在哪里?4).sessionId可以如何获取?它是在容器里面生成的,spingBoo......
  • 获取HttpServletRequest、HttpServletResponse的几种方式
    获取HttpServletRequest、HttpServletResponse的几种方式获取HttpServletRequest、HttpServletResponse的几种方式1、可以封装为静态方法ServletRequestAttributesservletRequestAttributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();H......
  • 京东面试:说说Cookie、Session和Token的区别?
    东子作为目前传统电商三巨头之一(其他还有阿里巴巴和拼多多),其面试题的难度也中规中矩,总体来说没有其他两家面试难度高,当然薪资也没有其他两家薪资高。其中拼多多的薪资最为离谱,尤其是前几年,听说挖同行的开发人员,薪资可以开到原来薪资的两到三倍,真是变态(但是我喜欢)。东子的面试题......
  • java对象中属性太多,需要对一些属性的值做计算操作
    问题描述:在java中,如果一个对象属性太多,我们需要对一个对象中的全部属性进行取相反值解决方法:在类中定义一个函数如下:我这边对象的属性类型都是BigDecimal类型的publicvoidsetNegateValue()throwsIllegalAccessException{Field[]declaredFields=this.getClass......
  • PHP中对象是按值传递还是按引用传递?
    PHP中对象是按值传递还是按引用传递?1.首先,什么是按值传递和按引用传递?按值传递就是仅仅把值传递过去,相当于传递的是值的拷贝,而按引用传递传递的是内存的地址。在PHP中,如果按引用传递,就是将zval的地址赋给另一个变量,这时,两个变量都指向同一个zval。而按值传递则是复制一个......
  • props传来的每个list对象加属性
    情景:在vue组件获取了js里存储的数据后,想要给获取的list的每一条数据加上相同的属性作为公共部分//页面打开即加载方法mounted(){this.init()},methods:{init(){//给新的进行重新赋d:this.xAxisStyle.forEach((xAxis)=>{xAxis.data=this.x......
  • 后端 Java 对象转 json(不用第三方依赖的拼接方式)
    需求:编写工具类要尽可能不用任意一个jar包依赖,或者尽可能精简原有数据:ArpsParams{actualProduction=[{mouth=2022-07,oilProdDaily=366088.33},{mouth=2022-08,oilProdDaily=380806.78}],predictionSegment=[{mouth=2022-07,oilProdDaily=367832.31},{mouth=2022-0......
  • python 解压可迭代对象赋值给多个变量
    1.2解压可迭代对象赋值给多个变量问题如果一个可迭代对象的元素个数超过变量个数时,会抛出一个ValueError。那么怎样才能从这个可迭代对象中解压出N个元素出来?解决方案Python的星号表达式可以用来解决这个问题。比如,你在学习一门课程,在学期末的时候,你想统计下家庭作业......
  • Java Learning Day4 面向对象基础
    初始化顺序:默认初始化显示初始化构造器初始化(单参先执行)有内部类加载的话,在显式赋值之后,就进行新的加载 Static静态变量:静态成员变量属于类的,完全不需要创建对象使用。 private:同类中缺省:同一包中protected:不同包子类public:不同包 只有成员变量可以用权限修饰符......
  • 初中生就能看懂的Python教程 - 1. hello world、print与对象类型
    上一篇教程我们讲了如何安装Python。可以开始编程了。这一篇文章讲解有关print与变量的内容。不过我没讲怎么使用IDLE。在这里补充一下。PythonIDLE的使用下载完Python之后我们应该可以在开始菜单找到一个程序叫做IDLE,这也是新手最常用的Python编辑器,Python自带的。打开IDLE......