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的“粗暴做法”

  • 相关阅读:
    JSP 和Servlet 有有什么关系?
    转发(forward)和重定向(redirect)的区别?
    get和post请求的区别?
    软件的三大类型-单机类型、BS类型、CS类型
    Redis集群搭建
    Tomcat网站上的core和deployer的区别
    spring 事务处理
    mybatis ${}与#{}的区别
    Quartz--Spring 定时任务
    @JsonSerialize @JsonIgnoreProperties @JsonIgnore @JsonFormat
  • 原文地址:https://www.cnblogs.com/deolin/p/7538141.html
Copyright © 2011-2022 走看看