同一用户的不同页面共享数据有以下四种方法:

1.sendRedirect()跳转

2.session技术

3.隐藏表单提交(form)

4. cookie技术(小甜饼)

----------------------1.sendRedirect()跳转---------------------------

通过该方法可以将一个页面的信息传送给另外的页面,比如:sendRedirect(“welcome?uname=aaa”);

接收页面采用这种格式接收参数:String u=req.getParameter("uname");

优点:传送信息的速度比较快

缺点:它只能传送字符串,而不能传送一个对象;在地址栏会显示传递的参数,不适合敏感信息的传递。

sendRedirect(“welcome?uname=aaa”);

注意点:

1.welcome代表你要跳转的那个servlet的url

2.servlet url名和变量之间有个?

3.如要传递两个以上的值,它们之间要用符号&分开,比如sendRedirect(“welcome?uname=aaa&passwd=123”);

另一种方式:

String u=req.getParameter("username"); //从其他页面获取参数
      String p=req.getParameter("password"); //从其他页面获取参数
      res.sendRedirect("wel?uname="+u+"&upassword="+p); //类似于拼接的方式,灵活传递参数

4.如果传递的是中文,那你将得到乱码,需要处理一下res.setContentType(“text/html,charset=gbk”);

5.在接收页面获取用sendRedirect()方式传递的参数:

String name=req.getParameter("uname");
      String password=req.getParameter("upassword");

----------------------2.session技术------------------------------------

什么是session?

当用户打开浏览器,访问某个网站时,服务器就会在服务器的内存为该浏览器(特别注意,这边并不是指某台电脑,换句话说,一台电脑上使用双击的方式打开浏览器多会创建不同的session)分配一个空间,该空间被这个浏览器独占。这个空间就是session空间,该空间中的数据默认存在时间为30min,你也可以修改该值。

如上图(a)所示:服务器分配给A、B、C客户端的session空间分别为tomcat服务器中的A、B、C。

如何理解session?如上图(b)所示:

可以把session看做一张表,这张表有两列,而表有多少行理论上没有限制,每一行就是session的一个属性。每个属性包含有两个部分,一个是该属性的名字String,另外一个是它的值Object。

session可以用来做什么?

1.网上商城中的购物车

2.保存登陆用户的信息

3.将某些数据放入到session中,供同一用户的各个方面使用

4.防止用户非法登陆到某个页面

……

如何使用session?

1.得到session,没有就创建session

HttpSession hs=request.getSession(true);

2.向session添加属性

hs.setAttribute(String name,Object val);如:hs.setAttribute("hsname",u);

3.从session得到某个属性

String name=hs.getAttribute(String name);如:String name=(String)hs.getAttribute("hsname");

说明:将类型为Object的属性值强制转换为String类型。

4.从session中删除掉某个属性

hs.removeAttribute(String name);

5.注销session中的内容(比较安全的一种方式),一次性删除所有session的值;

ht.setMaxInactiveInterval(0);

说明:移除指定的session采用这种方式:ht.removeAttribute("name");

session的注意事项:

1.session中属性存在的默认时间是30min,你也可修改它存在的时间:

(a)修改web.xml (以分钟为单位) ,具体操作如下:

打开.... \Tomcat 6.0\conf目录下面的web.xml配置,找到session相关的配置:

....

<!-- ==================== Default Session Configuration ================= -->
  <!-- You can set the default session timeout (in minutes) for all newly   -->
  <!-- created sessions by modifying the value below.                       -->

<session-config>
        <session-timeout></session-timeout>
    </session-config>

....

说明:这边是以分钟为单位,存活时间30分钟,可以根据需要进行修改。

注意:以上修改是针对tomcat目录下的所有Web应用程序,在实际运用中可以将上面的代码复制到特殊要求的web应用程序的web.xml中并根据实际需要进行配置。

(b)在程序中修改(以秒为单位),如果值为负值,则session永远不超时,具体代码如下:

//得到session
      HttpSession hs=req.getSession(true);
      //修改session的存在时间,存活时间5秒
      hs.setMaxInactiveInterval(5);

2.上面说的这个30min指的是用户的发呆时间,而不是累计时间

3.当某个浏览器访问网站时,服务器会给浏览器分配一个唯一的session id,并以此来区分不同的浏览器(即客户端)

