自定義JSP防重複提交標籤
阿新 • • 發佈:2018-11-25
package com.hhwy.tag; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import java.io.IOException; import java.util.UUID; /** * <br>描 述:防止重複提交 * <br>創 建 人:Jinzhaoqiang * <br>建立時間: 20181120 * <br>修改備註:無 * String token = request.getParameter("token");// 獲取使用者表單中提交的 String pageToken = (String) request.getSession().getAttribute("token"); if (token.equals(pageToken)) { // 令牌只能使用一次 request.getSession().removeAttribute("token"); //..業務處理 } else { System.err.println("不能重複提交"); } * <br>版本:1.0.0 */ public class TokenTag extends TagSupport { @Override public int doStartTag() throws JspException { String uuid = UUID.randomUUID().toString().replace("-", ""); pageContext.getSession().setAttribute("token", uuid); // 向頁面上輸出 JspWriter out = pageContext.getOut(); try { String html = "<input type='hidden' value='" + uuid + "' name='token'/>"; out.print(html); //out.clear(); 會將該標籤之前的內容清除 out = pageContext.pushBody(); } catch (Exception e) { e.printStackTrace(); }finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } return EVAL_BODY_INCLUDE; } }
stm.tld
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="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>stm</short-name> <!-- 宣告標籤的引用方式識別符號號 --> <uri>/stm.com</uri> <!-- 宣告自己的標籤 --> <tag> <name>token</name> <tag-class>com.hhwy.tag.TokenTag</tag-class> <body-content>JSP</body-content> </tag> </taglib>
jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%> <%@ taglib uri="/stm.com" prefix="stm"%> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,Chrome" /> <title></title> </head> <body> 首頁 <stm:token></stm:token> 這是body </body> </html>