Springmvc表单防止重复提交

过滤器: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:mapping path="/fee"/> <!-- /**拦截所有的action -->
<bean class="cn.et.lesson5.TokenInterceptor"></bean>
</mvc:interceptor>

</mvc:interceptors>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值