ServletContext上下文对象:
可以获取全局参数
可以作为一个域对象(request,ServletContext,HttpSession)
获取上下文路径:简写方式:request.getContextPath()
请求转发:简写方式:request.getRequestDispatcher(“服务器行为项目的:根目录/”).forward(rquest,response);
请求转发和重定向的区别?
请求转发只能访问当前项目的资源,而重定向它可以访问外部的项目的资源
请求转发只有一个request对象(一次请求),重定向是两次请求(两次请求,request对象不一样)
请求转发属于服务器行为,重定向属于浏览器行为(站点的根目录(默认tomcat安装目录里面webapps里面的站点))
使用请求转发,使用request域对象获取参数数据(请求转发整个过程只有一个request对象),而重定向,使用request域对象保存了数据,但是获取不到数据(重定向的整个过程产生两个request对象,不一样的对象)
Cookie技术:
存储在浏览器端的
开发步骤:
1)创建一个Cookie对象:Cookie(String name,String value)
2)服务器发送cookie数据到浏览器端(原理就是设置一个set-cookie响应头)
response.addCoookie(cookie对象) ;
3)浏览器端自发的会将cookie数据存储起来,然后方便服务器下次传递数据
4)服务器获取cookie数据(原理获取请求头getHeader(“name”))
Cookie[] cookies = request.getCookies() ;
获取cookie数据一定要对cookie数据做非空判断!,然后进行遍历,获取
cookie对象.getName():获取cookie名称
getValue():获取cookie名称对应的内容
setValue(“内容”):设置cookie数据
URLEncorder和URLDecorder类进行加密和解密
Cookie的细节:
浏览器端不能存储中文,需要对中文进行加密,否则非法的参数异常(500)
设置Cookie的有效时间
setMaxAge(int num):
如果参数是一个正整数,经过整数秒后,cookie无效了
如果参数是一个负整数,(-1),关闭浏览器,cookie数据就没有了
如果参数是一个0,设置同名的cookie数据,那么会删除掉这个cookie
设置cookie的有效路径setPath(“不设置,默认情况就是当前web项目名称”):/web项目名称/
Cookie的案例:访问过的商品列表(获取cookie内容,(商品编号)不同的情况的算法)
存储会话数据有两种方式:
Cookie
存储在浏览器端,通过服务器发送cookie数据
使用cookie存储会话数据,相对不安全(可以cookie查到一些用户安全)
从存储数据类型来看,cookie只能存储String类型的数据,
存储数据大小有限制…
Session(用户登录案例)
存储在服务器端的,占用的服务器的资源
存储在服务器端(Session对象,JSESSIONID),相对是安全的
可以存储任意类型的数据
存储读数据无限制
Sesison:
本身在HttpServletRequest对象中就存储在一个方法:
HttpSession getSession():创建或者获取session对象
可以作为域对象,
保存数据:setAttribute(“数据名称”,”数据的内容”)
获取数据:getAttribute(“数据名称”) ;
使用Session域对象保存数据和获取数据
服务器时如何区分Session对象?
前提:创建Session对象--àsession对象才会在服务器内存存在
火狐浏览器 窗口1(session对象是 001)
保存数据
HttpSessionsession = request.getSession() ;
//2)使用session域对象保存数据
session.setAttribute("name","eric");
火狐浏览器 窗口2
//1)获取域对象中的数据,获取Session对象
HttpSession session =request.getSession()
//2)获取数据
Stringname = (String) session.getAttribute("name") ;
System.out.println("name="+name); ---à可以获取到数据(可以得到session对象--à001)
关闭火狐浏览器-à重新打开à窗口
HttpSessionsession = request.getSession()
//2)获取数据
String name = (String)session.getAttribute("name") ;
System.out.println("name="+name); -àsession获取不到:null值(session对象可能会丢失)
使用新的IE浏览器
HttpSessionsession = request.getSession()
//2)获取数据
String name = (String)session.getAttribute("name") ;
System.out.println("name="+name); -àsession获取不到:null值
Session的原理:
1)服务器解析doGet(),创建了Session对象,会给session分配一个唯一的JESSIONID(地址值)
2)服务器会将JESEESIONID发送到浏览器端,
3)在浏览器端会将JESEESIONID作为cookie存储
4)服务器端通request.getSession()对象,获取的是JESSIONID这个session的内存地址(唯一标识的ID)
session对象始终是在服务器端存储,当我们服务器挂掉了或者启动失败了(500),session对象就会从服务器内存资源中消失掉!
session的细节:
设置Session的有效时间
注意:关闭浏览器的时候,session对象不会销毁,一个session如果被销毁
在web.xml文件中配置
默认情况下:session的有效时间30分钟
设置session对象过期时间
细节2:
手动设置JSESSIONID的有效时间(将JSESSIONID作为cookie名称使用服务器发送)
;//创建一个Cookie对象
Cookie c = new Cookie("JSESSIONID", session.getId()) ;
//cookie的细节:设置它的有效时间
c.setMaxAge(1*30*24*60*60);
//服务器发送cookie数据到浏览器端
response.addCookie(c);
细节3:销毁Session对象:
void invalidate():直接sesison对象删除掉
setAttribute(String name,String value):使用域对象保存数据
getAtttibute(String name):获取域对象中的数据
voidremoveAttribute(java.lang.String name):删除session域对象中的数据
关于两个方法
HttpSessionsession = rquest.getSession() ;
在实际开中使用第二种方式(规范)
创建Session对象:默认的格式:request.getSession(true) ;
获取Session对象:默认的格式:requestgetSession(false)
HttpSessionsesison = request.getSession(boolea create) ;