您的位置 >首页 > 头条 > 新闻正文

SpringMVC中Session的应用

APP永久免费入口

本篇博文,不仅适用于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 =  RequestContextHolder.getRequestAttributes;
    return attrs.getRequest;
  }
   
  /**
   * 得到Request请求中的Session对象
   * @return
   */
  public static HttpSession getSession {
    HttpSession session = null;
    try {
      session = getRequest.getSession;
    } catch  {
      e.printStackTrace;
    }
    return session;
  }

  /**
   * 移除所有Session
   */
  public static void remove{
    getSession.invalidate;
  }
}


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

EmployeeVOSession 是一个例子,EmployeeVO就是Entity,是可以进行替换的部分。在此类中,需要提供getEmployeeVO、setEmployeeVO 、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  getSession.getAttribute;
  }

  /**
   * 存储当前登录职工信息到 session中
   * @param employeeVO
   */
  public static void setEmployeeVO {
    getSession.setAttribute;
  }
	
  /**
   * 从Session中移除当前登录职工信息
   * @param employeeVO
   */
  public static void removeEmployeeVO {
    getSession.removeAttribute;
  }
  /**
   * 以下两个方法是对常用的获取EmployeeVO类中字段值进行方法提取,方便调用。
   * 也可以在方法中按照指定的方式进行格式化。
   * 不需要的话,可以不写
   */
  public static int getOperaterId{
    return getEmployeeVO.getEmployeeId;
  }
   
  public static String getOperaterName{
    return getEmployeeVO.getName;
  }
}

如何使用

 	//首先我们实例化一个需要存储的实体类
	EmployeeVO employeeVO = new EmployeeVO;
	employeeVO.setName;
	employeeVO.setAge;
	//将实体类添加到Session中
	EmployeeVOSession.setEmployeeVO;
	//从Session中获取实体类
 	EmployeeVO empVOSession = EmployeeVOSession.getEmployeeVO;
 	//获取从Session中获取的实体类的属性值
 	String name = empVOSession.getName;
 	String age = empVOSession.getAge;
	System.out.println;


其它方式

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

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

下一章>>>更多精彩

为您推荐的相关新闻