鱼C论坛

 找回密码
 立即注册
查看: 344|回复: 1

[已解决]java web中存入会话域的字符串如何取出来?

[复制链接]
发表于 2023-11-6 15:29:54 | 显示全部楼层 |阅读模式
5鱼币
假如使用HttpSession的setAttribute()方法往会话域存入了一个字符串username,在另一个Servlet中想要读取这个字符串并使用应该如何操作?getAttribute()读出来的是Object对象,也不能强制转换成字符串,还没读出来的时候也不知道是什么对象,无法调用以及写好的方法。
将数据存入会话域的Servlet
  1. package edu.zjku.controller;

  2. import edu.zjku.bean.User;
  3. import edu.zjku.service.UserService;
  4. import edu.zjku.service.UserServiceImpl;

  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.util.List;

  12. //这是处理登录的Servlet
  13. @WebServlet("/loginServlet")
  14. public class LoginServlet extends HttpServlet {
  15.     @Override
  16.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  17.         //获取用户登录的信息
  18.         String username = req.getParameter("username");
  19.         String password = req.getParameter("password");
  20.         User user = new User();
  21.         user.setUsername(username);
  22.         user.setPassword(password);
  23.         //核实用户登录信息
  24.         UserService service = new UserServiceImpl();
  25.         List<User> list = service.selectAll();
  26.         //下面是一个用来记录用户是否存在的变量
  27.         boolean exist = false;
  28.         for (User u : list
  29.         ) {
  30.             //判断数据库中是否存在用户名
  31.             if (username.equals(u.getUsername())) {
  32.                 //若存在,判断密码是否正确
  33.                 exist = true;
  34.                 if (password.equals(u.getPassword())) {
  35.                     resp.getWriter().write("欢迎登录," + username + "!");
  36.                     System.out.println("登录成功!");
  37.                     //将登录信息存入会话域
  38.                     req.getSession().setAttribute("username", user);
  39.                     break;
  40.                 } else {
  41.                     resp.getWriter().write("密码错误!");
  42.                     System.out.println("登录失败!");
  43.                     break;
  44.                 }
  45.             }
  46.         }
  47.         //用户不存在,输出提示信息
  48.         if (!exist){
  49.             System.out.println("用户不存在!");
  50.             resp.getWriter().write("该用户不存在!");
  51.         }
  52.     }

  53.     @Override
  54.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  55.         doGet(req, resp);
  56.     }
  57. }
复制代码

想要读取并使用刚才存入会话域中的Servlet
  1. package edu.zjku.controller;

  2. import edu.zjku.bean.Blog;
  3. import edu.zjku.bean.User;
  4. import edu.zjku.service.BlogService;
  5. import edu.zjku.service.BlogServiceImpl;

  6. import javax.servlet.ServletException;
  7. import javax.servlet.annotation.WebServlet;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import javax.servlet.http.HttpSession;
  12. import java.io.IOException;
  13. //这是写入博客的Servlet
  14. @WebServlet("/writeServlet")
  15. public class WriteServlet extends HttpServlet {
  16.     @Override
  17.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  18.         BlogService service = new BlogServiceImpl();
  19.         HttpSession session = req.getSession();
  20.         Object username = session.getAttribute("username");
  21.         if (username!=null){
  22.             //获取前台输入的信息
  23.             String title=req.getParameter("title");
  24.             String text=req.getParameter("text");
  25.             //从Session域读取username
  26.             String user=String(username);
  27.             Blog blog = new Blog(title,text,user);
  28.             service.insert(blog);
  29.         }
  30.     }

  31.     @Override
  32.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  33.         doGet(req, resp);
  34.     }
  35. }
复制代码
最佳答案
2023-11-6 15:29:55
在另一个Servlet中读取存入会话域的字符串可以使用HttpSession的getAttribute()方法。由于getAttribute()方法返回的是Object对象,我们可以将其强制转换为字符串。

在想要读取的Servlet中,可以按照以下步骤操作:

1. 获取HttpSession对象:使用HttpServletRequest的getSession()方法获取当前请求的会话对象。

2. 使用getAttribute()方法获取存入会话域的字符串:调用HttpSession对象的getAttribute()方法,传入存入会话域的字符串的键名,即"username"。

