JSP中session无法获取属性值

JSP中session无法获取属性值,第1张

晕,昨天好像你的意思看错了。

<%

if(sessiongetAttribute("My_Login")!=null)

responsesendRedirect("reloginjsp");

%>

responsesendRedirect("reloginjsp")后,这个页面是执行重定

向后继续执行下面的代码的。。。也就是说下面主体的代码仍然显示。

所以一般要重定向的话,最后都加个return即:

<%

if(sessiongetAttribute("My_Login")!=null)

responsesendRedirect("reloginjsp");

return;

%>

--------------------------------------------------------

if(sessiongetAttribute("My_Login",false)!=null)

responsesendRedirect("reloginjsp");

这样就对了。

后面不写bool值默认就是true,即:查不到就new 一个对象并返回;

false 时差不到就返回null

这样你的错误就很明显了~~

你可以采用传参数,将登陆后的sessionid放到session中 请问你是用struts2做的么如果是你可以参考这个代码<action name="login" class="loginAction"> <result type="redirectAction"> <param name="actionName">Home</param> <param name="ower">${#sessionusersessionId}</param> </result> <result name="input">/loginjsp</result> </action> jsp传参数 利用sessionsetAttribute("attributeName",attribute)或者requestsetAttribute("attributeName",attribute) 示例:User user=new User("shilei"); sessionsetAttribute("userName",user);

思路是这样的。每个用户登陆成功的时候获取他的sessionId 并且把他的用户名当做key sessionId当做value来存到Application里

(也就是容器里。Application是一个容器共用一个)

具体实现:

import comopensymphonyxwork2ActionContext;

ActionContext ac = ActionContextgetContext();

Map sessionMap = acgetSession();

Map applicationMap = acgetApplication();//struts2 吧application这些对象做了封装 所以你对这个map *** 作也就是对Application *** 作。(如果你不习惯这样做 也可以用原始的方法

applicationput(你的用户名, sessionId );

并且要在session里存入你的用户名。

sessionMapput("username", 你的用户名 );

---------------------------------------------

如果有账号登录了。先去applicationMap里找一下。看这个账户有没有登陆

String lu = applicationMapget(username);

if(lu == null){

在applicationMap 里存入相应信息。也就是上面的代码

} else{

如果不等于空,就获取自己的sessionId 然后放入application里把之前的登陆的那个session覆盖掉。

applicationput(username, mySessionId );这里的mySessionId 是自己的sessionId

}

这样做了以后 你要修改你的程序,在每次请求的时候都去你的session里找到你的用户名(在登陆的时候已经保存了)

Srtring username = sessionMapget("username")

然后在application里找到

String sessionId = applicationMapget(username );

在从你session里获取mySessionId 和 sessionId 对比。

如果一样 就继续 如果不一样就跳转到登陆页面。

你可以不修改程序。而去写一个Interceptor,在里面拦截每个请求。这样更方便。

PS:上面的代码里用到struts2 封装的一些session。。等

如果用的不习惯 可以换一下,就写成原始获取session的方法也行。

在Servlet或者是在Struts1中获取当前用户的Session方法是:

);

注意:request的类型是:>Map session = ActionContextgetContext()getSession();

之前看视频时做的笔记,希望能帮到你:

一、OGNL Object Graph Navigation Language

a普通

<li>访问值栈中的action的普通属性: username = <s:property value="username"/> </li>

<li>访问值栈中对象的普通属性(get set方法):<s:property value="userage"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>

<li>访问值栈中对象的普通属性(get set方法): <s:property value="catfriendname"/></li>

<li>访问值栈中对象的普通方法:<s:property value="passwordlength()"/></li>

<li>访问值栈中对象的普通方法:<s:property value="catmiaomiao()" /></li>

<li>访问值栈中action的普通方法:<s:property value="m()" /></li>

b访问静态

<li>访问静态方法:<s:property value="@combjsxtstruts2ognlS@s()"/></li>

<li>访问静态属性:<s:property value="@combjsxtstruts2ognlS@STR"/></li>

<li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>

使用struts 21时,要访问到静态方法就必须在strutsxml中配 <constant name="strutsognlallowStaticMethodAccess" value="true"></constant>

可以参考struts2-core-216jar包下的,orgapachestruts2里面的defaultprperties

c访问普通类的构造方法:<s:property value="new combjsxtstruts2ognlUser(8)"/></li>

d访问List

<li>访问List:<s:property value="users"/></li>

<li>访问List中某个元素:<s:property value="users[1]"/></li>

<li>访问List中元素某个属性的集合:<s:property value="users{age}"/></li> 大括号可以表示集合

<li>访问List中元素某个属性的集合中的特定值:<s:property value="users{age}[0]"/> | <s:property value="users[0]age"/></li>

eSet

<li>访问Set:<s:property value="dogs"/></li>

<li>访问Set中某个元素:<s:property value="dogs[1]"/></li> 访问不到,因为Set没有顺序

<li>访问Map:<s:property value="dogMap"/></li>

<li>访问Map中某个元素:<s:property value="dogMapdog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/></li>

fMap

<li>访问Map中所有的key:<s:property value="dogMapkeys"/></li>

<li>访问Map中所有的value:<s:property value="dogMapvalues"/></li>

<li>访问容器的大小:<s:property value="dogMapsize()"/> | <s:property value="userssize"/> </li>

g投影

<li>投影(过滤):<s:property value="users{#thisage==1}</li> 取到的是一个集合

