request 可以从请求行中获取数据 getParameter()
也可以从容器中获取数据
在jsp页面获取: ${key}
例如:
商店: 服务器
你 : 客户端
买多次物品: 一次会话 (session)
会员卡:
类型 对象名 在jsp页面获取相应容器的值
HttpServletRequest request ${requestContext.msg}
HttpSession session ${sessionContext.msg}
ServletContext application ${applicationContext.msg}
request: request.getParameter("");
保存数据: key必须是String,value是Object类型 request.setAttribute("key",value);
取数据: 通过key拿到value值,需要的话可以强转 Object o = request.getAttribute("key");
request.setAttribute("name","tom");
String name = request.getParameter("name");
Object obj = reqeust.getAttribute("name");
作用范围:request的存/取数据只能在一次请求之内起作用.比如服务器内部跳转的时候(因为内部跳转客户端只发一次请求).
注意:客户端重定向是不行的,因为客户端重定向会发出多个请求.
总结:1, reqeust 请求行/请求体/容器 获取值
get/ post/
把数据放到reqeust容器中:request.setAttribute("key",Object);
在后台代码 取:
Object o = request.getAttribute("key");
在jsp页面:取:
el表达式:${key}
登入成功:在下一个页面显示名字
login.jsp
–> form url->LoginServlet
req.getParameter(“key”)–> 登入成功
LoginServelt-跳转->success.jsp –> 显示 用户名
把数据从后台传到前台页面 就需要用到容器
request容器 :
setA…(“key”,value)
页面:获取:
${key}
eg:
存:
request.setAttribute("name","tom");
容器 :map
取:
String name =(String)request.getAttribute("name");
第一次执行getSession() 服务器就会给浏览器一个标识
在接下来的所有请求都是属于一次会话(Session)
session容器 一般用来做 有隔断的数据传输
获取session: 通过 reqeust.getSession(); 当第一次执行这句代码的时候
怎么把数据放到session容器中: session.setAttribute("key","value");
从session中获取数据: Object o = session.getAttribute("key")
在页面中获取session中的值:
el表达式 : ${key}
session有生命周期:
1,创建:第一次调用reqeust.getSession();
2,死亡:1,正常 时间到了死亡 正常一个session时间是30分钟
2,手动死亡 session.invalidate();session就销毁(数据被清空)标识结束
3,手动设置session的生命时长。
web.xml配置
1
终结:
session创建:
当代码执行getSession();
没有jsessionid 然后服务器给创建一个jsessiondid 然后通过response写回给浏览器
下次访问的时候 就会携带cookie中的jsessiondid到服务器端
浏览器每次发送请求的时候就会携带cookie
保存数据:
保存数据: key必须是String,value是Object类型 session.setAttribute("key",value);
取数据: Object o = session.getAttribute("key");
作用范围:在一个会话之中起作用.一个会话可以包括很多个request请求,所以放在session中的数据,可以被多个请求所共享.
当程序第一次调用到request.getSession()方法时说明客户端明确的需要用到session此时创建出对应客户端的Session对象.
当session超过30分钟(这个时间是可以在web.xml文件中进行修改的)没有人使用则认为session超时销毁这个session.
程序中明确的调用session.invalidate()方法可以立即杀死session. 当服务器被非正常关闭时,随着虚拟机的死亡而死亡.
注意:在浏览器关闭的时候会把jsesionid删除掉,这样就导致浏览器重启以后再次访问servlet就相当于创建了新的会话,但是上一个浏览器的session会话还存在服务器中。
*** session的钝化与活化:就是说服务器被很多的session访问,内存不足,为了更好的运行,只好把一部分比较长时间没有变动的session从内存中放到了硬盘(钝化),等该session的用户重新使用的时候,那么该session就会自动的被调用到内存中,用户在整个过程中发觉不出来session又被调动的影响(活化)
序列化: 对象--->字符串---> 保存到文件
session序列化:session生命周期没有结束,但是tomcat正常关闭
反序列化: 字符串--->对象---> 放到服务器中
关于session的实现原理之后讲到Cookie的时候会说到!
application:--->获取三种方法:
第一种:ServletContext application =req.getSession().getServletContext();
第二种:ServletConfig config = getServletConfig();//这个ServletConfig 就是init(...)
ServletContext application = config.getServletContext();
第三种:ServletContext application = this.getServletContext();
保存数据: key必须是String,value是Object类型 application.setAttribute("key",value);
取数据: Object o = application.getAttribute("key");
作用范围:整个项目在运行期间,只有一个application对象,所以这个对象是所有人所有会员共享的,大家都可以向这个对象里面存值,也可以再拿出来.因为 这个对象一个项目中只有一个.
作用范围比较: request < session < application (page < request < session < application
这page是之后我们在jsp中要学习的另一个范围,页面范围,只在一个页面中起作用。)
注意:getParameter(“key”)方法和getAttribute(“key”)方法
getParameter是接收客户端在请求中传过来的数据 key-value
getAttribute方法是从容器中取值,取到之前调用setAttribute方法保存到这个对象里面的值.
掌握:
1,容器的作用范围
2,怎么获得容器
3,怎么使用容器传值(获取/传到页面)