zoukankan      html  css  js  c++  java
  • 在SpringMVC中操作Session、Request、Response对象

    示例

    @Service
    public class UserServiceImpl implements UserService {
    
        @Autowired
        private UserMapper userMapper;
    
        @Override
        public void addOne(UserInput input) throws Exception {
            Integer id = userMapper.insert(input);
            setSessionAttribute("userId", id, Integer.class);
        }
    
        @Override
        public void rollbackAdd() throws Exception {
            Integer id = getSessionAttribute("userId", Integer.class);
            userMapper.remove(id);
        }
    
        private <T> void setSessionAttribute(String key, T value, Class<T> valueClass) {
            RequestAttributes ra = RequestContextHolder.currentRequestAttributes();
            ra.setAttribute(key, value, RequestAttributes.SCOPE_SESSION);
        }
    
        @SuppressWarnings("unchecked")
        private <T> T getSessionAttribute(String key, Class<T> valueClass) {
            RequestAttributes ra = RequestContextHolder.currentRequestAttributes();
            Object value = ra.getAttribute(key, RequestAttributes.SCOPE_SESSION);
            return (T) value;
        }
    
    }

    主要是利用到了RequestContextHolder这个类。

    除此以外,还能通过RequestAttributes对象,分别获得Session、Request、Response对象

        /**
         * 获取HttpServletRequest对象
         */
        public static HttpServletRequest instance() {
            RequestAttributes ra = RequestContextHolder.currentRequestAttributes();
            HttpServletRequest request = ((ServletRequestAttributes) ra).getRequest();
            return request;
        }
    
        /**
         * 获取HttpServletResponse对象
         */
        public static HttpServletResponse instance() {
            RequestAttributes ra = RequestContextHolder.currentRequestAttributes();
            HttpServletResponse response = ((ServletRequestAttributes) ra).getResponse();
            return response;
        }
    
        /**
         * 获取HttpSession对象
         */
        public static HttpSession instance() {
            RequestAttributes ra = RequestContextHolder.currentRequestAttributes();
            HttpServletRequest request = ((ServletRequestAttributes) ra).getRequest();
            HttpSession session = request.getSession();
            return session;
        }

    避免了在控制层用HttpServletRequest入参,然后将request转递到业务层已获取HttpSession的“粗暴做法”

  • 相关阅读:
    ChartCtrl源码剖析之——CChartTitle类
    ChartCtrl源码剖析之——CChartObject类
    如何在BCGControlBar工程的工具栏里面新增下拉列表控件
    如何在BCGControlBar界面库的CBCGPFormView子视图里面添加工具栏
    记一次调试串口设备Bug的经历
    复数学习笔记
    2021 新高考Ⅰ卷数学试卷及答案
    博客搬家了
    塔伯自我指涉由图片生成K值python程序
    塔伯自我指涉公式作图程序(matplotlib)
  • 原文地址:https://www.cnblogs.com/deolin/p/7538141.html
Copyright © 2011-2022 走看看