维护用户状态——Spring中session bean的使用
来源:互联网 发布:爱淘宝网红包 编辑:程序博客网 时间:2024/04/25 06:35
我们都知道,在web开发中一旦用户登陆系统,那么在他注销登陆之前,系统需要维护用户的状态,这样他才能看到自己的内容(比如个人主页、消息等)。
那么如何维护用户的状态呢?在Spring中提供了一种bean的作用域机制,可以帮助我们轻松地管理用户状态。
这里用到的主要是session bean,从名字上就能看出来,它的作用域是和session绑定的,也就是说,每一个session会对应一个session bean,session bean之间互不影响。
比如我们这里想要维护的用户状态包括:用户名和工号。为了方便管理,我们建立一个类UserPreferences
public class UserPreferences implements Serializable{/** * */private static final long serialVersionUID = 1L;private String empno;private String name;public String getEmpno() {return empno;}public void setEmpno(String empno) {this.empno = empno;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
现在我们想要做的就是将UserPreferences和session绑定,那么根据bean的作用域机制,我们需要把UserPreferences的作用域设置成session:
<bean id="userPreferences" class="com.test.dto.UserPreferences" scope="session"><aop:scoped-proxy /></bean>
这样的话生成的是一个代理对象,因为在singleton中注入session bean,request bean 或是 global session bean时,singleton bean只会初始化一次,而它的依赖也只会被注入一次。若不加<aop:scoped-proxy/>,那么操作的都是同一个session bean,也就是最早被注入的那个(不过在使用中,我发现不加<aop:scoped-proxy/>是会有错误提示的)。而加上<aop:scoped-proxy/>后,注入到singleton中的userPreferences实际上是一个代理对象,而这个代理对象与userPreferences有着相同的public方法。调用代理对象的方法时,它会去从Http session中寻找真正的userPreferences对象,然后调用其对应的方法。这样我们就可以在singleton(比如Controller)中使用session bean了。
下面做个简单的登陆实例:先来写个登陆页面:
<html><head><title>Login</title></head><body><form action="login" method="post"><table><tr><td>工号:</td><td><input name="empno"/></td></tr><tr><td>姓名:</td><td><input name="name"/></td></tr><tr><td colspan="2"><input type="submit"/></td></tr></table></form></body></html>
然后是登陆的后台方法:
@RequestMapping(value = "/login", method = RequestMethod.POST)public ModelAndView login(Employee employee) {preferences.setEmpno(employee.getEmpno());preferences.setName(employee.getName());ModelAndView mv = new ModelAndView("kft/success.htm");return mv;}
success页面用来展示登陆的用户名和工号:
<html><head><script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js"></script><title>Success</title></head><body>$!preferences.empno<br/>$!preferences.name<br/><input type="button" onclick="logout()" value="logout"></body><script type="text/javascript">function logout(){window.location.href = 'logout';}</script></html>
然后通过logout按钮注销登陆。
Spring的这个机制给我们提供了方便,而本质上,还是利用HttpSession来维护用户的状态的。
- 维护用户状态——Spring中session bean的使用
- Spring在单例bean中使用session、request范围的bean
- 使用spring-session同时用session范围bean的问题
- Spring中Bean的使用
- 维护Web应用程序状态(2)——Session
- 如何在spring普通的bean中获取session对象
- spring bean中parent的使用
- Spring中抽象bean的使用
- Spring中bean的配置与使用
- 用户在线状态维护
- ejb3(session bean)会话bean的使用!!!
- 验证有状态session bean和无状态session bean的区别
- 有状态session bean和无状态session bean的区别
- 有状态和无状态的session bean
- ssh整合系列博客——(3)在jsp中如何使用spring管理的bean
- Spring Bean的使用
- Spring:bean的使用
- Asp.Net编程中,用户状态维护的几种方法 ---(转自Pierce)
- java线程系列---Runnable和Thread的区别
- Linkedin工程师是如何优化他们的Java代码的
- linux下查看进程指令-ps
- Windows的快捷方式打开方式被修改后恢复方法
- Linux下socket传输文件示例
- 维护用户状态——Spring中session bean的使用
- Android Scroller简单用法
- Boost.Asio c++ 网络编程翻译(2)
- [乐意黎原创] php 语法里0不等于null为空的解决办法
- BulletedList控件的使用
- 项目中捕获异常的优化
- dom知识点杂
- win7 asp环境搭建和调试很不错的图文讲解 好东西分享一下啦
- 定时取得进程内存并写入日志