2007-10-17
[Ken原创] Struts里的session用法。
关键字: session
昨天晚上突然遇到一个莫名其妙的问题,可惜因为熄灯没解决好,导致一夜没睡好觉,呵呵,有点过分了…… 于是今天早上就开始捉摸这事儿。
来总结一下:
在Strtus的Model部分,即Bean的部分,以登录模块为例,我试验的代码:
Success时,
False时,
logout.inc代码,
自我感觉这次的问题就出现在,不知道Struts里面scope定义session的话,在Bean里面不人为写session时,struts会自己给个getSession();
还有跟以前在JSP-JSP里面的session有点不同,就在这:
session.setAttribute之前必须得注意写上这一行。
来总结一下:
在Strtus的Model部分,即Bean的部分,以登录模块为例,我试验的代码:
Success时,
//Struts Bean方法里session的用法
String login_name = rs.getString("true_name");
//返回和请求相关的session
HttpSession session = request.getSession();
//把truename的属性值login_name保存在session对象中
session.setAttribute("truename", login_name);
False时,
LoginFalse.loginFalse(request);即:调用了LoginFalse类里面的俄静态方法,当然是自己写的,最近刻意养成把所有的东西给封装的习惯,感觉不错。LoginFalse里面的代码,
public static void loginFalse(HttpServletRequest request) {
String login_false = "Your username or password is wrong!!!";
HttpSession session = request.getSession();
session.setAttribute("loginfalse", login_false);
}在login.jsp的代码,
<%String loginwrong = (String) session.getAttribute("loginfalse");
if (loginwrong != null) { %>
<%=loginwrong%>
<%
//销毁session
session.removeAttribute("loginfalse");
}
session.removeAttribute("truename"); %>每页需要用 <%@ include file="inc/logout.inc" %> 来显示用户的true_name以及logout功能实现。
logout.inc代码,
<%String u = (String) session.getAttribute("truename");%>
<%=u%><br/>
<%if (u == null) {%>
<logic:forward name="g_login"/>
<%}%>
<html:link page="/login.jsp">logout</html:link>还有LoginForm里面的not required处理就省略了。
自我感觉这次的问题就出现在,不知道Struts里面scope定义session的话,在Bean里面不人为写session时,struts会自己给个getSession();
还有跟以前在JSP-JSP里面的session有点不同,就在这:
HttpSession session = request.getSession();
session.setAttribute之前必须得注意写上这一行。
评论
fallye
2007-11-12
不是吧。。。怎么这样做啊。。。太麻烦了吧。楼上说的用filter不是很好吗。
colin4k
2007-10-19
既然都用了struts,还搞这一堆jsp代码作甚,05年的时候协助过一个项目,也是这种风格,头疼
Garriot
2007-10-17
同意楼上的,用filter来做更好,而且错误信息也没有必要放到session里,像这种错误信息一般只使用一次,你放到request里forward下去就行了,比你set了再remove安全的多
关于你封装的那个方法:我在做项目的时候是不允许把这种功能封装在调用类外的方法里的,你在这里将request/session带出了他应该存在的范围,会对维护造成一些问题,而且你方法名里也没明确说明里面会对session进行操作,我们也有一些操作session的工具类,但那些类都是用于操作真正的session级别(有session就一直起作用的属性)的属性信息的,你这个信息还算不上这种级别的东西。
关于你封装的那个方法:我在做项目的时候是不允许把这种功能封装在调用类外的方法里的,你在这里将request/session带出了他应该存在的范围,会对维护造成一些问题,而且你方法名里也没明确说明里面会对session进行操作,我们也有一些操作session的工具类,但那些类都是用于操作真正的session级别(有session就一直起作用的属性)的属性信息的,你这个信息还算不上这种级别的东西。
kyo100900
2007-10-17
LZ是不是从ASP转过来的,呵呵INC是ASP常用的经典扩展名啊。
其实在JSP里,include一个INC我感觉不是特别好,加上一些逻辑判断,让JSP页面支离破碎的。
你可以做一个简单的Filter,来过滤。这样使用Session,Request,Response都可在Java代码里去实现了,调试与管理也方便多了
其实在JSP里,include一个INC我感觉不是特别好,加上一些逻辑判断,让JSP页面支离破碎的。
你可以做一个简单的Filter,来过滤。这样使用Session,Request,Response都可在Java代码里去实现了,调试与管理也方便多了
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 13726 次
- 性别:

- 来自: 大连

- 详细资料
搜索本博客
最新评论
-
JSP页面EL表达式无效的问 ...
el需要 servlet 2.4 吧
-- by srdrm -
分页显示数据代码
用iBATIS做分页的确很方便。
-- by cyberblue -
DB2——JDBC个人记录 (2)
我用COM.ibm.db2.jdbc.net.DB2Driver 这种方式连接, ...
-- by 燕子~~ -
JSP页面EL表达式无效的问 ...
EL要在jstl2.0以上才能支持
-- by yangpeihai -
Spring常用Interface&Clas ...
对对,混淆了,呵呵
-- by gimgen1026






评论排行榜