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

本程序为简单测试程序,自己编写调试可用

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中




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值