zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    10 个深恶痛绝的 Java 异常。。
    为什么公司宁愿 25K 重新招人,也不给你加到 20K?原因太现实……
    推荐一款代码神器,代码量至少省一半!
    Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
    hdu 3853 LOOPS(概率 dp 期望)
    hdu 5245 Joyful(期望的计算,好题)
    hdu 4336 Card Collector(期望 dp 状态压缩)
    hdu 4405 Aeroplane chess(概率+dp)
    hdu 5036 Explosion(概率期望+bitset)
    hdu 5033 Building (单调栈 或 暴力枚举 )
  • 原文地址:https://www.cnblogs.com/daoxiaobai/p/6277667.html
Copyright © 2011-2022 走看看