会话跟踪
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了会话跟踪相关的知识,希望对你有一定的参考价值。
复习:
1、请求和响应
当你在客户端浏览器发出一个请求的时候,tomcat就会创建servlet对象,并且创建request对象和response对象。再把两个的对象作为service方法的参数传递到servlet对象中,根据客户端发送的请求方式,调用doGet()和doPost()方法
可以在request对象中,取得请求的数据:
(1)普通参数,通过request.getParameter(String string);
(2)单选按钮值,通过 request.getParameter(String string);
(3)多选框的值,通过requset.getParameterValues(String string);
(4)如果不知道要获取到的值对应的参数名称也就是key值时,可以通过request.getParameterNames();得到所有传递过来的名称信息。
得到的数据应该交给业务层来处理。
2、请求转发和重定向
请求转发:在客户端浏览器发出且近发出这一个请求。在服务器端把这个请求转发到多个servlet,这是同一个request不断地在服务器中传递。地址栏不会有任何变化,不管有多少个servlet参与处理,他们都共用一个request对象。所以这个request对象在所有的servlet中都可以得到的。
重定向:当前servlet对于当前请求不作处理,而是带领浏览器去另外一个servlet。如果有了新的请求,那么request对象就一定创建新的servlet对象。
3、请求数据的方式。(参数形式,url传值,问号参数,属性)
(1)可以在地址栏中,写url的问号参数传值:key=value & key= value
(2)在页面上的超级链接可以进行相同方式的传值
(3)表单的形式:表单形式也会转化成url问号参数进行传值。
4、之前的完整增删改查~要实现啊~
回话跟踪技术:
1、url的传值(request中参数)一次请求
2、request(参数,属性)一次请求
3、Session(一次回话,多次请求)基于一个浏览器。这里需要解释:前提是使用了session对象。使用方法为:在servlet中这样写:request.getSession()。如果是这样,那么浏览器开始访问服务器的servlet。浏览器携带JSessionId到servlet去(如果第一次去访问,则JSessionId为空),此时服务器根据浏览器携带的会话标识码去Session的集合里面找,如果在浏览器的集合中包含次标识码对应的session对象,那么:request.getSession()返回已经创建的Session对象,如果没有找到,则根据一定的规则(我猜包括时间,浏览器方的主机名,服务器的主机名,servlet的名字等等信息,构成唯一标示),新创建一个sessionid。当服务器进行玩数据处理给客户端做出相应的时候,把这个sessionid带回给客户端,此时,客户端保有当前sessionid在当前浏览器的缓存中(这里提到当前浏览器是因为,这个sessionid只对当前浏览器有效,如果更换浏览器则认为重新访问了服务器,也即会重新创建一个session。)当还是同一个浏览器再次访问这个应用程序的servlet(可能是当前的servlet也可能不是了,而是这个java web的其他servlet)时,浏览器会带着这个sessionid再次进行访问,如果服务器端依然有request.getSession().这行代码的话,则拿着之前的sessionid到服务器端的session的集合中,进行匹配,如果有就使用之前存在的sessionid,如果没有,那么就再次重新创建一个session生成对应的sessionid反馈给浏览器端,如果两个sessionid不一致,那么浏览器保有最新从服务器端返回的sessionid。
4、Cookie(一次回话,多次请求)如果不设置c.setMaxAge(int minute);的话,session和session可以看做基本相同,但是如果设置了的话,那么这样我们就可以将数据保存一天或者一周,只要在那个参数里面进行响应设置就可以。不过还是稍微有一些区别,cookie的数据是保存在对应浏览器的文件中,只不过同时还设置了一个清空时间,如果过了maxAge的话,这个保存会话信息的文件也会被删除。Cookie这里我还缺一点儿清醒的认识,明后天再编一下码进行熟悉。
5、servletContext(一次服务),基于服务器的。如果服务器不关闭那么数据就一直存在。
会话的创建:
(1)在servlet中进行创建,利用request.getSession().
(2)A公司浏览器,浏览该站点,服务器判定是否有对应sessionid,如果没有则创建,如果已经存在则使用已经存在的session。B公司浏览器不能使用同一个session。
会话的使用:
(1)只能有setAttribute()和getAttribute()这两个方法,原来使用的地址栏传值方式不再适用。
会话的销毁:
(1)默认这个对象的销毁时间是30min。
(2)有两种设置方式,一种是在代码里面设置,采用:session.setMaxInactiveInterval(60*60);不过一般不这样设置,都是在web.xml文件里面进行设置:采用:
<!-- session 存活时间 对于你这个项目中 创建的所有session 都是一样的-->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
Session这个对象存储在服务器里面,不过浏览器拿着一个sessionid。
Cookie 是在Servlet里面new出来的,跟随response发送到客户端,这个对象就存储到浏览器对应的缓存或者文件中。取决于setMaxAge()
Session的作用域范围和cookie是一样的,sessionid的存储是以cookie的对象形式存储。
Cookie的范围在设置了时间以后会变大,基于一种浏览器,多次开启都能使用(只是取决于设置的时间长短。)
ServletContext servlet上下文对象:基于一次服务。不管有多少种浏览器,关闭开启多少次,只有服务不停,存储的数据就不会消失。
1、request:基于一次请求,(参数,属性)
2、session:基于多次请求(一次回话),基于浏览器,id在客户端,session对象在服务端(数据)
3、cookie:一次会话,(把cookie对象存储在浏览器的缓存中(浏览器关闭),存储在浏览器的cookie的文件中(浏览器关闭依然有数据,换一种浏览器数据不再有))
4、servletContext:一次服务
补充:
Form是最重要的web应用提交手段,所有数据量大,安全性要求高的数据必须使用form提交。
浏览器段验证:
目前几乎所哟肚饿web应用程序都具有浏览器段数据验证功能,浏览器端验证的主要手段是使用javascript+Css+html的部分特性实现对数据的有效性,合法性检测。
服务器端验证:
对数据安全性要求较高的应用都会使用此种验证方式,在安全性方面有着浏览器端验证不可比拟的游戏,但在验证效率方面不及浏览器段来的高效便捷。通常将两种方式结合进行数据校验。
以上是关于会话跟踪的主要内容,如果未能解决你的问题,请参考以下文章
使用跟踪代码管理器的 Android 内容实验几天后未显示会话
实现会话跟踪时出现 NullPointerException