您的位置:首页 > 其它

session 存放对象变量,及遇到的奇怪现象

2014-03-24 22:07 288 查看
本程序为简单测试程序,自己编写调试可用

1.为了说明session的使用

2.为了解开自己的疑惑

list.java //辅助类

package guo;

import java.util.ArrayList;

public class list {

private ArrayList<String> ss;

public list() { // 构造方法

ss = new ArrayList<String>();
}

public ArrayList<String> getlist() {
return ss; // 得到字符串列表
}

public void addlist(String s) {
ss.add(s); // 添加字符串
}

public void delelist(String s) {
ss.remove(s); // 删除字符串
}

}


index.jsp //session中放入list对象

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ page import="guo.list"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>

<body>

<%
list li =new list();                  //实例一个list对象
li.addlist(new String("guolilu"));    //给list添加第一个字符串
li.addlist(new String("mateng"));	   //添加第二个

session.setAttribute("list",li);    //放到session中

li.addlist(new String("liweilong"));  //添加第三个
li.addlist(new String("guozhe"));     //添加第四个

%>
<a href="show.jsp"><h1>
next page
</h1>
</a>
</body>
</html>


show.jsp //session中取list对象

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page import="guo.list"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'hello.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<%
list guo;   //声明一个list型变量
guo=(list)session.getAttribute("list");   //session中list对象
%>
the number of string in list:
<br>
<%=guo.getlist().size()%>
</body>
</html>


运行结果: the number of string in list: 4

分析: 大家注意到 index.jsp 中第28行开始,我向list中放入两个字符串变量,此时的list.size应为2;然后我将list对象放入session中;此时我原本以为list已经写入session,然而奇怪的事情发生了,我在第33行开始又添加了两个字符串到list中。从运行结果看,33行后的操作是成功的,show.jsp中session取出的list里面是四个字符串。

结论:session.setAttribute("list",li)
该方法不是顺序执行的,换句话说可能更准确,在对象变量的作用范围内所有对list对象变量的更改都将成功保存在session中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: