会话跟踪(页面之间传值)的几种方式:

在使用request请求资源并且是doGet方法的时候,字符要进行转码。

转码方式:String name=req.getParameter("uName");

          name=new String(name.getBytes("ISO-8859-1"));

方式一、URL传参

<a href=’addViewServlet?name=hello’>当到达addViewServlet页面的时候,通过request.getParamer(“name”)即可取得前页面中的值,但是此方式使用的是doGet方式提交,并且它的安全性比较低。因为直接复制地址就可以得到相应的资源,无需登入。

 

方式二、隐藏表单域

<input type=’hidden’ name=’userName’ value=’hello’>必须写在<form>表单之中,当到达addViewServlet页面的时候,通过request.getParamer(“name”)即可取得前页面中的值。当提交方式为doPost时,在地址栏上是不能直接输入地址取得,这种方式虽然相对于安全些,但是当用户查看源文件的时候,则还是能看到。

 

方式三、HttpSession(session会话对象)

HttpSession session=req.getSession();

session.setAttribute("userName", name);

当到达addViewServlet页面的时候,通过session.getAttribute("userName");即可取得前页面中的值。Session的生命周期在当前整个浏览器中。只要浏览器不关闭,session对象就存在。

当数据只要使用一两次或者传递一两个页面的时候,尽量不要使用session,内存会使用过大,造成服务器的负荷过重,session中一般放入的是经常使用的一些关键信息。

 

为什么session对象是request请求(getSessionId有什么用,session对象为什么能保存客户信息)?解答:当用户通过requset请求服务器端的信息的时候,服务器会发一个Cookie对象响应给客户端,并且存在客户的浏览器上。这个Cookie对象里面包含了一个sessionId,因为http协议是无状态的,即一次请求与响应就结束了,当用户再次请求的时候,服务器会查找是否有用户请求过的sessionId,如果有,则把客户的信息发给客户。如果没有,或者是第一次请求,则服务器会给你一个新的Id号。这就是session对象的会话跟踪。

req.getSession()客户端会发一个sessionId给服务器,请求服务器端的sessionId在不在,在的话服务器把session返回给客户。不在的话重新创建一个新的session,并把新的sessionId返回给浏览器。getSession()中无参,说明是请求一个新的session。

 

方式四、request请求转发

request.setAttribute("name", name); request.getRequestDispatcher("url资源).include(request,response);include提交方式为Post提交,安全性高些,一般用于较少页面之间的传值。如果request在多个页面之间传递,则每个页面都要写set方法,因为它是一次请求与响应。

 

Cookie对象:

服务器可以将后台数据发送给客户端浏览器,使用方式如下:

Cookie  cook=new Cookie(“aaaa”,”tom”);

Response.addCookie(cook);

不建议被使用,因为浏览器中有个删除Cookie操作,如果用户点击删除了Cookie,则在浏览器中找不到服务器中的资源,可控性差。