Servlet学习之三不同页面数据共享

1、cookie

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

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

(3)网站的个性化,比如定制网站的服务,内容。

2、sendRedirect

sendRedirect("welcome?uname=shunping")的形式

优点:传送信息的速度比较快   缺点:它只能传送字符串,而不能传送一个对象

(1)welcome代表你要跳转的那个servlet的url、(2)servlet名和变量之间有?号、(3)如果传递的是中文,那你将得到乱码,需要处理一下

示例:

LoginCl获取Login页面登录框的用户名和密码

	//接收用户名和密码
   	  	String u=req.getParameter("usrename");
   	  	String p=req.getParameter("passwd");

LoginCl界面向wel界面传递值,实现不同页面值得共享

res.sendRedirect("wel?uname="+u+"&uPass="+p);

3、隐藏表单

<form action=login>

<input type=hidden name=a value=b>

</form>

HiddenForm1内含有隐藏表单,然后提交给hiddenform2

package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;


public class HiddenForm1 extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		try{
			res.setContentType("text/html;charset=gbk");
			PrintWriter pw=res.getWriter();
			
			String test="abc";
			
			pw.println("<html>");
			pw.println("<body>");
			pw.println("<h1>登录界面</h1>");
			pw.println("<form action=hiddenform2 method=post>");
			pw.println("用户名:<input type=text name=username><br>");
			pw.println("密码:<input type=password name=passwd><br>");
			pw.println("<input type=hidden name=sex value="+test+"><br>");
			pw.println("<input type=submit value=test><br>");
			pw.println("</form>");
			pw.println("</body>");
			pw.println("</html>");
			
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	public void doPost(HttpServletRequest req,HttpServletResponse res){
		this.doGet(req,res);
	}
    
}

package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;


public class hiddenform2 extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		try{
			//res.setContentType("text/html;charset=gbk");
			PrintWriter pw=res.getWriter();
			
			String u=req.getParameter("username");
			String p=req.getParameter("passwd");
			String sex=req.getParameter("sex");
			
			pw.println("username="+u);
			pw.println("password="+p);
			pw.println("sex="+sex);
			
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	public void doPost(HttpServletRequest req,HttpServletResponse res){
		this.doGet(req,res);
	}
    
}


4、Session

当用户打开浏览器,访问某个网站时,服务器会在服务器内存为该浏览器开辟一个空间,该空间被这个浏览器独占。

使用在何处:(a.网上商城的购物车;b.保存登录用户的信息;c.将某些数据放入到Session中,供同一用户的各个页面使用;d.防止用户非法登录到某个页面)

可以把session理解为一张表。有属性和属性值。如何使用session:

(1):得到session

HttpSession hs=request.getSession(true);

(2):向session添加属性

hs.setAttribute(String name,Object val);

(3):从session得到某个属性

String name=hs.getAttribute(String name);

(4):从session删除某个属性

hs.removeAttribute(String name);

session中属性存在的默认时间是30min,你也可修改它存在时间:a 修改web.xml;session的各个属性要占用服务器的内存的,因此软件公司会在迫不得已时才使用的。

示例1:

a.防止用户非法登录指定页面

LoginCl获得session并保存相应的值

package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;


public class LoginCl extends HttpServlet  {
   //重写get请求
   public void doGet(HttpServletRequest req,HttpServletResponse res){
   	  try{
   	  	//接收用户名和密码
   	  	String u=req.getParameter("usrename");
   	  	String p=req.getParameter("passwd");
   	  	
   	  	//验证
   	  	if(u.equals("sp")&&p.equals("123")){
   	  		//合法
   	  		//跳转到wel
   	  		//将验证成功的信息写入session
   	  		//1、得到session
   	  		HttpSession hs=req.getSession(true);
   	  		//修改session的存在时间
   	  		hs.setMaxInactiveInterval(20);
   	  		hs.setAttribute("pass","ok");
   	  		res.sendRedirect("wel?uname="+u+"&upasswd="+p);
   	  	}else{
   	  		//不合法
   	  		//跳转
   	  		res.sendRedirect("login");//写你要跳转的servlet的url
   	  	}
   	  }catch(Exception ex)
   	  {
   	  	ex.printStackTrace();
   	  }
   }
   
