选择你喜欢的标签
我们会为你匹配适合你的网址导航

    确认 跳过

    跳过将删除所有初始化信息

    SpringMVC中Session的应用

    技术 2021-05-27 18:36

    声明:该文章由作者(朱道来)发表,转载此文章须经作者同意并请附上出处(0XUCN)及本页链接。。

    本篇博文,不仅适用于Session的应用,稍加改动,Request的应用也是如此。本篇博文以实现功能为主,需要使用设计模式的可以自行改造。

    首先需要在web.xml中配置监听器Listener

    然后封装一个可以获得Request与Session的父类(可以为抽象父类,看你的应用的情况决定)

    最后,编写我们需要的Session,继承第二步我们封装的父类即可。


    在web.xml中配置监听器Listener

      <!-- RequestContextHolder顾名思义,持有上下文的Request容器 -->
      <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
      </listener>
    


    RequestSession,需要第三步中继承的父类

    RequestSession类为我们之后的EntitySession类提供继承,这样可以方便我们对其中的方法进行调取。可以写成抽象类,但是不能实例化了,根据自己情况而定。

    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    /**
     * RequestSession
     * @author 猫小博
     * @date 2018/10/16
     * @time 22:38
     */
    public class RequestSession {
      /**
       * 得到Request请求
       * @return
       */
      public static HttpServletRequest getRequest() {
        ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        return attrs.getRequest();
      }
       
      /**
       * 得到Request请求中的Session对象
       * @return
       */
      public static HttpSession getSession() {
        HttpSession session = null;
        try {
          session = getRequest().getSession();
        } catch (Exception e) {
          e.printStackTrace();
        }
        return session;
      }
    
      /**
       * 移除所有Session
       */
      public static void remove(){
        getSession().invalidate();
      }
    }
    


    EmployeeVOSession 需要存储Session信息的实体类

    EmployeeVOSession 是一个例子,EmployeeVO就是Entity,是可以进行替换的部分。在此类中,需要提供getEmployeeVO()、setEmployeeVO(EmployeeVO employeeVO) 、removeEmployeeVO()三个方法,方便我们之后的使用。当然,你也可以封装其它需要常用的方法。

    如果需要其他的实体Session类,可以比照着EmployeeVOSession类的模板进行封装,需要改动的只是名字,其余部分都不需要进行改动。

    EmployeeVO是自行封装的一个实体类,里面有的属性可以自行封装,例如:name、age等属性。

    // 我们接下来会用到的常量类
    public interface SystemConstant {
      String EMP_IN_SESSION = "employeeVO";
    


    import com.sea.inventory.permission.entity.EmployeeVO;
    import entity.Employee;
    import java.sql.Timestamp;
    /**
     * EmployeeSession
     * 注意此类为final修饰,不可继承
     * @author 猫小博
     * @date 2018/10/16
     * @time 22:35
     */
    public final class EmployeeVOSession extends RequestSession{
      /**
       * 获取session中 当前登录的职工对象
       * @param
       * @return user
       */
      public static EmployeeVO getEmployeeVO() {
        return (EmployeeVO) getSession().getAttribute(SystemConstant.EMP_IN_SESSION);
      }
    
      /**
       * 存储当前登录职工信息到 session中
       * @param employeeVO
       */
      public static void setEmployeeVO(EmployeeVO employeeVO) {
        getSession().setAttribute(SystemConstant.EMP_IN_SESSION, employeeVO);
      }
    	
      /**
       * 从Session中移除当前登录职工信息
       * @param employeeVO
       */
      public static void removeEmployeeVO() {
        getSession().removeAttribute(SystemConstant.EMP_IN_SESSION);
      }
      /**
       * 以下两个方法是对常用的获取EmployeeVO类中字段值进行方法提取,方便调用。
       * 也可以在方法中按照指定的方式进行格式化。
       * 不需要的话,可以不写
       */
      public static int getOperaterId(){
        return getEmployeeVO().getEmployeeId();
      }
       
      public static String getOperaterName(){
        return getEmployeeVO().getName();
      }
    }
    

    如何使用

     	//首先我们实例化一个需要存储的实体类
    	EmployeeVO employeeVO = new EmployeeVO();
    	employeeVO.setName('猫小博');
    	employeeVO.setAge(22);
    	//将实体类添加到Session中
    	EmployeeVOSession.setEmployeeVO(employeeVO);
    	//从Session中获取实体类
     	EmployeeVO empVOSession = EmployeeVOSession.getEmployeeVO();
     	//获取从Session中获取的实体类的属性值
     	String name = empVOSession.getName();
     	String age = empVOSession.getAge();
    	System.out.println("姓名:"+name+" 年龄:"+age);
    


    其它方式

    1.可以在一个类中实现所有的代码,但是这样会违反设计模式的开放封闭原则,不适合团队协作。

    2.不使用继承的父类,使用另一个工具类获取Request和Session的信息,这样也是可以的。

    关注我们

    [超站]友情链接:

    四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
    关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/

    图库