鱼C论坛

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

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

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

import edu.zjku.bean.User;
import edu.zjku.service.UserService;
import edu.zjku.service.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

//这是处理登录的Servlet
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取用户登录的信息
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        //核实用户登录信息
        UserService service = new UserServiceImpl();
        List<User> list = service.selectAll();
        //下面是一个用来记录用户是否存在的变量
        boolean exist = false;
        for (User u : list
        ) {
            //判断数据库中是否存在用户名
            if (username.equals(u.getUsername())) {
                //若存在,判断密码是否正确
                exist = true;
                if (password.equals(u.getPassword())) {
                    resp.getWriter().write("欢迎登录," + username + "!");
                    System.out.println("登录成功!");
                    //将登录信息存入会话域
                    req.getSession().setAttribute("username", user);
                    break;
                } else {
                    resp.getWriter().write("密码错误!");
                    System.out.println("登录失败!");
                    break;
                }
            }
        }
        //用户不存在,输出提示信息
        if (!exist){
            System.out.println("用户不存在!");
            resp.getWriter().write("该用户不存在!");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
想要读取并使用刚才存入会话域中的Servlet
package edu.zjku.controller;

import edu.zjku.bean.Blog;
import edu.zjku.bean.User;
import edu.zjku.service.BlogService;
import edu.zjku.service.BlogServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
//这是写入博客的Servlet
@WebServlet("/writeServlet")
public class WriteServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        BlogService service = new BlogServiceImpl();
        HttpSession session = req.getSession();
        Object username = session.getAttribute("username");
        if (username!=null){
            //获取前台输入的信息
            String title=req.getParameter("title");
            String text=req.getParameter("text");
            //从Session域读取username
            String user=String(username);
            Blog blog = new Blog(title,text,user);
            service.insert(blog);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
最佳答案
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()方法将其转换为字符串。

以下是修改后的代码:
package edu.zjku.controller;

import edu.zjku.bean.Blog;
import edu.zjku.bean.User;
import edu.zjku.service.BlogService;
import edu.zjku.service.BlogServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

通过以上步骤,你可以在另一个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()方法将其转换为字符串。

以下是修改后的代码:
package edu.zjku.controller;

import edu.zjku.bean.Blog;
import edu.zjku.bean.User;
import edu.zjku.service.BlogService;
import edu.zjku.service.BlogServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 02:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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