Serlvet学习笔记之二—不同页面共享数据
一共有四种方法实现共享页面共享数据
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学习笔记之二—不同页面共享数据的更多相关文章
- HTML5+CSS3学习笔记(二) 页面布局:HTML5新元素及其特性
HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页面显得非常简单. 本次学习HTML5的新标签元素有: <head ...
- WinPhone学习笔记(二)——页面外观剖析
上一个篇博文说了WinPhone页面内部的东西,现在介绍表面的东西,先来看看一下一个WinPhone页面 这个页面分了三部分:顶部这个是状态栏, 中间这个是一个页面的内容部分, 最下面则是应用程序栏 ...
- ODAC (V9.5.15) 学习笔记(二十)大数据量获取处理
ODAC获取数据的效率比较高,在Web程序中希望能够更快获取第一页的数据时,可以有几种方式: 1.在数据库中进行分页处理: 2.获取所有数据,只是快速返回第一页数据. 第一种方案对应用服务器资源消耗最 ...
- Servlet学习笔记(二)
目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...
- X-Cart 学习笔记(二)X-Cart框架1
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 四.X- ...
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...
- Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见
我们知道通过界面设置字段的change事件,是否是必填,是否可见非常容易.但有时我们需要动态地根据某些条件来设置,这时有需要通过js来动态地控制了. 下面分别介绍如何用js来动态设置. 一.动态设 ...
- Dynamic CRM 2013学习笔记(二十七)无代码 复制/克隆方法
前面介绍过二种复制/克隆方法:<Dynamic CRM 2013学习笔记(十四)复制/克隆记录> 和<Dynamic CRM 2013学习笔记(二十五)JS调用web service ...
- .NET Remoting学习笔记(二)激活方式
目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:百度百科 ♂风车车.Net 激活方式概念 在 ...
随机推荐
- C#中关于系统用户信息持久化(接上文)
首先传几张效果图描述一下功能: 经过上文用户名和密码的验证后,就到了添加用户这一步,登陆后的用户可以添加新的用户,被添加的用户可以登陆系统. 这里会用到C#中的“正则表达式”对用户名格式进行判断,以及 ...
- C#处理文本文件TXT实例详解(转)
作者:安静平和 字体:[增加 减小] 类型:转载 时间:2015-02-02我要评论 这篇文章主要介绍了C#处理文本文件TXT的方法,以实例形式详细分析了txt文本文件的读取.修改及打印等功能的实现技 ...
- 解决libstdc++.so.5问题
./bowtie2-buildbowtie2-build: error while loading shared libraries: libtinfo.so.5: cannot open share ...
- wp中的双向绑定
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...
- MapReduce的集群行为和框架
MapReduce的集群行为 MapReduce的集群行为包括: 1.任务调度与执行MapReduce任务由一个JobTracker和多个TaskTracker两类节点控制完成.(1)JobTrack ...
- Yii 中Criteria常用方法
$criteria = new CDbCriteria; //select $criteria->select = '*';//默认* $criteria->select = 'id,na ...
- JavaScriptSerializer 时间格式化
时间格式化 Model m = , Dt = DateTime.Now }; JavaScriptSerializer js = new JavaScriptSerializer(); string ...
- /etc/fstab下的挂载类型defaults默认参数
[root@ob2 data]# cat /etc/fstab -98c0-59dbbcf8b040 / ext4 defaults UUID=e4ab7a0c-500f--bcd2-a77be0ce ...
- java-request与response编码问题
一.request.setCharacterEncoding("utf-8") 二.response.setContentType("text/html;charset= ...
- JavaScript 杂乱的小总结
基本类型只有String.number.boolean.null.undefined,还有一个Object.存在装箱类型,不过后台自动转换. 通过new创建对象时,如果没有参数,可以省略“()”.-- ...