• 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。

  • 相关阅读:
    Hibernate(九)HQL查询
    Hibernate(八)多对多映射
    Hibernate(七)一对一映射
    Hibernate(六)一对多映射(多对一)
    Hibernate(五)基本数据类型
    Hibernate(四)结构-基础语义和事务
    Hibernate(三)结构-配置文件-实体映射及配置文件
    Hibernate框架简介(二)基本使用增、删、改、查
    Hibernate生成实体类-手工写法(一)
    Java从零开始学四十(反射简述一)
  • 原文地址:https://www.cnblogs.com/daoxiaobai/p/6277667.html
Copyright © 2020-2023  润新知