`
jiangduxi
  • 浏览: 445190 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JSP用户会话跟踪

阅读更多
  先介绍下会话跟踪的概念吧!
    我们知道,HTTP是一种无状态的协议,也就是说,客户端在浏览服务器上的不同的页面时,每次请求获得响应完成后,服务器和客户端的Socket连接会关闭。但是在不同页面之间,我们往往需要交换信息。交换信息的方式如下:
1.HTTP信息
  它将需要交换的信息保存在HTTP头部。随着代理服务器的出现和保密性的问题,这种技术就过时了。
2.隐藏字段
   通过HTML的HIDDEN标记来传递信息:
引用

<input type="hidden" name="somename"value="somevalue">

这种方式存在保密性问题,我们可以通过浏览器菜单中的【view】查看—>【Source】命令来查看浏览器中的源文件
3.URL重写
  把身份认证的信息加到页面链接的尾部,如:
引用

<a href="/user.jsp">Next</a>
改为
<a href="user.jsp?name=hellking&item=item&quantify=3">Next</a>

其实这样方式也存在安全的问题,同时,这个链接的长度受URL长度的限制(一般浏览器URL长度最大为2KB)
4.Cookie
  浏览器把一些小的片断信息保存在客户端,在以后的使用过程中,服务器端可以使用客户端的Cookie。Cookie虽然是一个有效的解决方式,但同样存在一些问题:客户端可以选择不接受Cookie,如果这样,有些程序很可能就不能正常运行。
5.Session
    Session就是会话。简单地讲,会话可以在单一的用户和服务器之间定义一些列的交互,这些交互可以保持一段时间。一旦服务器上建立一个会话,一个SessionID就和这个会话关联。

实例:一个简单的购物程序
 //Item 类
 public class Item{
    //属性
    private String itemId;//目录中Items的Id
    private double price;// Item的价格
    private String description;//Items的描述
    private boolean available;//是否有Item
   private String producter;//Items的生产商

     //构造方法
     public  Item(String itemId,double price,String description,
             boolean available,String producter){

           this.itemId=itemId;
           this.price=price;
           this.description=description;
           this.available;
           this.producter=producter;
            }

     //属性getter和setter方法
       
     public String getItemId(){
       return itemId;
       }

    public void setItemId(String itemId){
         this.itemId=itemId;
      }

    public double getPrice(){
          return price;
        }
    publi void setPrice(double price){
         this.price=price;
    }

   public String getDescription(){
       return description;
       } 
   public void setDescription(String description){
        this.description=description;
         }

    public boolean getAvailable(
         return available;
         )
    public void setAvailable(boolean available){
        this.available=available;
      }
 
     public String getProducter(){
         return producter;
       }
    public void setProducter(String producter){
       this.producter=producter;
        }
}


Products类。它表示当前可以获得的Item,在通常情况下从数据库中获得
import java.util.Vector;
 public class Products{
   private Vector items=new Vector();//表示Item的目录

    synchronized public Vector getItems(){
        return items;
       }
    synchronized public Item getItem(String itemId){
          int index=Integer.parseInt(itemId);
          return (Item)items.elementAt(index);
         }
    synchronized public void setItem(Item item,String itemId){
           int index=Integer.parseInt(itemId);
           items.set(index,item);
           }
    public Products(){
         //添加一些资料
       items.addElement(new Item("0","JSP技术",(double)45.90,true,"电子工业出版社"))
   .........................
           }
     //Item数量
    public int getSize(){
      return items.size();
      }
  }

Cart类,表示购物车,它使用HashMap保存用户添加的物品。
  public class Cart{
    private String userId;//用户ID
    private HashMap items;// 购物车中的物品
    
      public Cart(){
        items=new HashMap();
      } 

 //新增一个Item
 public void addItem(String itemId,int quantity){
      items.put(itemId,Integer(quantity));
  }
 //删除一种Item
 public void removeItem(String itemId){
  items.remove(itemId);
  }
 //更新某个Item
 public void updateItem(String itemId,int quantity){
   if(items.containsKey(itemId))
       items.remove(itemId);
    items.put(itemId,new Integer(quantity));
  }
  //返回购物车中的所有Item
  public HashMap getItems(){
     return this.items
    }
 
  public void setUserId(String userId){
     this.userId=userId;
     }
  public String getUserId(){
    return this.userId;
  }

 //清空购物车
 public void clear(){
   items.clear();
  }
}

以上就是JavaBean组件
现在要结合JSP页面了。
先看看checklogin.jsp
引用

<jsp:useBean id="cart" class="com.Cart" scope="session">
<jsp:setProperty name="cart" property="*"/>
</jsp:useBean>
<% session.setMaxInactiveInterval(900); //设置Session超时为30分钟%>
<%
String nextpage;
if(cart.getUserId().equals("jack"))nextpage="shopping.jsp";
else nextpage="login.jsp"
%>
<jsp:forward page="<%=nextpage%>"/>


接下来就是登陆成功进入的shopping.jsp代码
引用

<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="com.*"%>
<jsp:useBean id="products" clss="com.Products" scope="session"/>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="test/html;charset=utf8">
</head>
<Link href="x.css" type=text/css rel=stylesheet>
<body>
<%@ include file="header.jsp"%>
<center>
  <form action="cart.jsp" method=get>
  <table width="75%"border="1" bordercolor="#006633">
   <tr bgcolor="#999999">
        <td>id</td>
       <td>名称</td>
       <td>价格</td>
       <td>是否有库存</td>
       <td>出版社</td>
   </tr>
  <%
      java.util.Vector=products.getItems();
      java.util.Enumeration e=v.elements();
      while(e.hasMoreElements())
        {
           Item item=(Item)e.nextElement();
  %>
    <tr>
        <td><input type="checkbox" name="itemId"> value="<%=item.getItemId()%>"</td>
         <td><%=items.getDescription()%></td>
         <td><%=items.getPrice()%></td>
         <td><%=items.getAvailable%></td>
         <td><%=item.getProducer()%></td>
    </tr>
<%}%>
   <tr align=left>
   <td colspan=5><input type=submit value="add" name="action"></td></tr>
  <td colspan=5><a href="cart.jsp">购物车</a>[]<a href="logout.jsp">注销</a></td></tr>
  </table>
  </form>
</center>
<%@include file="tail.jsp"%>
</body>
</html>

上面的代码实现个Add功能。现在看看cart.jsp文件吧
引用

<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="com.*,java.util.*"%>
<jsp:useBean id="products" clss="com.Products" scope="session"/>
<jsp:useBean id="cart" clss="com.Cart" scope="session"/>
</jsp:useBean>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="test/html;charset=utf8">
</head>
<Link href="x.css" type=text/css rel=stylesheet>
<%
//action为执行操作,add表示添加此Item,remove表示删除此Item
String action=request.getParameter("action");
//获得所有添加、删除的Item的ItemId
String items[]=request.getParamterValues("itemId");
  if(items!=null)
    for(int i=0;i<items.length;i++){
     if(action.equals("add"))
        cart.addItem(items[i],1)
        else if(action.equals("remove"))cart.removeItem(items[i])
       }
%>
<body>
<%@include file="header.jsp"%>
<center>
   <form action="cart.jsp" method=get>
   <table width="75%" border="1" bordercolor="#006633">
      <tr bgcolor="#999999">
            <td>id</td>
            <td>名称</td>
            <td>数量</td>
      </tr>
<%
   java.util.HsahMap cart_item=cart.getItems();
     Iterator it=cart_item.keySet().iterator();
   while(it.hasNext()){
      String itemId=(String)it.next();
      Item item=products.getItem(itemId);
%>
<tr>
<td><input type="checkbox" name="itemId" value="<%=item.getItemId()%>"></td>
<td><%=item.getDescription()%></td>
<td><%=car_item.get(itemId)%></td>
</tr>      
<%}%>
<tr align=left>
<td colspan=5><input type=submit value="remove" name="action"></td>
</tr>
<tr align=left>
<td colspan=5><a href="shopping.jsp">购物</a>[]<a href="logout.jsp">注销</a></td>
</tr>
   </table>
</center>
<%@ include file="tail.jsp"%>
</body>
</html>

最后看下注销logout.jsp的相关源码
引用

  <jsp:useBean id="cart" class="com.Cart" scope="session"/>
  <%
    cart.clear();
    session.invalidate();
   response.sendRedirect("login.jsp");
%>

分享到:
评论

相关推荐

    构建带会话跟踪的Servlet

    其关键是启用会话处理,那么 Servlet 就可以知道哪个用户在干什么。 本教程显示了一个 URL 书签系统,在这个系统中, 多个用户访问一个系统以添加、除去和更新 HTML 书签列表。 Servlet 使用 JSP 技术来处理用户...

    JavaWeb12-文件上传.rar

    JavaWeb03-会话跟踪cookie与session.rar JavaWeb04-内置对象与include指令.rar JavaWeb05-购物车.rar JavaWeb06-Servlet.rar JavaWeb07-javaWeb模式.rar JavaWeb08-DBUtil.rar JavaWeb09-EL与JSTL.rar JavaWeb10-...

    Servlet与JSP核心编程第2版

    9.8 拥有购物车和会话跟踪功能的在线商店 第ii部分 jsp技术 第10章 jsp技术概述 10.1 对jsp的需求 10.2 jsp的好处 10.3 jsp相对于竞争技术的优势 10.4 对jsp的误解 10.5 jsp页面的安装 10.6 基本语法...

    JSP网络编程学习笔记源代码 part2

    第二篇为“Servlet核心技术”,主要讲述Servlet的技术特点、请求和响应、数据共享、会话跟踪等技术;第三篇为“JSP技术基础”,主要讲述JSP的基本语法和内建对象及JSP和Servlet的集成,JavaBean和表达式语言;第四篇...

    JSP动态网站开发基础教程与实验指导(从基础到应用)光盘

    8.2.5 会话跟踪 188 8.2.6 Servlet异常相关 192 8.3 Servlet配置选项 192 8.3.1 元素及其子元素 192 8.3.2 元素及其子元素 194 8.4 用Servlet生成动态图片 195 8.5 扩展练习 198 第9章 Web基础知识 201 9.1 Web发展...

    JSP(WEB 开发技术)实验指导

    实验五 会话跟踪处理 18 1.实验目的: 18 2.实验内容: 18 3.作业: 20 实验六 基本 Servlet 开发 20 1.实验目的: 20 2.实验内容 : 20 3.作业: 22 实验七 JavaBean 使用 23 1.实验目的: 23 2.实验内容 : 23 ...

    JSP/Servlet Java面试逻辑题

    8、四种会话跟踪技术(重要考点)★★★★★ 答:会话作用域ServletsJSP 页面描述 page是代表与一个页面相关的对象和属性。 一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 ...

    利用JSP session对象保持住登录状态

    为此,web服务器必须采用一种机制来唯一地标识一个用户,同时记录该用户的状态,这就要用到会话跟踪技术。 Java Web使用Session来跟踪会话和管理会话内的状态。 Session对象是一个jsp内置对象,它在第一个jsp页面...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    9.2 java servlet api的会话跟踪 306 9.2.1 httpsession接口 306 9.2.2 session的生命周期 307 9.2.3 cookie的应用 319 9.2.4 httpsessionbindinglistener接口 328 9.2.5 在线人数统计程序 329 9.3 小结 335 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    9.2 java servlet api的会话跟踪 306 9.2.1 httpsession接口 306 9.2.2 session的生命周期 307 9.2.3 cookie的应用 319 9.2.4 httpsessionbindinglistener接口 328 9.2.5 在线人数统计程序 329 9.3 小结 335 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    9.2 java servlet api的会话跟踪 306 9.2.1 httpsession接口 306 9.2.2 session的生命周期 307 9.2.3 cookie的应用 319 9.2.4 httpsessionbindinglistener接口 328 9.2.5 在线人数统计程序 329 9.3 小结 335 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    9.2 java servlet api的会话跟踪 306 9.2.1 httpsession接口 306 9.2.2 session的生命周期 307 9.2.3 cookie的应用 319 9.2.4 httpsessionbindinglistener接口 328 9.2.5 在线人数统计程序 329 9.3 小结 335 ...

    XML Oracle Servlet 复习汇总(S2)

    1 Oracle:索引 5分 ...21 Servlet:会话和会话跟踪 5分 22 Servlet:jsp标准动作 4分 23 Servlet:jsp:setproperty 6分 24 Servlet:servlet的配置 6分 25 Servlet:过滤器 9分 26 Servlet:simpletag 6分

    JAVA程序员面试题

    2.四种会话跟踪技术. 会话作用域ServletsJSP 页面描述 page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 ...

    J2EE应用开发详解

    57 4.3.7 Servlet协作 57 4.3.8 Filter 58 4.4 使用Servlet处理客户端请求 58 4.5 会话跟踪 61 4.5.1 使用Cookie进行会话跟踪 61 4.5.2 使用URL重写进行会话跟踪 62 4.5.3 使用隐藏表单域进行会话跟踪 63 4.6 小结 ...

    J2EE中文版指南 CHM格式 带全文检索

    会话跟踪 170 结束servlet 171 跟踪服务请求 171 通知方法Shut Down 172 创建长时间运行的方法 173 第11章 JSP技术 175 什么是JSP页面 175 JSP页面的例子 176 JSP页面的生命周期 179 转换与编译 179 异常 179 初始化...

    WebSphere快速入门

    6.7会话跟踪 53 6.8 安全性 54 第七章 WebSphere应用编程 58 7.1 数据库应用编程 59 7.2 会话编程 71 7.3 PageListSevlet技术 73 参考文献 75 附录Ⅰ IBM WebSphere Studio实验以及应用开发实验的设置指导 76 特别...

    Java-Web程序设计(PPT).pptx

    会话跟踪技术进阶 7. 会话跟踪技术 8 9 9.EL表达式 10 10.JSTL标签库 Java-Web程序设计(PPT)全文共389页,当前为第2页。 本章内容 Web 应用程序简介 HTTP 协议 Tomcat 简介 使用Eclipse开发Java Web 应用程序 静态...

    java-servlet-api.doc

    随着时间的过去,发展了许多会话跟踪的技术,但是使用起来都比较麻烦。 JavaServletAPI提供了一个简单的接口,通过这个接口,Servlet引擎可以有效地跟踪用户的会话。 建立Session 因为HTTP是一个请求-响应协议,一...

    tomcat6、7、8、9, maven3.5

    所有的Apache Tomcat 3.X版本跟踪其遗产回到原来的Servlet和JSP实现,Sun公司捐赠给Apache软件基金会。该3.X版本都实现了支持Servlet 2.2和JSP 1.1规范。 的Apache Tomcat 3.3.X。版本3.3.2是当前的生产质量版本。...

Global site tag (gtag.js) - Google Analytics