- 浏览: 456589 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (354)
- 面向对象分析设计/系统架构 (12)
- Mysql/Orcal11g (13)
- JSP/Java//Python/Xharbour (66)
- 软件测试 (21)
- 信息安全小知识 (1)
- Android (5)
- IT生活/哲学/兵法 (23)
- 软件工程/UML/需求分析学习与实践 (6)
- 操作系统/网络/组成原理 (9)
- 持续集成Maven/Hudson/自动化测试 (9)
- eBay /Paypal developer (10)
- Hadoop/HBase/Solr (0)
- 重构分析及其思考 (2)
- 企业架构 (7)
- 分析模式/设计模式 (4)
- SSH学习笔记 (1)
- Quartz及其JWatch监控 (0)
- Linux服务器 (0)
- ExtJs学习笔记 (1)
- 重读java编程思想 (3)
- ESB/SOA/WebServices (0)
- SpringMVC/Struts/Hibernate/Spring (7)
- Xharbour/Pelles C/ SQLite3 (0)
- Magento 电商 (1)
- Object C (1)
- note/redis (0)
- SpringBoot (0)
最新评论
-
snow8261:
太粗略了。
企业架构之数据架构 -
haithink:
面试成功没?
JVM 加载Class文件的原理及其机制 -
feisi0003731843:
不好意思我没有重启,重启后好多了,可有的地方回放还是不成功的。 ...
Selenium IDE测试ExtJs一种测试解决办法 -
feisi0003731843:
这个好像不行吧,我试过了不好使啊。还是用id来做的。不能用啊。 ...
Selenium IDE测试ExtJs一种测试解决办法 -
yuchensuifeng:
您好,静态页面是可以的,但是,我指定error-page为js ...
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就和这个会话关联。
实例:一个简单的购物程序
Products类。它表示当前可以获得的Item,在通常情况下从数据库中获得
Cart类,表示购物车,它使用HashMap保存用户添加的物品。
以上就是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");
%>
我们知道,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");
%>
发表评论
-
java实现读取文件下所有的excel文件
2012-08-10 09:30 2086最近处理一个压缩包,里面有几百上千个excel文件。本来 ... -
在firefox浏览器下出现如果引用外部连接不存在会隐藏红叉
2012-07-23 15:38 993在firefox下引用出错的一些图片会隐藏红叉。而在IE下 ... -
java 字符替换的一些问题值得记录下
2011-09-30 16:40 883最近在处理一些字符串的替换中发生的一些问题。 最近需要临 ... -
ExtJs学习之弹出框,提示框,输入框等框
2011-06-23 22:13 93781.ExtJs之消息框: 语法:Ext.MessageB ... -
FreeMarker学习之概念
2010-08-04 10:12 860FreeMarker概述: 引用 1. ... -
HTML标准属性
2010-07-03 20:35 753核心属性(Core attributes) 以下标签 ... -
HTML标签
2010-07-03 20:14 1004HTML 4.01 / XHTML 1.0 参考手册 按字母 ... -
HTML基础
2010-07-03 00:54 771基于Web前端技术是有HTML静态语言向现在的JaveSc ... -
Struts2的开发规范和技巧
2010-05-28 14:56 1238基于Struts2的开发,如果没有足够的经验和规范做支撑,并不 ... -
第一次的Struts2的一个异常记录
2010-05-28 14:22 1048在配置正确struts.xml、web.xml、Action类 ... -
Java处理Excel全解一
2010-05-25 10:00 2189在获取客户需求的时候 ... -
Java EE 6 规范之平台概述
2010-05-22 21:28 2211JavaTM平台企业版(Java EETM)的概述 体系结构 ... -
Python3入门学习
2010-05-14 14:51 2237在学习一门计算机语言的时候,首先接触的入门程序基本上都是& ... -
Python3操作文件,目录和路径
2010-05-14 11:48 35081.遍历文件夹和文件 ... -
内存溢出
2010-04-22 14:23 1425java SE应用程序共同的问 ... -
JPA之ManyToMany的处理
2010-04-18 14:17 4513在处理关系中,最为麻烦的可能是多对多的关系处理,因为多对多 ... -
JPA之OneToOne关系处理
2010-04-18 14:05 3941在很早学习关系数据库的时候学过一对多,多对一,一对一,多对多的 ... -
JPA之OneToMany和ManyToOne处理
2010-04-18 13:52 18927前面介绍和总结了JPA ... -
JPA学习之二(入门篇)
2010-04-16 10:48 3761简单总结下,JPA的入门。在学习JPA的时候运用参考Hib ... -
JPA2.0的学习一
2010-04-15 17:18 8634Java EE 5平台引入了Java ...
相关推荐
总结,JSP中的会话跟踪是构建动态Web应用的重要组成部分,通过`HttpSession`对象,开发者能够方便地存储和检索用户会话中的信息,实现用户状态的持久化。理解和熟练掌握会话跟踪技术,有助于提高Web应用的用户体验和...
会话跟踪允许服务器识别并追踪不同请求间的关联,确保能够正确处理用户的操作序列,比如购物车功能、用户登录状态等。 会话跟踪主要有三种实现方式: 1. **URL传递参数**:通过在URL末尾添加参数来携带信息。例如...
JSP提供了四种主要的会话跟踪技术,确保在多个请求之间存储和检索用户信息。 1. **Page Context(页面范围)** 页面范围是最小的范围,仅在当前的JSP页面中有效。任何在`<jsp:declaration>`、`<jsp:scriptlet>`、`...
在Java Web开发中,会话跟踪是至关重要的一个环节,特别是在构建动态网页应用程序时,它允许服务器识别并记住用户在一段时间内的状态。本章节重点讨论的是如何在Java Web环境中实现会话跟踪,包括其原理、方法以及...
为了解决这个问题,开发者利用各种会话跟踪技术来保持用户的上下文。本篇文章将深入探讨JavaWeb中的会话跟踪技术。 首先,最常见的会话跟踪方法是使用Cookie。Cookie是由服务器发送到客户端(浏览器)的一小段数据...
在Java JSP web开发中,会话跟踪是维持用户在网站上交互过程中的状态的关键技术。当用户浏览多个页面时,服务器需要识别这些请求来自同一个用户,以便提供个性化的服务,如购物车功能或者保持登录状态。会话跟踪允许...
在Java Web开发中,会话跟踪是至关重要的一个环节,特别是在构建复杂的Web应用程序时,如JSP、Servlet、Struts、Hibernate以及Spring等框架的整合应用。本资源"java web整合开发王者归来光盘代码-第五章 会话跟踪...
JSP(Java Server Pages)与Servlet技术作为构建动态网页的主要工具,在处理用户会话方面提供了丰富的功能。本文将深入探讨JSP/Servlet中的会话管理机制,并在此基础上提出一种改进的会话管理方法。 #### 二、JSP/...
当用户成功登录后,系统通常会创建一个会话(Session)来跟踪用户的状态,直到用户主动退出或者会话超时。本教程将深入探讨"登录超时完整实例",包括如何进行`session超时设置`以及在`JSP页面`中处理会话超时的问题...
会话跟踪是在Web应用程序中跟踪用户会话状态的重要技术之一,尤其是在用户登录、个性化设置和购物车等功能中非常关键。 ##### 1.1 Session和Request详解 - **Session**:在Java Web中,`HttpSession`接口用于存储...
**index.jsp** 页面包含了用于跟踪用户离开页面或关闭浏览器窗口的JavaScript代码。当检测到这些动作时,会触发一个名为`SessionInvalidate`的Servlet,该Servlet用于销毁当前用户的会话。 ```html window....
**JSP用户管理系统详解** JSP(JavaServer Pages)用户管理系统是一种基于Java技术的Web应用程序,用于管理和操作网站或应用程序的用户数据。该系统通常包括用户注册、登录、权限控制、个人信息管理等功能,旨在...
3. **会话管理**:在Web应用中,会话用于跟踪用户的活动,特别是在用户登录后。一个典型的会话管理过程包括创建会话、存储用户信息、检查会话状态以及销毁会话。在Servlet中,我们通常使用HttpSession接口来实现这一...
5. 会话管理:在用户成功登录后,可以使用JSP内置对象session来跟踪用户状态,防止未授权的访问。 6. 错误处理:设置适当的错误处理机制,如捕获并显示SQL异常,处理无效输入等。 总之,"JSP用户注册登录界面"是一...
开发者可以通过解压并导入合适的开发环境(如Eclipse或IntelliJ IDEA)来查看和运行项目,进一步学习和理解JSP用户管理系统的实现细节。 总之,基于JSP的用户管理系统是一个实用的Web应用示例,它涵盖了Web开发中的...
同时,考虑到安全性,可能还应用了会话管理来跟踪已登录的用户,防止重复登录或恶意攻击。 总的来说,"jsp编写的用户登录案例"是一个涵盖多方面技能的综合实践,包括JSP基础、数据库操作、用户验证逻辑以及用户体验...
总之,JSP会话追踪是实现Web应用状态管理的核心技术,它通过HttpSession接口提供了一种便捷的方式来跟踪和存储用户状态,从而提升用户体验。正确理解和使用会话追踪能有效优化Web应用的功能和性能。
URL重写的基本原理是将Session ID作为查询参数附加到URL中,这样即使浏览器不接受cookies,服务器也能通过解析URL获取Session ID,从而识别用户会话。JSP提供了两个方法来帮助开发者实现这个功能:`response....
5. **会话管理**:为了跟踪用户状态,JSP支持会话(session)管理。注册成功后,可以设置一个session属性来标识当前用户,防止重复注册或未登录状态下的非法操作。 6. **错误处理与反馈**:在用户注册过程中,可能...
【JSP用户注册模块参考实现】是一个全面涵盖了用户注册、登录和管理功能的教程资源,专为学习JSP(Java Server Pages)技术的开发者提供。在这个模块中,开发者可以了解到如何利用JSP来构建动态的Web应用程序,特别...