【Java】Get和Post对比&&Session

Get:
1、采用URL请求路径传输参数。参数拼接在URL后面。  
2、参数传输过程中隐私性较差,直接在URL后面。
3、路径可以容纳的数据有限,只能传递少量参数。
4、所有请求默认就是get。
http://localhost:8080/JavaWeb/student?method=deleteById&id=23
http://localhost:8080/JavaWeb/student ?name=zhangsan&age=12&gender=男
Get方式传参,不是非得在form表单里面,可以手动写,在超链接的href里面直接在地址后面加 ?id=2 
POST:
1、采用 实体内容 传参数。
2、参数在传输过程中不可见,隐私性好。
3、实体内容专门用来传输数据,大小没有限制。
4、使用:在form上加method="post"
http://localhost:8080/JavaWeb/student?method=add

不管是Get方式还是POST方式传参数,后台代码获取参数的方式都是一样的。

req.getParameter("name");

数据放在服务器的技术叫Session技术:Session技术要用到Cookie

四个域对象:

Request、ServletContext、Session、Page 都可以通过setAttribute("key", value)  getAttribute("key")存取数据

ServletContext域对象的作用范围:整个web应用

所有的域对象都有这三个方法:

request.setAttribute("list", list);

request.getAttribute("list");

request.removeAttribute("list");

Request、Session、ServletContext这三个都是域对象区别就是他们的范围不一样。

request.setAttribute("list", list); requst的范围只在转发中有效。

session.setAttribute("list", list); session的范围是当前这个用户的所有操作都有效。

servletContext.setAttribute("list", list);servletContext的范围整个项目都有效。

范围:ServletContext>Session>Request

使用原则:小的范围能完成功能就放到小的里面。

数据放在浏览器端的技术叫Cookie技术:

Session技术用到Cookie技术,SessionID是保存到浏览器的Cookie。

会话技术
从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话
会话技术就是记录这次会话中客户端的状态与数据的。
会话技术 分为Cookie和Session:

Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除cookie

Session:将数据存储到服务器端,安全性相对好,增加服务器的压力

设置Cookie在客户端的持久化时间:
cookie.setMaxAge(10 * 60);//保存10分钟
设置Cookie信息在浏览器的磁盘文件中存储的时间是10分钟,过期浏览器自动删除该Cookie信息。
an integer specifying the maximum age of the cookie in seconds; if negative, means the cookie is not stored; if zero, deletes the cookie
正数:保存的时间
负数:浏览器关闭的时候Cookie就丢失
零:表示删除同名的Cookie数据。
删除客户端的Cookie:
如果想删除客户端已经存储的Cookie信息,就是将持久化时间设置为0
Session:
Cookie的局限:
1)Cookie只能存字符串类型。不能保存对象
2)不能存中文。
3)1个Cookie的容量不超过4KB。
如果要保存非字符串,超过4kb内容,只能使用session技术!!!
Session技术是将数据存储到服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,
但客户端需要每次携带一个标识的ID:JSESSIONID去服务器寻找自己的内存空间。
所以说Session 技术是基于Cookie技术的,Session需要借助于Cookie存储客户的唯一标识JSESSIONID。
1.获得Session对象
两中getSession方法:
HttpSession session = request.getSession(true) / request.getSession(false)  : 
request.getSession(false):得到session对象。原来有Session就直接返回,没有返回null
request.getSession(true):创建或得到session对象。原来有Session就直接返回,没有Session自动创建新的session对象。
此方法会获得专属于当前会话的Session对象,如果服务器端没有该会话的Session 对象会创建一个新的Session返回,如果已经有了属于该会话的Session直接将已有的Session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在 session了)
request.getSession();不加参数默认就是true。
2.怎样向session中存取数据
Session也是存储数据的区域对象,所以session对象也具有如下三个方法:
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
3.Session对象的生命周期
创建:第一次执行request.getSession()时创建
销毁:
1)服务器关闭时
2)session过期/失效(默认30分钟)
如果不停的清空客户端的sessionid,然后在请求,就会在服务器产生很多的垃圾session区域,浪费资源。
void setMaxInactiveInterval(int interval)  : 设置session的有效时间
session对象销毁时间:
 1、 默认情况30分服务器自动回收
 2、 修改session回收时间
 3、 全局修改session有效时间
问题:时间的起算点 从何时开始计算30分钟?
从不操作服务器端的资源开始计时
可以在 工程的web.xml中进行配置
<session-config>
        <session-timeout>30</session-timeout>
</session-config>
3)手动销毁session (注销或者退出)
session.invalidate();
默认在一次会话中,也就是说在,一次会话中任何资源公用一个session对象
面试题:浏览器关闭,session就销毁了? 不对 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值