zoukankan      html  css  js  c++  java
  • spring的普通类中获取session和request对像

     

       在使用spring时,经常需要在普通类中获取session,request等对像.

    1.第一钟方式,针对Spring和Struts2集成的项目:

    在有使用struts2时,因为struts2有一个接口使用org.apache.struts2.ServletActionContext即可很方便的取到session对像.
    用法:

    ServletActionContext.getRequest().getSession();

    例如:

            // 整合了Struts,所有用这种方式获取session中属性(亲测有效)
            User user = (User) ServletActionContext.getRequest().getSession().getAttribute("userinfo");//获取session中的user对象进而获取操作人名字

    2.但在单独使用spring时如何在普通类中获取session,reuqest(亲测有效,注意:与struts整合之后下面方法失效,获取不到session中的值)

    首先要在web.xml增加如下代码:(网上说需要这一步,我在IDEA中没有用这一步也成功了)

     <listener>
            <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
     </listener>

    第一种方式采用自动注入:

    接着在普通类中:

        @Autowired//自动注入request
        private HttpServletRequest request;
        @Autowired
        private HttpSession session;

    例如我的测试:

    package cn.xm.jwxt.controller.system;
    
    import cn.xm.jwxt.bean.system.User;
    import cn.xm.jwxt.service.system.UserService;
    
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import org.apache.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import java.sql.SQLException;
    import java.util.List;
    
    @Controller
    public class UserAction {
        private Logger logger = Logger.getLogger(UserAction.class);
        @Autowired
        private UserService userService;
        @Autowired//自动注入request
        private HttpServletRequest request;
        @Autowired
        private HttpSession session;
    
        /**
         * 根据userCode查询user
         * @param userCode
         * @return
         */
        @RequestMapping("/findUserById.action")
        public @ResponseBody
        User findUserById(String userCode){
            User user = null;
            try {
                user = userService.findUserByUsercode(userCode);
                Object username = session.getAttribute("username");
                System.out.println(username.toString());
            } catch (SQLException e) {
                logger.error("根据userCode查询user出错",e);
            }
            return user;
        }
    /**
         * 测试环境
         * @return
         */
        @RequestMapping("/test.action")
        public @ResponseBody
        String testEnv() {
            //通过自动注入session之后保存一个属性
            session.setAttribute("username","qlq");
            return "success";
        }
    }

    第二种方式使用RequestContextHolder获取:

                //获取request与session
                HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
                HttpSession session = request.getSession(false);

    例如我的测试:

    package cn.xm.jwxt.controller.system;
    
    import cn.xm.jwxt.bean.system.User;
    import cn.xm.jwxt.service.system.UserService;
    
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import org.apache.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import java.sql.SQLException;
    import java.util.List;
    
    @Controller
    public class UserAction {
        private Logger logger = Logger.getLogger(UserAction.class);
        @Autowired
        private UserService userService;
        /**
         * 根据userCode查询user
         * @param userCode
         * @return
         */
        @RequestMapping("/findUserById.action")
        public @ResponseBody
        User findUserById(String userCode){
            User user = null;
            try {
                user = userService.findUserByUsercode(userCode);
                //获取request与session
                HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
                HttpSession session = request.getSession(false);
                Object username = session.getAttribute("username");
                System.out.println(username.toString());
            } catch (SQLException e) {
                logger.error("根据userCode查询user出错",e);
            }
            return user;
        }/**
         * 测试环境
         * @return
         */
        @RequestMapping("/test.action")
        public @ResponseBody
        String testEnv() {
            //获取request与session
            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
            HttpSession session = request.getSession(false);
            session.setAttribute("username","qlq");
            return "success";
        }
    }
  • 相关阅读:
    lnmp环境搭建
    Git常用命令
    博客园写随笔环境搭建
    Win常用软件
    Docker环境搭建
    ESP-8266 RTOS 环境搭建
    查看Linux信息
    博客园markdown语法
    Java后台技术(TDDL)
    Java后台技术(Dubbo入门)
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/8747136.html
Copyright © 2011-2022 走看看