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);
}
}