`
gimgen1026
  • 浏览: 158801 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[Ken原创] Struts里的session用法。

    博客分类:
  • Java
阅读更多
昨天晚上突然遇到一个莫名其妙的问题,可惜因为熄灯没解决好,导致一夜没睡好觉,呵呵,有点过分了…… 于是今天早上就开始捉摸这事儿。

来总结一下:
在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之前必须得注意写上这一行。
分享到:
评论
4 楼 fallye 2007-11-12  
不是吧。。。怎么这样做啊。。。太麻烦了吧。楼上说的用filter不是很好吗。
3 楼 colin4k 2007-10-19  
既然都用了struts,还搞这一堆jsp代码作甚,05年的时候协助过一个项目,也是这种风格,头疼
2 楼 Garriot 2007-10-17  
同意楼上的,用filter来做更好,而且错误信息也没有必要放到session里,像这种错误信息一般只使用一次,你放到request里forward下去就行了,比你set了再remove安全的多

关于你封装的那个方法:我在做项目的时候是不允许把这种功能封装在调用类外的方法里的,你在这里将request/session带出了他应该存在的范围,会对维护造成一些问题,而且你方法名里也没明确说明里面会对session进行操作,我们也有一些操作session的工具类,但那些类都是用于操作真正的session级别(有session就一直起作用的属性)的属性信息的,你这个信息还算不上这种级别的东西。
1 楼 kyo100900 2007-10-17  
LZ是不是从ASP转过来的,呵呵INC是ASP常用的经典扩展名啊。
其实在JSP里,include一个INC我感觉不是特别好,加上一些逻辑判断,让JSP页面支离破碎的。
你可以做一个简单的Filter,来过滤。这样使用Session,Request,Response都可在Java代码里去实现了,调试与管理也方便多了

相关推荐

Global site tag (gtag.js) - Google Analytics