Struts2之防止表单重复提交

 

时间:2017-1-14 22:29

 

——普通方法

如何解决表单重复提交?
    在JSP页面中生成一个令牌(随机字符串),将其存储到session中,并在表单中携带,提交给服务器。
    在服务器端获取请求参数时,同时获取令牌,将她与session中存储的token进行比较,如果没问题,则执行操作。
    获取令牌后马上将session中的令牌删除。

示例代码:

    JSP页面:
        <body>

        <%
            String token = UUID.randomUUID().toString();
            session.setAttribute("token", token);
        %>
 
        <form action="${pageContext.request.contextPath}/RegistServlet" method="post">
            <input type="hidden" name="token" value="<%=token %>" />
            username:<input type="text" name="username" /><br />
            <input type="submit" value="注册" />
        </form>
</body>


    Servlet:
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

 
            response.setContentType("text/html;charset=utf-8");
 
            String token = (String) request.getSession().getAttribute("token");
            String _token = request.getParameter("token");
 
            request.getSession().removeAttribute("token");
 
            if(_token.equals(token)){
                System.out.println("注册成功:" + request.getParameter("username"));
            } else {
                response.getWriter().print("禁止重复提交表单");
            }
        }


——Struts2解决表单重复提交

在Struts2中解决表单重复提交的问题,可以使用Struts2定义的一个Interceptor:token

token拦截器没有在默认的18个拦截器(defaultStack)中。

步骤
    1、在页面中使用token tag标签
        >   会在页面上生成一个令牌,并存在于表单中。
    2、在<action>标签中引入<token>拦截器。
        >   <interceptor-ref name="token"/>
    3、配置invalid.token视图
        >   <result name="invalid.token">/index.jsp</result>
    4、在页面中使用<s:actionerror />标签显示错误信息。

JSP页面示例代码:

    <form action="${pageContext.request.contextPath}/regist" method="post">
        <s:token/>
        username:<input type="text" name="username" /><br />
        <input type="submit" value="注册" />

    </form> 

转载于:https://www.cnblogs.com/wwwwyc/p/6375440.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值