一.如何使用session开发购物车
1.1将内容放入购物车
在session中有一个这样的函数:
void session setAttribute(String name, Object obj);//将一个对象放入购物车
name属性是给物品一个名字,obj就是内容本身
例如:
session.setAttribute("book1", "大学物理");
1.2读取购物车的内容
读取购物车的内容用下面的函数,如下:
Object session.getAttribute(String name);
name是物品的名字,返回值是内容本身
例如:
String str = (String)session.getAttribute("book1");
从session里面取出名为book1的内容,返回值就是“大学物理”。
特别提醒: session.getAttribute()的返回值是Object类型,所以必须进行强制转换
1.3图书购物车
使用“学生购买图书”的业务描述购物车。在cart3_1.jsp中将内容放在session内。代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<head>
<title>cart3_1</title>
</head>
<body>
<%
ArrayList books = new ArrayList();
//购物车中添加
books.add("大学物理");
books.add("Java");
books.add("高等数学");
//放入session
session.setAttribute("books", books);
%>
<a href = "cart3_2.jsp">查看购物车</a>
</body>
</html>
在cart3_2.jsp显示页面,代码如下:
cart3_2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<head>
<title>cart3_2</title>
</head>
<body>
<%
//从session中获得集合
ArrayList books = (ArrayList)session.getAttribute("books");
//显示购物车中的内容
for(int i = 0; i < books.size(); i++){
String book = (String)books.get(i);
out.println(book + "<br>");
}
%>
</body>
</html>
在浏览器输入http://localhost:8080/Prj13/cart3_2.jsp,点击链接,如下图:
二.session进阶
2.1移除session中的内容
用session中的如下函数:
void session removeAttribute(String name);
例子:
session.removeAttribute("book1");
将book1的内容从session移除
2.2移除session中的全部内容
清空session,用如下函数:
void invalidate();
注意: 从session获取一个集合,从集合中移除一个元素,但是该集合没有放回session。session中集合的内容会改变。
2.3session内容初始化技巧
例子: 用一个表单提交将书本放入购物车,并在页面底部打印
sessionLost.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<head>
<title>sessionLost</title>
</head>
<body>
<form action = "sessionLost.jsp" method = "post">
请您输入书本:<input type = "text" name = "book">
<input type = "submit" value = "添加到购物车">
</form>
<hr>
<%
request.setCharacterEncoding("gb2312");
ArrayList books = new ArrayList();
session.setAttribute("books", books);
String book = request.getParameter("book");
if(book != null){
books.add(book);
}
%>
购物车中的内容是:<br>
<%
//遍历
for(int i = 0; i < books.size(); i++){
out.println(books.get(i) + "<br>");
}
%>
</body>
</html>
在浏览器输入http://localhost:8080/Prj13/sessionLost.jsp,输入大学物理,点击添加到购物车,如下图:
再输入Java,点击添加到购物车,如下图:
问题: 为什么之前输入的大学物理没有了呢?
答: 问题出在这几行代码
ArrayList books = new ArrayList();
session.setAttribute("books", books);
由此看到,每次网页运行,都会有一个新实例化的ArrayList放在session里面。因此第一次提交之后放入的session中的集合和第二次提交之后放入session中的集合是不一样的。
解决方法: 只有第一次运行时才new一个ArrayList,其他时候使用session中的ArrayList
修改的代码如下:
handleSessionLost.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<head>
<title>handleSessionLost</title>
</head>
<body>
<form action = "sessionLost.jsp" method = "post">
请您输入书本:<input type = "text" name = "book">
<input type = "submit" value = "添加到购物车">
</form>
<hr>
<%
request.setCharacterEncoding("gb2312");
ArrayList books = (ArrayList)session.getAttribute("books");
if(books == null){
books = new ArrayList();
session.setAttribute("books", books);
}
String book = request.getParameter("book");
if(book != null){
books.add(book);
}
session.setAttribute("books", books);
%>
购物车中的内容是:<br>
<%
//遍历
for(int i = 0; i < books.size(); i++){
out.println(books.get(i) + "<br>");
}
%>
</body>
</html>
在浏览器输入http://localhost:8080/Prj13/handleSessionLost.jsp,如下图:
三.application对象
3.1为什么使用application
对于不同的客户端来说,服务器端的对象是相同的,在教务管理系统中,当前在线人员的所有名单都可以显示出来,这时候可以用application实现。这个在线人员的名单可以存放在服务器端的application中。
对于一个Web容器而言,所有的用户都共同使用一个application对象,服务器启动后,就会自动创建application对象,这个对象会一直保存,知道服务器关闭为止。
3.2如何使用application
3.2.1将内容放入application
void application.setAttribute(String name, Object obj);
3.2.2读取application中的内容
Object application.getAttribute(String name);
3.2.3将内容从application中移除
void application.removeAttribute(String name);
摘自《Java Web 开发与应用》,主编郭克华,副主编宋虹,清华大学出版社
欢迎小伙伴来评论啊~~