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 激活方式概念 在 ...
随机推荐
- jfinal渲染器FileRender完整路径文件不正确的问题
jfinal作者的建议如下: 完整分支的文件下载,可以使用那个带 File 参数的构造方法:FileRender(new File(完整路径)) 从而可以使用 renderFile(new File( ...
- matlab与MFC
混合编程其实不难,关键是没有一个规范的,真正可以解决设置过程中出现的小问题的方法.我在设置的过程中,遇到了不少问题,花了多半天的时间,终于解决了,顺利地在vc中调用matlab 生成的dll文件中的函 ...
- 模板方法模式(Head first 设计模式——7)
一.模板方法模式定义 模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 从定义中,应该可以看出一部分,为 ...
- docker探索-windows10 docker 使用 mysql(二)
转自:http://blog.csdn.net/daocaoren92wq/article/details/68484049$ docker pull mysql docker@default:~$ ...
- Java并发(零)教程目录
上网看博客的时候无意中发现了有一个Java并发的教程还不错,有20多篇讲并发的,一天翻译1篇似乎也不太难.Let's go! 原文地址:http://tutorials.jenkov.com/java ...
- exit和wait一起可以彻底清除子进程的资源
#include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<stdlib.h> ...
- shell脚本----if(数字条件,字符串条件,字符串为空)
二元比较操作符,比较变量或者比较数字. 注意数字与字符串的区别. 1.整数比较 -eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如 ...
- 常用的百度API地图操作
常用的百度API地图操作,包括模糊搜索,放大缩小,并支持移动端 效果图如下 完整代码: http://download.csdn.net/detail/jine515073/8778167
- B2B(企业对企业)、B2C(企业对个人)、C2C(个人对个人)
B2B(企业对企业).B2C(企业对个人).C2C(个人对个人)
- Jquery easyui教程
目 录 1基本拖放.......................................................................................... ...