SpringMVC之如何在html页面获取Session中保存的信息

前两天写代码,遇到这样的一个需求:

保存用户登录信息,如当前用户:XXX;欢迎用户:XXX等

这样的需求看似很简单,将Controller层通过调用Service层的方法,获取用户信息,如用户名,将其保存在Session中,交给前端获取即可。

但是,在前后端分离的场景下,html页面是无法直接获取Session的,就是说,我们无法像在jsp代码中写的那样,直接在前端使用${user.username}获取。

我的解决思路:1)首先想到的是SpringMVC 3.1后新增的RedirectAttributes工具类,调用其中的redirectAttributes.addFlashAttribute方法,但是这种方法只能在重定向后的首个页面有效

就像我展示的页面,跳转到其他任意一页或者重新访问当前页,都无法再次记录该值。

此种方法多次尝试无果后,又换了一种思路。2)先将数据保存在Session中,然后在跳转的第一个页面获取Session值,再交给页面渲染,成功解决问题

//获取用户信息并保存的代码
@RequestMapping(value = "/user", method = RequestMethod.GET)
    public String loginUser(String username, String password,HttpServletRequest request) {
        User user1 = userService.userLogin(username, password);
        HttpSession session = request.getSession();
        if (user1 != null) {
            session.setAttribute("user",user1);
            return "redirect:employee/page/1";
        } else {
            return "error";
        }
    }
//将Session中的数据获取并将信息分享到请求域
@RequestMapping(value = "/employee/page/{pageNum}",method = RequestMethod.GET)
    public String getEmployeePage(@PathVariable("pageNum") Integer pageNum, Model model,HttpServletRequest request){
        User user = (User) request.getSession().getAttribute("user");
        //获取员工的分页信息
        PageInfo<Employee> page = employeeService.getEmployeePage(pageNum);
        //将分页信息共享到请求域
        model.addAttribute("page",page);
        model.addAttribute("user",user);
        //页面跳转
        return "employee_list";
    }
成功保存

 可能有人会问,为什么不使用redirectAttributes.addFlashAttribute方法,在重定向的首个页面获取数据,然后将获取到的数据进行渲染?因为redirectAttributes.addFlashAttribute只能在重定向后的首个页面有效,再次刷新,就无法获取数据了,具体分析可以移步我的上一篇文章《SpringMVC之向域对象中共享数据》

一起学习,共同进步!

五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。


                
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: SpringMVC可以通过HttpServletRequest对象获取Session,具体步骤如下: 1. 在Controller方法添加HttpServletRequest参数。 2. 在方法通过HttpServletRequest对象获取Session。 3. 使用Session对象进行相关操作,如设置属性、获取属性等。 示例代码如下: ``` @RequestMapping("/test") public String test(HttpServletRequest request) { HttpSession session = request.getSession(); session.setAttribute("username", "张三"); String username = (String) session.getAttribute("username"); return "test"; } ``` 在上述代码,我们通过HttpServletRequest对象获取Session,并设置了一个名为“username”的属性,然后又获取了该属性的值。 ### 回答2: 在Spring MVC获取Session的过程非常简单。首先,我们需要在控制器方法的参数列表添加一个HttpServletRequest类型的参数。然后,我们可以使用这个参数的getSession()方法来获取当前请求的Session对象。 下面是一个示例代码: ``` @Controller public class MyController { @RequestMapping("/example") public String handleRequest(HttpServletRequest request) { HttpSession session = request.getSession(); // 在这里可以对Session进行操作,比如设置属性、获取属性等等 return "example"; } } ``` 在这个示例,我们通过调用request.getSession()方法获得了当前请求的Session对象。接下来,我们可以在控制器方法Session进行一些操作,比如设置属性、获取属性等等。最后,我们可以根据需要返回一个视图名称,用于渲染响应。 需要注意的是,如果希望在方法参数直接使用HttpSession对象,可以直接将它作为参数进行接收,而不是通过HttpServletRequest获取: ``` @Controller public class MyController { @RequestMapping("/example") public String handleRequest(HttpSession session) { // 直接使用session对象进行操作 return "example"; } } ``` 通过这种方式,我们可以更为简洁地获取并操作Session对象。 ### 回答3: 在Spring MVC,要获取Session对象非常简单。主要有两种方式可以实现: 1. 使用HttpServletRequest对象进行获取: 在Spring MVC的控制器方法,可以通过使用HttpServletRequest对象来获取Session对象。 可以使用以下代码来实现: ```java @RequestMapping("/example") public String example(HttpServletRequest request) { HttpSession session = request.getSession(); // 进行Session相关操作 return "example"; } ``` 在上述代码,我们通过HttpServletRequest对象的getSession()方法获取Session对象,并进行相关操作。 2. 使用@RequestParam注解获取Session属性: 另一种方式是使用@RequestParam注解来直接获取Session属性。可以通过以下代码实现: ```java @RequestMapping("/example") public String example(@RequestParam("sessionId") String sessionId, HttpSession session) { // 进行Session相关操作 return "example"; } ``` 在上述代码,我们使用@RequestParam注解来获取SessionsessionId,并通过HttpSession类型的参数来获取Session对象。 无论使用哪种方式,都能够方便地获取和操作Session对象。可以通过Session对象来存储和获取用户的相关数据,并实现用户登录状态的维护和跟踪。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuuuZh。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值