重新学习JSP之十一——JSP内置对象(下)

一.如何使用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 开发与应用》,主编郭克华,副主编宋虹,清华大学出版社

欢迎小伙伴来评论啊~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值