一共有四种方法实现共享页面共享数据

1.cookie

2.sendRedirect

3.session

4.隐藏表单提交(form)

5.ServletContex

1.cookie:服务器在客户端保存用户信息,比如登录名,密码等,实现网页个性化。

2.sendRedirect:通过该方法将信息传送给下一个页面。

优点:传送的信息比较快

缺点:它只能传送字符串,不能传送对象。

形式:sendRedirect("welcome"?uanme=admin&pwd=123")

传递

res.sendRedirect("welcome?uName="+u+"&uPass="+p);    //传递给welcome页面

接收

String u=req.getParameter("uname");    //welcome界面接收

3.session

  用户访问网站时,服务器在服务器的内存为该浏览器分配一个空间,该空间是被这个浏览器独占的,tomcat中默认存在30min,session的时间可以在tomcat中的web.xml中修改,也可以在程序中修改。

  服务器会给浏览器分配一个唯一的session id借此区分不同的客户端。

session占用服务器的内存,所以在迫不得已才使用。

功能:   1.网上商城的购物车

    2.保存登陆的用户信息

    3.将一些数据放在session中,提供给同一个用户的不同页面使用。

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

用法:

  HttpSession hs=req.getSession(true);              //得到session
hs.setAttribute("pass","ok"); //向session添加属性
String name=hs.getAttribute(String name); //得到session的某一个属性
hs.removeAttribute(arg0); //删除某一个属性

实现功能4

在logincl页面创建session

//将验证成功的信息写入session
HttpSession hs=req.getSession(true); //得到session
hs.setAttribute("pass","ok"); //向session添加属性
hs.setMaxInactiveInterval(20); //修改session的存在时间,秒为单位
res.sendRedirect("welcome?uName="+u+"&uPass="+p);

在welcome读取session

String u=req.getParameter("uName");               //得到sendRedirect传递过来的值
           HttpSession hs=req.getSession(true);              //得到session
           String val=(String)hs.getAttribute("pass");        //得到session的某一个属性
           try {
            if(val==null){
                res.sendRedirect("login");
            }

4..隐藏表单:这是最常见的一种方式,也是最简单的。

在login界面创建

 pw.println("<input type=hidden name=sex value=man><br>");

 5.ServletContext

保存在服务器端,共享给所有用户。

生命周期是从创建开始到服务器关闭。

如果想共享给所有用户,而又不希望保存在数据库中,数据量也不大,可以考虑使用ServletContex实现。

下面用一个网站计数器来做案列

package com.demo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import javax.servlet.http.*;
public class ServletFileTest1 extends HttpServlet {
public void init(){
try {
//创建一个FileReader
FileReader fr=new FileReader("D:\\myCount.txt");
BufferedReader br=new BufferedReader(fr);
String numVal=br.readLine();
br.close();
this.getServletContext().setAttribute("vistTimes",numVal);
} catch (Exception e1) {
e1.printStackTrace();
}
} public void destroy(){
try {
//创建一个FileWriter
FileWriter fw=new FileWriter("D:\\myCount.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write(this.getServletContext().getAttribute("vistTimes").toString());
bw.close();
} catch (Exception e2) {
e2.printStackTrace();
}
} public void doGet(HttpServletRequest req,HttpServletResponse res){
try {
System.out.println("doget...");
req.setCharacterEncoding("gb2312");
res.setContentType("text/html;charset=gb2312");
//在ServletContex中进行++操作
String times=this.getServletContext().getAttribute("vistTimes").toString();
this.getServletContext().setAttribute("vistTimes",(Integer.valueOf(times).intValue()+1)+"");
PrintWriter pw=res.getWriter();
pw.println("访问次数:"+this.getServletContext().getAttribute("vistTimes").toString());
       pw.println("您的IP地址是: "+req.getRemoteAddr()+"<br>");
            pw.println("您的机器名是: "+req.getRemoteHost()+"<br>");
} catch (Exception e3) {
e3.printStackTrace();
}
} public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req, res);
}
}

Serlvet学习笔记之二—不同页面共享数据的更多相关文章

  1. HTML5+CSS3学习笔记(二) 页面布局:HTML5新元素及其特性

    HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页面显得非常简单. 本次学习HTML5的新标签元素有: <head ...

  2. WinPhone学习笔记(二)——页面外观剖析

    上一个篇博文说了WinPhone页面内部的东西,现在介绍表面的东西,先来看看一下一个WinPhone页面 这个页面分了三部分:顶部这个是状态栏, 中间这个是一个页面的内容部分, 最下面则是应用程序栏 ...

  3. ODAC (V9.5.15) 学习笔记(二十)大数据量获取处理

    ODAC获取数据的效率比较高,在Web程序中希望能够更快获取第一页的数据时,可以有几种方式: 1.在数据库中进行分页处理: 2.获取所有数据,只是快速返回第一页数据. 第一种方案对应用服务器资源消耗最 ...

  4. Servlet学习笔记(二)

    目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...

  5. X-Cart 学习笔记(二)X-Cart框架1

    目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 四.X- ...

  6. guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用

    guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...

  7. Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见

    我们知道通过界面设置字段的change事件,是否是必填,是否可见非常容易.但有时我们需要动态地根据某些条件来设置,这时有需要通过js来动态地控制了. 下面分别介绍如何用js来动态设置.   一.动态设 ...

  8. Dynamic CRM 2013学习笔记(二十七)无代码 复制/克隆方法

    前面介绍过二种复制/克隆方法:<Dynamic CRM 2013学习笔记(十四)复制/克隆记录> 和<Dynamic CRM 2013学习笔记(二十五)JS调用web service ...

  9. .NET Remoting学习笔记(二)激活方式

    目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:百度百科  ♂风车车.Net 激活方式概念 在 ...

随机推荐

  1. jfinal渲染器FileRender完整路径文件不正确的问题

    jfinal作者的建议如下: 完整分支的文件下载,可以使用那个带 File 参数的构造方法:FileRender(new File(完整路径)) 从而可以使用 renderFile(new File( ...

  2. matlab与MFC

    混合编程其实不难,关键是没有一个规范的,真正可以解决设置过程中出现的小问题的方法.我在设置的过程中,遇到了不少问题,花了多半天的时间,终于解决了,顺利地在vc中调用matlab 生成的dll文件中的函 ...

  3. 模板方法模式(Head first 设计模式——7)

    一.模板方法模式定义 模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 从定义中,应该可以看出一部分,为 ...

  4. docker探索-windows10 docker 使用 mysql(二)

    转自:http://blog.csdn.net/daocaoren92wq/article/details/68484049$ docker pull mysql docker@default:~$ ...

  5. Java并发(零)教程目录

    上网看博客的时候无意中发现了有一个Java并发的教程还不错,有20多篇讲并发的,一天翻译1篇似乎也不太难.Let's go! 原文地址:http://tutorials.jenkov.com/java ...

  6. exit和wait一起可以彻底清除子进程的资源

    #include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<stdlib.h> ...

  7. shell脚本----if(数字条件,字符串条件,字符串为空)

    二元比较操作符,比较变量或者比较数字. 注意数字与字符串的区别. 1.整数比较  -eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如 ...

  8. 常用的百度API地图操作

    常用的百度API地图操作,包括模糊搜索,放大缩小,并支持移动端 效果图如下 完整代码: http://download.csdn.net/detail/jine515073/8778167

  9. B2B(企业对企业)、B2C(企业对个人)、C2C(个人对个人)

    B2B(企业对企业).B2C(企业对个人).C2C(个人对个人)

  10. Jquery easyui教程

    目  录 1基本拖放.......................................................................................... ...