码迷,mamicode.com
首页 > 编程语言 > 详细

JavaWeb:HttpSession(二)

时间:2017-01-12 23:13:37      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:站点   servlet   car   重复   step   tps   href   form   隐藏   

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

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(二)

标签:站点   servlet   car   重复   step   tps   href   form   隐藏   

原文地址:http://www.cnblogs.com/daoxiaobai/p/6277667.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!