   //重写get请求
   public void doPost(HttpServletRequest req,HttpServletResponse res){
   	   this.doGet(req,res);
   }
}
wel界面根据获得的session值判断是否为非法登录

package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;


public class wel extends HttpServlet{
   //重写get请求
   public void doGet(HttpServletRequest req,HttpServletResponse res){
   	 
   	 //得到session
   	 HttpSession hs=req.getSession(true);
   	 String val=(String)hs.getAttribute("pass");
   	 
   	 //判断
   	 if(val==null){
   	 	//非法登录
   	 	try{
   	 		res.sendRedirect("login");
   	 	}catch(Exception ex){
   	 		ex.printStackTrace();
   	 	}
   	 }
   	 //得到从logincl传递的用户名
   	 String u=req.getParameter("uname");
   	 String p=req.getParameter("upasswd");
   	 
   	 try{
   	  	PrintWriter pw=res.getWriter();
   	    pw.println("wel hello "+u+" "+p);
   	  }catch(Exception ex)
   	  {
   	  	ex.printStackTrace();
   	  }
   }
   
   //重写get请求
   public void doPost(HttpServletRequest req,HttpServletResponse res){
   	   this.doGet(req,res);
   }
}

示例2:

sessionTest1中保存一个session值(有效时间为30秒),sessionTest2中获取sessionTest中保存的值

package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;


public class sessionTest1 extends HttpServlet{
    
    public void doGet(HttpServletRequest req,HttpServletResponse res){
    	try{
              res.setContentType("text/html;charset=gbk");
    	      PrintWriter pw=res.getWriter();
    	      HttpSession ht=req.getSession(true);
    	
    	      //服务器为了可以管理客户端,每个session一个id
    	      String sessionid=ht.getId();
    	      pw.println("sessionTest1的session id="+sessionid+"<br/>");
    	      
    	      ht.setAttribute("name","韩顺平");
    	      ht.setMaxInactiveInterval(30);
    	      pw.println("在session中放入了一个属性 name=韩顺平");
    	}catch(Exception ex){
    		
    	}

    }
    public void doPost(HttpServletRequest req,HttpServletResponse res){
    	this.doGet(req,res);
    }
}

package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;

public class sessionTest2 extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res){
    	//得到sessionTest1中的属性
    	try{
    		res.setContentType("text/html;charset=gbk");
    		PrintWriter pw=res.getWriter();
    		HttpSession ht=req.getSession(true);
    		String name=(String)ht.getAttribute("name");
    		pw.println("name="+name);
    	}catch(Exception ex){
    		
    	}
    }
    public void doPost(HttpServletRequest req,HttpServletResponse res){
    	this.doGet(req,res);
    }
}

清除session:

package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;


public class sessionTest3 extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		try{
    		res.setContentType("text/html;charset=gbk");
    		PrintWriter pw=res.getWriter();
    		HttpSession ht=req.getSession(true);
    		ht.setAttribute("you","周星星");
    		ht.setAttribute("he","刘德华");
    		
    		pw.println("在没有删除you属性前you 的值="+ht.getAttribute("you")+"<br/>");
    		ht.removeAttribute("you");
    		ht.setMaxInactiveInterval(0);
    		
    		pw.println("删除you属性后you 的值="+ht.getAttribute("you")+"<br/>");
    		
    		pw.println("删除you属性后he的值="+ht.getAttribute("he")+"<br/>");
    		
    	}catch(Exception ex){
    		ex.printStackTrace();
    	}
    }
    public void doPost(HttpServletRequest req,HttpServletResponse res){
    	this.doGet(req,res);
    }
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Henry_Jing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值