4.因为session的各个属性要占用服务器的内存,因此软件公司都是在迫不得已的情况下才使用

----------------------3.隐藏表单提交(form)---------------------------

隐藏表单

这是最常见的一种方式,也是最简单的,但有时该技巧非常管用,形如:

<form action=login>

<input type=hidden name=id value=b>//传递隐藏信息

<input type=text name=name value=d>//传递显示的信息

</form>

通过隐藏表单,我们也可以将一个页面信息,传递给另外的页

接收页面获取表单提交的信息:

String id=req.getParameter("id");

String id=req.getParameter("name");

----------------------4. cookie技术(小甜饼)----------------------------

什么是cookie?

服务器在客户端保存用户的信息,比如登录名、密码……就是cookie这些信息就像是小甜饼一样,数据量并不大,服务器端在需要的时候可以从客户端读取

cookie可以用来做什么?

1.保存用户名、密码,在一定时间不用重新登录

2.记录用户访问网站的喜好,比如有无背景音乐、网页的背景色是什么

3.网站的个性化,比如定制网站的服务、内容

                                                              cookie的工作原理

cookie使用:

1.cookie有点像一张表,分两列,一个是名字,一个是值,数据类型都是String

2.如何创建一个cookie(在服务器端创建的):Cookie c=new Cookie(String name, String val);

 //如何创建cookie案例

 package com.tsinghua;

 import javax.servlet.http.*;
import java.io.*; public class CookieTest1 extends HttpServlet{ //处理get请求 public void doGet(HttpServletRequest req,HttpServletResponse res)
{ try { res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
//当用户访问该servlet时, 就将信息创建到该用户的cookie中 //1. 现在服务器端创建一个cookie
Cookie myCookie=new Cookie("color1","red"); //2. 该cookie存在的时间,如果你不设置存在时间,那么该cookie将不会保存 myCookie.setMaxAge(); //3. 将该cookie写回到客户端
res.addCookie(myCookie); pw.println("已经创建了cookie");
}
catch (Exception ex)
{
ex.printStackTrace();
} } }

3.如何将一个cookie添加到客户端response.addCookie(c);

4.如何读取cookie(从客户端读到服务器)request.getCookie();

 //如何读取cookie案例

 package com.tsinghua;

 import javax.servlet.http.*;
import java.io.*; public class CookieTest2 extends HttpServlet{ //处理get请求 public void doGet(HttpServletRequest req,HttpServletResponse res){ try { res.setContentType("text/html;charset=gbk"); PrintWriter pw=res.getWriter(); //从客户端得到所有cookie信息
Cookie [] allCookies=req.getCookies(); int i=0;
//如果allCookies不为空...
if(allCookies!=null){ //从中取出cookie
for(i=0;i<allCookies.length;i++){ //依次取出
Cookie temp=allCookies[i]; if(temp.getName().equals("color1")){ //得到cookie的值
String val=temp.getValue(); pw.println ("color1="+val);
break; }
}
if(allCookies.length==i){ pw.println("cookie 过期");
} }else{
pw.println ("不存在color1这个cookie/或是过期了!");
} }
catch (Exception ex) { ex.printStackTrace();
} }
}

5.删除cookie

 /**
* @(#)CookieTest3.java
*
*
* @author
* @version 1.00 2013/10/13
*/
//如何删除cookie案例
package com.tsinghua;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*; public class CookieTest3 extends HttpServlet{ public CookieTest3() {
} // 重写doGet方法
// req:用于向客户端(浏览器)获取信息
// res:用于向客户端(浏览器)返回信息 public void doGet(HttpServletRequest req,HttpServletResponse res)
{
try {
res.setContentType("text/html ; charset=gbk ");
PrintWriter pw=res.getWriter();
//从客户端得到所有cookie信息
Cookie [] allCookies=req.getCookies();
int i=0;
//如果allCookies不为空...
if(allCookies!=null)
{ pw.println("allCookies的长度:"+allCookies.length+"<br>");
//从中取出cookie
for(i=0;i<allCookies.length;i++)
{
//依次取出
Cookie temp= allCookies[i];
pw.println("allCookies["+i+"]的属性名为:"+allCookies[i].getName()+"属性值为:"+allCookies[i].getValue()+"<br>");
if(temp.getName().equals("color1"))
{
//得到cookie的值
String val=temp.getValue();
pw.println ("已经找到,color1="+val); //将该cookie删除
temp.setMaxAge(0);
// temp.setPath("/"); 这句可不要
res.addCookie(temp);
pw.println("时间:"+temp.getMaxAge());
// pw.println("删除了color这个cookie");
pw.println ("删除后color1="+temp.getValue());
//上面一句还会输出相应的值,但是通过google浏览器查看(F12—Console—s输入:document.cookie回车—结果为空)
// break;
} } } }
catch (Exception ex) {
ex.printStackTrace();
} } // 重写doPost方法
// req:用于向客户端(浏览器)获取信息
// res:用于向客户端(浏览器)返回信息
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req,res);
} }