<li>投影(过滤):<s:property value="users{#thisage==1}[0]"/></li> 问号代表过滤条件

<li>投影:<s:property value="users{^#thisage>1}{age}"/></li> ^表示开始

<li>投影:<s:property value="users{$#thisage>1}{age}"/></li> $表示结尾

<li>投影:<s:property value="users{$#thisage>1}{age} == null"/></li>

二、Struts2-Tags

aproperty

<li>property: <s:property value="username"/> </li>

<li>property 取值为字符串: <s:property value="'username'"/> </li>

<li>property 设定默认值: <s:property value="admin" default="管理员"/> </li> 如果有admin就有,没有就用默认值

<li>property 设定HTML: <s:property value="'<hr/>'" escape="false"/> </li> 是否解析HTML,默认TRUE <hr/>一条横线

<li>property 设定HTML: <s:property value="'<hr/>'"/> </li>

bset

<li>set 设定var,范围为ActionContext: <s:set var="adminPassword" value="password" scope="session"/></li>

<li>set 使用#取值: <s:property value="#adminPassword"/> </li>

<li>set 从相应范围取值: <s:property value="#sessionadminPassword"/> </li>

cbean 定义bean,并使用param来设定新的属性值:

<s:bean name="combjsxtstruts2tagsDog" var="myDog"> 必须要有var,否则不能存放到Struts Context

<s:param name="name" value="'oudy'"></s:param> 必须加单引号,否则访问不到。加了,表示是一个字符串

<s:property value="name"/> 可以通过property 对其进行访问,如果没有var则不能在bean外访问到,原因bean一结束,就会从栈里取走。

</s:bean>

拿出值:<s:property value="#myDogname"/>

dinclude 不常用

<li>include _include1html 包含静态英文文件

<s:include value="/_include1html"></s:include>

</li>

<li>include _include2html 包含静态中文文件

<s:include value="/_include2html"></s:include>

</li>

<li>include _include1html 包含静态英文文件,说明%用法

<s:set var="incPage" value="'/_include1html'" />

<!--<s:set var="incPage" value="%{'/_include1html'}" />-->

<s:include value="%{#incPage}"></s:include> %{}表示将里面的东西按OGNL表达式处理。

</li>

eif elseif else

age = <s:property value="#parametersage[0]" /> <br />

<s:set var="age" value="#parametersage[0]" />

<s:if test="#age < 0">wrong age!</s:if>

<s:elseif test="#parametersage[0] < 20">too young!</s:elseif>

<s:else>yeah!</s:else><br />

<s:if test="#parametersaaa == null">null</s:if>

</li>

fiterator

<li>遍历集合:<br />

<s:iterator value="{1, 2, 3}" >

<s:property/> |

</s:iterator>

</li>

<li>自定义变量:<br />

<s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x"> 定义变量

<s:property value="#xtoUpperCase()"/> |

</s:iterator>

</li>

<li>使用status:<br />

<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">

<s:property/> |

遍历过的元素总数:<s:property value="#statuscount"/> |

遍历过的元素索引:<s:property value="#statusindex"/> |

当前是偶数?:<s:property value="#statuseven"/> |

当前是奇数?:<s:property value="#statusodd"/> |

是第一个元素吗?:<s:property value="#statusfirst"/> |

是最后一个元素吗?:<s:property value="#statuslast"/>

<br />

</s:iterator>

</li>

<li>

<s:iterator value="#{1:'a', 2:'b', 3:'c'}" > 定义Map时要加一个#

<s:property value="key"/> | <s:property value="value"/> <br />

</s:iterator>

</li>

<li>

<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">

<s:property value="#xkey"/> | <s:property value="#xvalue"/> <br />

</s:iterator>

</li>

demo:第一个地方登陆: 1得到请求的SessionId 和 登陆的 用户名 2把SessionId 存到application里,用户名存到当前session里 ActionContext ac = ActionContextgetContext(); MapString, Object applicationMap=acgetApplication(); MapString, Object sesisonMap = acgetSession(); //请求的sessionId String currentSeesionId= getRequest()getSession()getId(); applicationMapput(loanUserEgetUname(), currentSeesionId); sesisonMapput(CommonVarSSO_LOGIN_NAME_KEY,loanUserEgetUname());第二个地方登陆: 1获取浏览器的 SessionId 和取得 登陆的用户名 2在当前的session 里取得 用户名对应的关键字 ,用关键字在application里获取SessionId , 作比较,不相等就跳到登陆。 拦截器: / 初始化参数获得 / ActionContext actionContext = arg0getInvocationContext(); / >

这个应该是存到session吧。session是服务端的,cookie里面存的只是session的ID

这个是存session的方法

public static void setSession(String name ,Object obj){

if(ServletActionContextgetRequest()getSession()getAttribute(name) != null){

ServletActionContextgetRequest()getSession()removeAttribute(name);

}

ServletActionContextgetRequest()getSession()setAttribute(name, obj);

}

这个是取session的方法

public static Object getSession(String name){

return ServletActionContextgetRequest()getSession()getAttribute(name);

}

调用的话也很简单,你就把这两个方法放到一个工具类里面就好了

别忘了给我好评哦~~~~谢了

以上就是关于JSP中session无法获取属性值全部的内容,包括:JSP中session无法获取属性值、后台 把sessionid 怎么返回给 安卓、Struts2的系统怎么做到同一帐号不能多人登陆等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9299392.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存