您的位置:首页 > 编程语言 > Java开发

Springmvc表单防止重复提交

2017-11-17 09:27 267 查看
过滤器:servlet

拦截器:springmvc
http://blog.csdn.net/chenleixing/article/details/44573495
  过滤器和拦截器的区别:

  ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。

  ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

  ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

  ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

  ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

  ⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,
在拦截器里注入一个service,可以调用业务逻辑。

拦截器是一种类似过滤器的拦截机制,过滤器是拦截servlet等静态资源(图片,视频,jscss....)

拦截器是Springmvc内置实现,拦截action,它必须实现接口HandleInterceptor

一般是preHandle方法的重写:

return true 通过

return false 打回

表单防止重复提交:

表单中使用自定义标签:

WEB-INF中建立一个tags目录:自定义标签(xx.tag)

标签中:

<%@ tag language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ attribute name="token" required="false"%><!--这一行可以不写-->

<%
String random=UUID.randomUUID().toString();
String key=(token==null?"myToken":token);
session.setAttribute(key, random);

%>

<input type="hidden" name="<%=key%>" value="<%=random%>" />

标签的引用:

<%@taglib tagdir="/WEB-INF/tags" prefix="f"%>

<form action="${pageContext.request.contextPath}/fee" method="post">
收益: <input type="text" name="fee"> 
<f:xx></f:xx>
<input type="submit" value="提交">

</form>

实现接口HandleInterceptor,重写preHandle():

public class TokenInterceptor implements HandlerInterceptor {

public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {

//表单提交时获取隐藏域中的标识,获取到后与sesion中的标识比较,
//相同则提交通过,然后删除掉session中的值

String token = request.getParameter("myToken");
Object myToken = request.getSession().getAttribute("myToken");

if (token != null) {
if (myToken == null) {
return false;
} else {
if (token.equals(myToken)) {
request.getSession().removeAttribute("myToken");
return true;
}
}
} else {
return true;
}
return false;
}
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}

}

xx.servlet.xml配置:

<mvc:interceptors>
<!-- 配置拦截器:防止重复提交 -->
<mvc:interceptor>
<mvc:mappin
4000
g path="/fee"/> <!-- /**拦截所有的action -->
<bean class="cn.et.lesson5.TokenInterceptor"></bean>
</mvc:interceptor>

</mvc:interceptors>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: