jsp session invalidate
为什么调用invalidate后,再调用session的其他 *** 就会抛出session already invalidated异常?比如:session.setAttribute("name", "Freedom");
session.invalidate();
session.getAttribute("name");
后面调用其他 *** 也是抛出那个异常?
它所谓的失效是指什么?
为什么发生页面跳转之后又可以调用session的 *** 了?
session不是浏览器关闭后再开启才会创建一个新的session吗?
----------------------------------------------
可是按照逻辑来说清空数据跟我调用 *** 有什么冲突呢,清空数据后那我调用 *** 你可以给我返回一个null值呀,为什么会抛出异常,应该不只是清空数据吧
session.invalidate()是将session设置为失效
但是session失效的同时 浏览器会立即创建一个新的session的
你之一个session已经失效了 所以调用它的getAttribute *** 时候一定会
抛出NullPointerException的
jsp 的session为什么会变化
jsp 的session为什么会变化不太方便上传代码。大体是这样的是一个jsp+javabean的登录程序首先是登录界面 login.jsp 提交表单后action跳转至判断用户名和密码的界面 judge.jsp , 匹配成功后 将用户名username存入session中,转发至登录成功的界面 success.jsp,此界面将session中的username取出来判断。
有两种情况session的id发生变化
①我先成功登录后,从后端得到一个session的id,但此时我在同一浏览器再新建一个标签页直接进入success.jsp 得到的session的id却不同。
②先登录成功跳转至success.jsp界面,得到一个id,然后我在此界面上返回登录界面login.jsp,再刷新,获取一个id。结果两个id不同
session值变化,说明某操作已经给session重新赋值。比如原本session.setAttribute("username","Amy"),后来悠悠某步骤session.setAttribute("username","Sky"),
此时session.getAttribute("username").toString() == "Sky"
所以session的attr值重新赋值当然会变化。session值变化肯定是重新赋值的原因分享相关内容的知识扩展:
如何将 *** P中复选框中的选中项存入session中
写了个简单例子,但出错了food.jsp:
<body>
这里是调料柜台,请选择您要购买的调料。
<form action="count.jsp">
<input type="checkbox" name="box" id="one" value="调和油">调和油
<input type="checkbox" name="box" id="two" value="强化盐">强化盐
<input type="checkbox" name="box" id="three" value="多维醋">多维醋
<input type="checkbox" name="box" id="four" value="绿色饮料 ">绿色饮料
<br/>
<input type="submit" value="购买">
</form>
</body>
count.jsp:
<body>
购物车中的商品清单:
<%
String checkValue[]=request.getParameterValues("box");
for(int i=0;i<checkValue.length;i++){
if(checkValue[i]!=null){
session.setAttribute("box",checkValue[i]);
String th=(String) session.getAttribute("box");
out.print(th);
}
}
%>
</body>
没有MVC架构,只是在 *** P中,感觉这么写是错的...会员卡号那个请忽略...

乱码的问题是没有设置编码方式;
你应该知道:表单提交的汉字问题涉及客户端和服务器的完整交互过程;客户端和服务器用gb2312进行编码;而http传输用的是ISO-8859-1编码;所以要想得到表单提交中的value,需要修改一下
<%
String checkValue[]=request.getParameterValues("box");
for(int i=0;i<checkValue.length;i++){
if(checkValue[i]!=null){
session.setAttribute("box",checkValue[i]);
String th=(String) session.getAttribute("box");
th=new String(th.getBytes("ISO-8859-1"));
out.print(th);
}
}
%>
或者
<%
request.setCharacterEncoding("gb2312");
String checkValue[]=request.getParameterValues("box");
for(int i=0;i<checkValue.length;i++){
if(checkValue[i]!=null){
session.setAttribute("box",checkValue[i]);
String th=(String) session.getAttribute("box");
out.print(th);
}
}
%>还有一个问题,你这段代码肯定达不到你想要的目的,checkvalue会显示你所有的value值,而不是你在购物页面选中的。
Struts2想维护一个用户的会话登录信息,将一个Bean放到Session里面去,在 *** P页面得到它的属性,出错了:
我在 *** P中这样找他的属性:“欢迎用户${sessionScope.user.ClName},您已经登录! ”。结果出错了,错误提示在:type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: Property 'ClName' not found on type po.Client
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:500)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:428)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
…………
上面错误中说“'ClName' not found on type po.Client”,明明这个Client类中有ClName属性呀。
另外,顺便看一下吧,这个的标签判断貌似有错误的:
<s:if test="null == user">
欢迎用户${sessionScope.user.ClName},您已经登录!
</s:if>
<s:else>
没有登录。
</s:else>
它问题执行前面<s:if>中的语句,不执行<s:esle>中的,为什么呢?
user就是那个Bean了:
ActionContext.getContext().getSession().put("user" , client);
用s标签取试试<s:property value="#session.user.CIName"/>
*** P中判断session是否为空,如果为空则打开登录窗口,窗口是Div,怎么做?
如题<% String name=(String)session.getAttribute("adminname");
if(name!=null){%>
+显示内容
<%}else{ %>
<%response.sendRedirect("index.jsp"); %>
<%} %>
否则跳回主页,这个我弄的一个后台验证的代码!