1.通过request对象来实现request范围内对象共享:1.组件转发数据的时候,来传递数据。2.request对象的声明周期是很短的。
2.通过session对象来实现session范围的对象共享:1.session实际是基于cookie的。2.session对象中的内容是放在服务器上的。3.如果禁用了cookie,请务必使用URL重写,链接response.encodeURL(url),重定向response.encodeRediretURL(url),response.sendRedirect(url).
3.通过Application对象来实现应用范围内的对象共享,这个对象有且只有一个,全局共享,实际上就是ServletContext上下文对象。被所有的组件共享。具备存取数据功能,Context.getAttribute(),使用Application.getAttribute(),Context.setAttribute(),使用Application.setAttribute().
4.传入的可变对象时不可变对象,常见的可变对象,String,基本对象,数组对象。常见的不可变对象,StringBuffered,StringBuilder,集合对象(list,set,map)。可变对象与不可变对象的比较:
<%@page import="java.util.List,java.util.ArrayList" %>
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>What is Jsp</title>
</head>
<body>
<%
session.setAttribute("abc","Hello!");
String str=String.valueOf(session.getAttribute("abc"));
str+="world";
out.println(session.getAttribute("abc"));
out.println("<br/>");
session.setAttribute("abc",str);
out.println(session.getAttribute("abc"));
out.println("<br/>");
List originalList = new ArrayList();
request.setAttribute("list",originalList);
ArrayList list=(ArrayList)request.getAttribute("list");
out.println(list.size());
out.println("<br/>");
list.add("good");
out.println(list.size ());
out.println("<br/>");
%>
</body>
</html>