新聞中心
IBATIS是一款優(yōu)秀的ORM框架,被廣泛應用于Java Web項目中。在Web開發(fā)中,很多場景下需要提交表單數(shù)據(jù)到數(shù)據(jù)庫中,但是由于網(wǎng)絡等各種原因,可能會造成表單數(shù)據(jù)被重復提交,導致數(shù)據(jù)庫出現(xiàn)重復數(shù)據(jù)。因此,如何避免表單數(shù)據(jù)重復提交成為Web開發(fā)中的一個重要問題。本文將介紹一種在IBATIS中實現(xiàn)數(shù)據(jù)庫提交避免重復提交的方法。

目前創(chuàng)新互聯(lián)公司已為近1000家的企業(yè)提供了網(wǎng)站建設、域名、雅安服務器托管、網(wǎng)站改版維護、企業(yè)網(wǎng)站設計、陵城網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
1. 原理
在Web開發(fā)中,避免表單數(shù)據(jù)重復提交的方法通常是采用token機制。即當表單頁面被加載時,服務器生成一個隨機的token值,把該值存儲在session中,并將該token值作為表單數(shù)據(jù)提交時的一個參數(shù)。當用戶提交表單數(shù)據(jù)時,服務器會校驗該token值和Session中的token值是否一致,若一致,則表示該表單數(shù)據(jù)是之一次提交,可以直接保存到數(shù)據(jù)庫中;若不一致,則表示該表單數(shù)據(jù)已經(jīng)提交過了,需要返回錯誤提示。
在IBATIS中,可以使用攔截器機制實現(xiàn)token校驗。攔截器是一種AOP(面向切面編程)的方式,可以在方法執(zhí)行前后自定義一些操作。在IBATIS中,可以使用SqlMapClient攔截器,對數(shù)據(jù)庫操作進行攔截,實現(xiàn)token校驗和提交數(shù)據(jù)操作。
2. 實現(xiàn)步驟
(1)在SqlMapConfig.xml中配置攔截器
“`
…
“`
(2)實現(xiàn)攔截器類
“`
public class TokenInterceptor extends AbstractSqlMapClientInterceptor {
// token值在session中的key
private static final String TOKEN_KEY = “token”;
// token值在表單數(shù)據(jù)中的key
private static final String TOKEN_PARAM = “token”;
@Override
public Object intercept(Object obj, Method method, Object[] args, InterceptorChn chn)
throws SQLException {
if (method.getName().equals(“update”)) {
// 獲取表單提交數(shù)據(jù)中的token值
String token = null;
for (Object arg : args) {
if (arg instanceof Map) {
Map map = (Map) arg;
token = (String) map.get(TOKEN_PARAM);
break;
}
}
if (token != null) {
// 獲取Session中的token值
String sessionToken = (String) ActionContext.getContext().getSession().get(TOKEN_KEY);
// 如果兩個token值相同,則表示表單數(shù)據(jù)沒有重復提交,可以執(zhí)行數(shù)據(jù)庫操作
if (sessionToken != null && sessionToken.equals(token)) {
// 執(zhí)行數(shù)據(jù)庫操作
Object result = chn.intercept(obj, method, args);
// 在執(zhí)行完后,從Session中移除該token值
ActionContext.getContext().getSession().remove(TOKEN_KEY);
return result;
} else {
// 如果兩個token值不同,則表示該表單數(shù)據(jù)已經(jīng)提交過了,不需要重復提交
throw new SQLException(“數(shù)據(jù)重復提交”);
}
}
}
// 如果執(zhí)行的不是update操作,則直接執(zhí)行
return chn.intercept(obj, method, args);
}
}
“`
(3)在Action類中生成token值
在Action類中,生成一個隨機的token值,并將該值存儲在Session中。以Struts2框架為例:
“`
public class MyAction extends ActionSupport {
@Override
public String execute() throws Exception {
// 生成一個隨機的token值
String token = UUID.randomUUID().toString();
// 將該token值存儲在Session中
ActionContext.getContext().getSession().put(TokenInterceptor.TOKEN_KEY, token);
// 返回結果頁面
return SUCCESS;
}
}
“`
(4)在P頁面中提交表單數(shù)據(jù)時加入token值
在P頁面中,提交表單數(shù)據(jù)時加入一個token參數(shù),值為Session中的token值。以Struts2框架為例:
“`
成都網(wǎng)站建設公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導10多年以來專注數(shù)字化網(wǎng)站建設,提供企業(yè)網(wǎng)站建設,高端網(wǎng)站設計,響應式網(wǎng)站制作,設計師量身打造品牌風格,熱線:028-86922220
用ibatis連接數(shù)據(jù)庫遇到這樣的問題怎么解決
Element type “SqlMap” must be declared
SqlMapConfig.xml中未首山宏配置sql映射文件
ibatis提交重復數(shù)據(jù)庫的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關于ibatis提交重復數(shù)據(jù)庫,IBATIS數(shù)據(jù)庫提交避免重復提交的方法,用ibatis連接數(shù)據(jù)庫遇到這樣的問題怎么解決的信息別忘了在本站進行查找喔。
成都創(chuàng)新互聯(lián)科技公司主營:網(wǎng)站設計、網(wǎng)站建設、小程序制作、成都軟件開發(fā)、網(wǎng)頁設計、微信開發(fā)、成都小程序開發(fā)、網(wǎng)站制作、網(wǎng)站開發(fā)等業(yè)務,是專業(yè)的成都做小程序公司、成都網(wǎng)站建設公司、成都做網(wǎng)站的公司。創(chuàng)新互聯(lián)公司集小程序制作創(chuàng)意,網(wǎng)站制作策劃,畫冊、網(wǎng)頁、VI設計,網(wǎng)站、軟件、微信、小程序開發(fā)于一體。
文章名稱:IBATIS數(shù)據(jù)庫提交避免重復提交的方法(ibatis提交重復數(shù)據(jù)庫)
網(wǎng)頁網(wǎng)址:http://www.5511xx.com/article/dhgdejh.html


咨詢
建站咨詢
