web應用之轉賬實現
目錄
專案簡介
金錢對於我們每個人來說都很重要,存錢取錢不能說一點不會出錯,但是在一定程度上還是比較安全的,但是如何做到安全轉賬,下面就簡單介紹一下轉賬功能的實現
專案邏輯
該專案通過三層架構來完成轉賬:
1,在web層通過request請求獲取相關屬性值然後傳遞到service層,由於在service層不需要進行復雜的業務處理,進一步將資料傳遞到dao層
2,在dao層完成相應的邏輯處理,要分別對收賬人和轉賬人的存款金額進行處理,轉賬人的金額要有相應的金額減少而對應的收賬人的金額要有所增加
3,在完成轉賬金額的邏輯處理中要先開啟事務,接下來對相應的業務邏輯進行處理,如果轉賬過程中沒有出現錯誤,則通過commit方法完成轉賬操作並提示使用者轉賬成功,相應的資料庫中的值也要發生相應的改變,否則要進行事務的回滾處理並給出使用者轉賬失敗的資訊,同時要確保資料庫中的資料不發生改變
轉賬前資料庫效果展示
注意:完成此專案要匯入相應的jar包和相應的工具類否則會出現錯誤
轉賬前端頁面實現
效果展示
轉賬功能實現
web層
主要實現獲取引數和傳遞引數功能
package pdsu.edu.web;
import java.io.IOException;
import java.sql.SQLException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import pdsu.edu.service.ZhuanzhangService;
/**
* Servlet implementation class ZhuanzhangServlet
*/
public class ZhuanzhangServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-genunerated method stub
String name1 = request.getParameter("name1");
String name2 = request.getParameter("name2");
String moneystr = request.getParameter("money");
int money = Integer.parseInt(moneystr);
ZhuanzhangService zz=new ZhuanzhangService();
boolean is;
try {
is = zz.Out(name1,name2,money);
if(is) {
System.out.println("轉賬成功!");
}else {
System.out.println("轉賬失敗!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}}
service層
該部分主要完成事務的開啟操作以及對於不同情況對於傳遞引數的迴應資訊,並向dao層傳遞引數
package pdsu.edu.service;
import java.sql.SQLException;
import pdsu.edu.dao.ZhuanzhangDao;
public class ZhuanzhangService {
public boolean Out(String name1, String name2, int money) {
// TODO Auto-generated method stub
ZhuanzhangDao dd=new ZhuanzhangDao();
boolean transferSuccess=true;
try {
pdsu.edu.utils.MyDataSourceUtils.startTransaction();//開啟事務
dd.out(name1,money);
dd.in(name2,money);
} catch (SQLException e) {
// TODO Auto-generated catch block
transferSuccess=false;
try {
pdsu.edu.utils.MyDataSourceUtils.rollback();//事務回滾
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}finally {
try {
pdsu.edu.utils.MyDataSourceUtils.commit();//事務提交
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return transferSuccess;
}}
dao層
package pdsu.edu.dao;
import java.sql.Connection;
import java.sql.SQLException;import javax.management.Query;
import org.apache.commons.dbutils.QueryRunner;
import pdsu.edu.utils.DataSourceUtils;
import pdsu.edu.utils.MyDataSourceUtils;public class ZhuanzhangDao {
//轉賬放資料操作的實現
public void out(String name1, int money) {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner();
try {
Connection conn = MyDataSourceUtils.getCurrentConnection();
String sql = "update zhuanzhang set money=money-? where name=?";
qr.update(conn, sql, money,name1);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//收款方資料操作的實現
public void in(String name2, int money) {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner();
Connection conn;
try {
conn = MyDataSourceUtils.getCurrentConnection();
String sql = "update zhuanzhang set money=money+? where name=?";
qr.update(conn, sql, money,name2);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}