JSP使用自定义标签防止表单重复提交的方法
本文实例讲述了JSP使用自定义标签防止表单重复提交的方法。分享给大家供大家参考。具体如下:
1.编写servelt:
packagecn.itcast.apsliyuan.web.servlet;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclassLoginServetextendsHttpServlet{
/**
*反序列化
*/
privatestaticfinallongserialVersionUID=4960707156159691747L;
@Override
publicvoiddoPost(HttpServletRequestrequset,
HttpServletResponseresponse)throwsServletException,IOException{
//获得输入框中的值
Stringtoken=requset.getParameter("tokenName");
//获得session中的值
StringsessionToken=(String)requset.getSession().getAttribute(
"token");
if(token.equals(sessionToken)){
response.getWriter().print("保存成功");
requset.getSession().removeAttribute("token");//为了保证session中的值不重复,所以移除
}else{
response.getWriter().print("对不起不能重复提交");
}
}
}
2.编写自定义标签的类:
packagecn.itcast.apsliyuan.tag;
importjava.io.IOException;
importjava.util.UUID;
importjavax.servlet.jsp.JspException;
importjavax.servlet.jsp.tagext.TagSupport;
publicclassLoginTokenTagextendsTagSupport{
/**
*凡序列化
*/
privatestaticfinallongserialVersionUID=-1815168785364991254L;
@Override
publicintdoStartTag()throwsJspException{
//TODOAuto-generatedmethodstub
//得到uuid
Stringuuid=UUID.randomUUID().toString().replace("-","");
//得到session,pageContext是域对象同样也是工具类
pageContext.getSession().setAttribute("token",uuid);
Stringhtml="<inputtype='text'name='tokenName'readonly='readonly'value="+uuid+">";
try{
pageContext.getOut().print(html);
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnEVAL_BODY_INCLUDE;
}
}
3.编写×.tld文件:
<?xmlversion="1.0"encoding="UTF-8"?> <taglibxmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <!--定义版本--> <tlib-version>1.0</tlib-version> <!--定义名字--> <short-name>apsliyuan</short-name> <!--定义uri--> <uri>http://my.oschina.net/aps</uri> <tag> <name>loginTokenTag</name> <tag-class>cn.itcast.apsliyuan.tag.LoginTokenTag</tag-class> <body-content>JSP</body-content> </tag> </taglib>
4.jsp中的代码:
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
<%@tagliburi="http://my.oschina.net/aps"prefix="aps"%>
<%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>index.jsp</title>
</head>
<body>
<formaction="${pageContext.request.contextPath}/server/Login"method="post">
<aps:loginTokenTag/>
<inputtype="submit"value="Login"/>
</form>
</body>
</html>
5.防止乱码的拦截器:
packagecn.itcast.apsliyuan.filter;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclassUncodeFilterimplementsFilter{
publicvoidinit(FilterConfigfilterConfig)throwsServletException{
//TODOAuto-generatedmethodstub
System.out.println("拦截完成");
}
publicvoiddoFilter(ServletRequestreq,ServletResponseres,
FilterChainchain)throwsIOException,ServletException{
HttpServletRequestrequest=(HttpServletRequest)req;
HttpServletResponseresponse=(HttpServletResponse)res;
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
chain.doFilter(request,response);
}
publicvoiddestroy(){
//TODOAuto-generatedmethodstub
}
}
6.web.xml中的配置:
<?xmlversion="1.0"encoding="UTF-8"?> <web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID"version="2.5"> <display-name>Tag</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>loginServlet</servlet-name> <servlet-class>cn.itcast.apsliyuan.web.servlet.LoginServet</servlet-class> </servlet> <servlet-mapping> <servlet-name>loginServlet</servlet-name> <url-pattern>/server/Login</url-pattern> </servlet-mapping> <filter> <filter-name>UncodeFilter</filter-name> <filter-class>cn.itcast.apsliyuan.filter.UncodeFilter</filter-class> </filter> <filter-mapping> <filter-name>UncodeFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
希望本文所述对大家的JSP程序设计有所帮助。