同一用户不同页面分享资源的方式
- cookie
- sendredirect()转向
- 隐藏表单
- session技术
- req.setAttribute
cookie:
服务器会把部分用户信息保存在本地特定的路径下,帮助下次调取。如网页背景色、背景音乐、表单、特定布局喜好,由于保存在客户端,因此安全性不高。
使用方法:
创建cookie:
Cookie myCookie=new Cookie("color", "red");
设置存在时长,单位秒,不设置将不会保存。
myCookie.setMaxAge(180);
添加cookie到服务器:
res.addCookie(myCookie);
在接收端得到cookie:
Cookie[] RCookie=req.getCookies();
得到一条cookie:
Cookie myCookie1=RCookie[1];
得到名字
myCookie1.getname()
得到值:
myCookie1.getvalue()
删除:
cookie:myCookie.setMaxAge(0);
sendredirect()
优点是速度快,缺点是只能传字符串。
使用方法:
res.sendRedirect("Wel?uname=" + u); u为变量名。
在另一个文件中先获取,
String u=req.getParameter("uname");
再使用。
**注意事项:**
如果sendredirect中需要传两个值,在方法中写
res.sendRedirect("Wel?uname="+u+"&upass="+p);
隐藏表单
随表单一起发送但是不想显示在页面上的属性。
使用方法:
<input type=hidden name=sex value=男>
Session
在浏览器访问网站时,服务器会为这个浏览器单独开辟一个空间,该空间的默认存在时间为30min,这个时间是发呆时间,是你没用这个session的时间,这个时间也可以更改。在tomcat的conf文件夹下的web.xml有个session-timeout属性,修改这个属性会修改session的默认时间,也可以用setMaxInactiveInterval方法修改某session的发呆时间,设置为负数时,就相当于让session永远有效,设置为0时,相当于干掉了这个session。session是同一浏览器不同界面的资源分享,不能是同一浏览器的不同窗口,比如双击浏览器图标得到的窗口,会拥有不同的session。可以通过getid方法得到session的id号。session会直接占用服务器内存,所以只有在迫不得已的情况下才用。session像一张n行2列的表,第一列是属性名,第二行是属性值。用例:
得到session:
HttpSession hs=req.getSession();
设置属性:
hs.setAttribute("lover", u);
获取属性:在其他页面需要写上
HttpSession hs=req.getSession();
String girl=(String)hs.getAttribute("lover");
删除属性:
hs.removeAttribute("lover");
Servletcontext讲解
servletcontext是在服务器端一块公共访问空间,可以供所有用户(客户端)使用,他也是一张表,几乎和session用法一样,生命周期从服务器开启到关闭,常驻服务器,也不建议使用。
得到servletcontext:
servletcontext name=this.getServletContext();
设置属性:
setattribute(object name,object value)
得到值:
servletcontext name=this.getServletContext();
Name.getattribute(object name)
删除值:
removeattribute(object name)
setAttribute方法
发送端:
req.setAttribute("test",sss) ;
接收端:
req.getAttribute("test")
使用这种方法要通过转发方式,不可以用重定向,重定向前后的req不同。
注意事项:
• 为了防止用户直接通过在地址栏输入welcome界面的url进入系统,我们可以在action界面把用户填入的用户名放入session,在welcome界面要先验证session有没有填过用户名
• session和cookie的比较
存放位置:服务器端vs客户端
安全性:高vs低
存在时间:绝对时间vs发呆时间
• 获得用户的ip地址:Req.getremoteaddr();
获得用户的主机名:Req.getremotehost();