3. 将返回的Object对象强制转换为字符串:由于getAttribute()方法返回的是Object对象,我们需要将其强制转换为字符串。可以使用String.valueOf()方法将其转换为字符串。

以下是修改后的代码:

  1. package edu.zjku.controller;

  2. import edu.zjku.bean.Blog;
  3. import edu.zjku.bean.User;
  4. import edu.zjku.service.BlogService;
  5. import edu.zjku.service.BlogServiceImpl;

  6. import javax.servlet.ServletException;
  7. import javax.servlet.annotation.WebServlet;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import javax.servlet.http.HttpSession;
  12. import java.io.IOException;

  13. @WebServlet("/writeServlet")
  14. public class WriteServlet extends HttpServlet {
  15.     @Override
  16.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  17.         BlogService service = new BlogServiceImpl();
  18.         HttpSession session = req.getSession();
  19.         Object username = session.getAttribute("username");
  20.         if (username != null) {
  21.             // 获取前台输入的信息
  22.             String title = req.getParameter("title");
  23.             String text = req.getParameter("text");
  24.             // 将从Session域读取的username转换为字符串
  25.             String user = String.valueOf(username);
  26.             Blog blog = new Blog(title, text, user);
  27.             service.insert(blog);
  28.         }
  29.     }

  30.     @Override
  31.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  32.         doGet(req, resp);
  33.     }
  34. }
复制代码


通过以上步骤,你可以在另一个Servlet中成功读取存入会话域的字符串,并将其使用在后续的逻辑中。

最佳答案

查看完整内容

在另一个Servlet中读取存入会话域的字符串可以使用HttpSession的getAttribute()方法。由于getAttribute()方法返回的是Object对象,我们可以将其强制转换为字符串。 在想要读取的Servlet中,可以按照以下步骤操作: 1. 获取HttpSession对象:使用HttpServletRequest的getSession()方法获取当前请求的会话对象。 2. 使用getAttribute()方法获取存入会话域的字符串:调用HttpSession对象的getAttribute()方法,传入存入会话 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-6 15:29:55 | 显示全部楼层    本楼为最佳答案   
在另一个Servlet中读取存入会话域的字符串可以使用HttpSession的getAttribute()方法。由于getAttribute()方法返回的是Object对象,我们可以将其强制转换为字符串。

在想要读取的Servlet中,可以按照以下步骤操作:

1. 获取HttpSession对象:使用HttpServletRequest的getSession()方法获取当前请求的会话对象。

2. 使用getAttribute()方法获取存入会话域的字符串:调用HttpSession对象的getAttribute()方法,传入存入会话域的字符串的键名,即"username"。

3. 将返回的Object对象强制转换为字符串:由于getAttribute()方法返回的是Object对象,我们需要将其强制转换为字符串。可以使用String.valueOf()方法将其转换为字符串。

以下是修改后的代码:

  1. package edu.zjku.controller;

  2. import edu.zjku.bean.Blog;
  3. import edu.zjku.bean.User;
  4. import edu.zjku.service.BlogService;
  5. import edu.zjku.service.BlogServiceImpl;

  6. import javax.servlet.ServletException;
  7. import javax.servlet.annotation.WebServlet;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import javax.servlet.http.HttpSession;
  12. import java.io.IOException;

  13. @WebServlet("/writeServlet")
  14. public class WriteServlet extends HttpServlet {
  15.     @Override
  16.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  17.         BlogService service = new BlogServiceImpl();
  18.         HttpSession session = req.getSession();
  19.         Object username = session.getAttribute("username");
  20.         if (username != null) {
  21.             // 获取前台输入的信息
  22.             String title = req.getParameter("title");
  23.             String text = req.getParameter("text");
  24.             // 将从Session域读取的username转换为字符串
  25.             String user = String.valueOf(username);
  26.             Blog blog = new Blog(title, text, user);
  27.             service.insert(blog);
  28.         }
  29.     }

  30.     @Override
  31.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  32.         doGet(req, resp);
  33.     }
  34. }
复制代码


通过以上步骤,你可以在另一个Servlet中成功读取存入会话域的字符串,并将其使用在后续的逻辑中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 00:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表