cookie其它说明

1.可以通过IE——工具——internet选项——隐私——高级来启用或是禁用cookie

2.由于cookie的信息是保存在客户端的,因此安全性不高

3.cookie信息的生命周期可以在创建时设置(比如30s),从创建那一时刻起,就开始计时,到时该cookie的信息就无效了

-------------------------cookie vs session-----------------------------

1.存在的位置

cookie保存在客户端,session保存在服务器端

2.安全性

比较而言,cookie的安全性比session要弱

3.网络传输量

cookie通过网络在客户端与服务器端传输,而session保存在服务器端,不需要传输

--------------------------------------------------------------------------

源代码下载点我

servlet 学习笔记(三)的更多相关文章

  1. servlet学习笔记三

    Servlet主要内容: 1)状态跟踪 一.状态跟踪 HTTP协议是无状态协议,即请求与请求之间没有任何关系,也就是不会记住任何数据. 但若想在请求间传递数据,怎么办?web里的三个基本容器对象可以解 ...

  2. Servlet学习笔记(三)

    目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...

  3. 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记

    回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...

  4. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  5. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  6. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  7. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  8. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  9. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

  10. NumPy学习笔记 三 股票价格

    NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...

随机推荐

  1. 【题解】Catering World Finals 2015 上下界费用流

    Prelude 传送到Codeforces:0.0 Solution 板子题,在这里贴个板子. 这题面是smg?题面中有说每个点只能经过一次吗?是我瞎了吗? 因为这WA on test 27一个小时, ...

  2. 【Asp.net入门07】第一个ASP.NET 应用程序-创建数据模型和存储库

    1.理解概念 先理解一下两个概念. 模型 模型是指数据的结构类型,以及可调用的方法.对面向对象编程方法来说,其实就是类.模型类就是一个描述数据的类.只有把数据按一定方式描述出来,我们才能在程序中方便地 ...

  3. ubuntu thrift

    1.下载 http://www.apache.org/dyn/closer.cgi?path=/thrift/0.9.2/thrift-0.9.2.tar.gz 2.解压 tar -xvf thrif ...

  4. [spark]-Spark2.x集群搭建与参数详解

    在前面的Spark发展历程和基本概念中介绍了Spark的一些基本概念,熟悉了这些基本概念对于集群的搭建是很有必要的.我们可以了解到每个参数配置的作用是什么.这里将详细介绍Spark集群搭建以及xml参 ...

  5. logstash定义表达式

    例如: echo '[2018/02/02 08:34:43.032]' >> tomcat_catalina.out 过滤方式 "message" => &qu ...

  6. MESS-配置

    Author:KillerLegend From:http://www.cnblogs.com/killerlegend/p/3824989.html Date:2014.7.4 Part A 第一部 ...

  7. warshall-floyd算法:POJ No 2139 Six Degress of Cowvin Bacon(任意两点最短路径))

    题目: http://poj.org/problem?id=2139 题解:N只牛,在一组的两只牛,分别两只之间为 “1度”,自己到自己为0度,M组牛.求,N只牛之中,两只牛之间 平均最短度数*100 ...

  8. Java8 新特性 Streams map() 示例

    在Java 8中stream().map(),您可以将对象转换为其他对象.查看以下示例: 1.大写字符串列表 1.1简单的Java示例将Strings列表转换为大写. TestJava8.java p ...

  9. Java入门系列(三)面向对象三大特性之封装、继承、多态

    面向对象综述 封装 封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,或者叫接口. 有了封装,就可以明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者:而外部调用者也可以知道 ...

  10. EF记录统一添加创建,修改时间

    public class BaseEntity { public DateTime? DateCreated { get; set; } public string UserCreated { get ...