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 激活方式概念 在 ...
随机推荐
- iptables进行DNAT(目标地址转换)
前言:对于Linux服务器而言,一般服务器不会直接提供公网地址给用户访问,服务器在企业防火墙后面,通常只是暴露一个公网给用户,下面已80端口进行实现. 演示环境:VM (1)host: 172.16. ...
- JAVA-JSP声明语句
相关资料: <21天学通Java Web开发> 结果总结: 1.<%! %>声明的变量为全局变量. 实例代码: <html> <head> <ti ...
- 一款纯css3实现的动画按钮
今天给大家分享一款纯css3实现的动画按钮.第一排的按钮当鼠标经过的背景色动画切换,图标从右侧飞入,第二排的按钮当鼠标经过的时候边框动画切换,图标右侧飞入,效果非常好,一起看下效果图: 在线预览 ...
- Winform中导入exicel文件
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); ...
- git 远程仓库版本的回退以及git reset 几种常用方式记录
由于 github push 了两个比较潦草的commit, 自己很不满意,又不想重新开vpn进行上传,所以找了一下相关的教程. 最后研究了一下,原理为先在本地还原到你想要的commit,然后强制pu ...
- [DNS]部署局域网DNS服务器
This is a step by step tutorial on how to install and configure DNS server for your LAN using bind9. ...
- IPC介绍——10个ipcs例子
IPC介绍——10个ipcs例子 semaphorearrays2010performancesystemaccess ipcs是一个uinx/linux的命令.用于报告系统的消息队列.信号量.共享内 ...
- C中结构体的存储分配
C中结构体的存储分配 对于C语言中结构体所占的存储空间的大小,也一直是笔试面试的常客,今天好好看了一下这方面,以前一直以为很清楚了,今天通过各种实际测试举例,发现原来还是没有搞透彻,好在现在是彻底懂了 ...
- m72 gprs模块的应用编写
#include <fcntl.h>#include <termios.h>#include "AppInit.h"#include "A5_Se ...
- 登录centos虚拟机后显示-bash-4.1
http://zhidao.baidu.com/link?url=KwpGOdwFw1oxnL71pvPlfRgbRL_IuQeYRzIYJjiDb2SnX0dQye5yUXqHAGSyuD6u2nD ...