
SpringMVC中Session的应用
本篇博文,不仅适用于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/

随时掌握互联网精彩
- 1 习近平:中国—中亚合作大有可为 7903924
- 2 官方通报“罗帅宇坠楼事件” 7809257
- 3 伊朗退出与美国核谈判 7714683
- 4 外贸品转内销 如何卖得好 7616884
- 5 罗帅宇坠楼后手机拨打110为民警拨出 7524447
- 6 警方认定罗帅宇系跳楼自杀身亡 7426327
- 7 网警公布3起涉高考网络谣言案 7332613
- 8 国防部:要求日方停止危险挑衅行径 7232081
- 9 《歌手》第五期排名公布 7136480
- 10 曾毅回应手表被指含性暗示元素 7047367