JavaWeb:HttpSession

Posted 稻小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb:HttpSession相关的知识,希望对你有一定的参考价值。

早上花时间补完最后一点小总结:

1、关于 /:可以代表当前WEB 应用的根目录,也可以代表WEB 站点的根目录。

1)、/ 如果交给浏览器解析,则代表WEB 站点的根目录;如果交给WEB 服务器解析,代表当前WEB 应用的根目录。

2)、代表当前WEB 应用的根目录:在web.xml 文件中,映射路径;请求的转发

   代表当前WEB 站点的根目录:超链接的 href 属性;请求的重定向中的 / 

2、关于绝对路径:

1)、写绝对路径肯定不会有问题,写相对路径可能会发生问题。

2)、绝对路径:相对于当前WEB 应用的路径。在/ 代表站点根目录的时候需要在前面加上 contextPath

  例如:<form action="<%= request.getContextPath() %>/processStep1" method="post">

  例如:response.sendRedirect(request.getContextPath() + "/shoppingcart/step2.jsp");

3、表单的重复提交:

1)、重复提交的情况:

①、在表单提交到Servlet 而Servlet又通过请求转发的方式响应了一个 JSP 或html 页面,此时地址栏里还保留着Servlet 的那个路径,在响应页面点击“刷新”。

②、在响应页面没有到达时,重复点击“提交按钮”。

③、点击“返回”,再点击“提交”。

2)、不是重复提交的情况:

①、点击“返回”,“刷新”原表单页面,再“提交”。

3)、如何避免表单重复提交

在表单中做一个标记,提交到Servlet 时,检查标记是否存在且是否和预定的标记一样。若一致,则受理请求,并销毁标记;若不一致或没有标记,则直接响应提示信息:“重复提交”。

标记,仅提供一个隐藏域?行不通。因为 清除标记:没有方法清除固定的请求参数。

把标记放在 request 中?行不通。因为 表单页面刷新后,request 已经被销毁,再提交表单是一个新的 request。

把标记放在 session 中?可以!思路:

  >在原表单页面,生成一个随机值token,

  >在原表单页面把token 值放入 session 属性中

  > 在原表单页面,把token 值放入隐藏域中

  >在目标的Servlet 中,获取session 和隐藏域中的token 值

  > 比较两个值是否一致,若一致,受理请求且把session 域中的token 属性清除,若不一致,则响应提示页面:重复提交。

over。

以上是关于JavaWeb:HttpSession的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb学习总结JavaWeb开发入门

javaweb这个功能怎么实现 ajax

JavaWeb学习笔记总结 目录篇

javaweb项目启动报错

javaweb怎么做一个目录树

JavaWeb学习—JavaWeb简介