summaryrefslogtreecommitdiff
path: root/spring-framework/08-bank-jdbc-servlet-webapp
diff options
context:
space:
mode:
Diffstat (limited to 'spring-framework/08-bank-jdbc-servlet-webapp')
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/.gitignore9
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/misc/mysql-schema.sql4
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/misc/postgressql-schema.sql10
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/pom.xml43
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/Account.java21
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/AccountManager.java21
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/AccountManagerImpl.java73
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/dao/AccountDAO.java15
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/dao/jdbc/JDBCAccountDAO.java94
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/tx/TxAccountManager.java109
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/web/BankGateway.java59
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/WEB-INF/spring/applicationContext.xml39
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/WEB-INF/spring/jdbc.properties7
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/WEB-INF/web.xml29
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/deposit.jsp21
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/index.jsp14
-rw-r--r--spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/style/style.css4
17 files changed, 572 insertions, 0 deletions
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/.gitignore b/spring-framework/08-bank-jdbc-servlet-webapp/.gitignore
new file mode 100644
index 0000000..ec4e05e
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/.gitignore
@@ -0,0 +1,9 @@
+# Eclipse
+bin
+.settings
+.metadata
+.classpath
+.project
+
+# Maven
+target
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/misc/mysql-schema.sql b/spring-framework/08-bank-jdbc-servlet-webapp/misc/mysql-schema.sql
new file mode 100644
index 0000000..167aa55
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/misc/mysql-schema.sql
@@ -0,0 +1,4 @@
+CREATE TABLE account (
+ account_number int(11) primary key NOT NULL AUTO_INCREMENT,
+ balance float DEFAULT NULL
+) Engine=InnoDB;
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/misc/postgressql-schema.sql b/spring-framework/08-bank-jdbc-servlet-webapp/misc/postgressql-schema.sql
new file mode 100644
index 0000000..6ed17fa
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/misc/postgressql-schema.sql
@@ -0,0 +1,10 @@
+CREATE TABLE account (
+ account_number int(11) primary key NOT NULL,
+ balance float DEFAULT NULL
+);
+
+CREATE SEQUENCE account_account_number_seq;
+
+ALTER TABLE account
+ ALTER COLUMN account_number
+ SET DEFAULT NEXTVAL('account_account_number_seq'); \ No newline at end of file
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/pom.xml b/spring-framework/08-bank-jdbc-servlet-webapp/pom.xml
new file mode 100644
index 0000000..cbd9d29
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/pom.xml
@@ -0,0 +1,43 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>com.example.spring</groupId>
+ <artifactId>base-config-webapps</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../00-config-webapps</relativePath>
+ </parent>
+
+ <artifactId>bank-jdbc-servlet-webapp</artifactId>
+ <packaging>war</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-jdbc</artifactId>
+ <version>${springVersion}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-dbcp2</artifactId>
+ <version>${commonsDBCP2Version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mariadb.jdbc</groupId>
+ <artifactId>mariadb-java-client</artifactId>
+ <version>${mariadbClientVersion}</version>
+ </dependency>
+
+ </dependencies>
+
+</project>
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/Account.java b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/Account.java
new file mode 100644
index 0000000..6222af8
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/Account.java
@@ -0,0 +1,21 @@
+package com.example.spring.bank;
+
+import java.math.BigDecimal;
+
+public class Account {
+ private int accountNumber;
+ private BigDecimal balance;
+
+ public int getAccountNumber() {
+ return accountNumber;
+ }
+ public void setAccountNumber(int accountNumber) {
+ this.accountNumber = accountNumber;
+ }
+ public BigDecimal getBalance() {
+ return balance;
+ }
+ public void setBalance(BigDecimal balance) {
+ this.balance = balance;
+ }
+}
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/AccountManager.java b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/AccountManager.java
new file mode 100644
index 0000000..f299d60
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/AccountManager.java
@@ -0,0 +1,21 @@
+package com.example.spring.bank;
+
+import java.math.BigDecimal;
+
+public interface AccountManager {
+
+ public Account create();
+
+ public Account find(int accountNumber);
+
+ public Account deposit(int accountNumber, BigDecimal amount);
+ public Account withdraw(int accountNumber, BigDecimal amount);
+
+ public void delete(int accountNumber);
+
+ /** Returns the first account */
+ public Account transfer(int accountNumber1, int accountNumber2, BigDecimal amount);
+
+ public void chargeForLowBalance(BigDecimal minimumBalance, BigDecimal amount);
+
+}
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/AccountManagerImpl.java b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/AccountManagerImpl.java
new file mode 100644
index 0000000..39dc63e
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/AccountManagerImpl.java
@@ -0,0 +1,73 @@
+package com.example.spring.bank;
+
+import java.math.BigDecimal;
+import java.util.Iterator;
+import java.util.List;
+
+import com.example.spring.bank.dao.AccountDAO;
+
+public class AccountManagerImpl implements AccountManager {
+
+ private AccountDAO accountDAO;
+
+ public void setAccountDAO(AccountDAO accountDAO) {
+ this.accountDAO = accountDAO;
+ }
+
+ @Override
+ public void chargeForLowBalance(BigDecimal minimumBalance, BigDecimal amount) {
+ List<Account> accounts = accountDAO.findAccountsWithLowBalance(minimumBalance);
+ for (Iterator<Account> iterator = accounts.iterator(); iterator.hasNext();) {
+ Account account = (Account) iterator.next();
+ // Check if the balance will go beyond 0. If yes, set the balance to 0
+ account.setBalance(account.getBalance().subtract(amount));
+ accountDAO.update(account);
+ }
+ }
+
+ @Override
+ public Account create() {
+ return accountDAO.createAccount();
+ }
+
+ @Override
+ public Account find(int accountNumber) {
+ return accountDAO.getAccount(accountNumber);
+ }
+
+ @Override
+ public void delete(int accountNumber) {
+ accountDAO.delete(accountNumber);
+ }
+
+ @Override
+ public Account deposit(int accountNumber, BigDecimal amount) {
+ Account account = accountDAO.getAccount(accountNumber);
+ account.setBalance(account.getBalance().add(amount));
+ accountDAO.update(account);
+
+ return account;
+ }
+
+ @Override
+ public Account withdraw(int accountNumber, BigDecimal amount) {
+ Account account = accountDAO.getAccount(accountNumber);
+ account.setBalance(account.getBalance().subtract(amount));
+ accountDAO.update(account);
+
+ return account;
+ }
+
+ @Override
+ public Account transfer(int accountNumber1, int accountNumber2, BigDecimal amount) {
+ Account account1 = accountDAO.getAccount(accountNumber1);
+ account1.setBalance(account1.getBalance().subtract(amount));
+ accountDAO.update(account1);
+
+ Account account2 = accountDAO.getAccount(accountNumber2);
+ account2.setBalance(account2.getBalance().add(amount));
+ accountDAO.update(account2);
+
+ return account1;
+ }
+} \ No newline at end of file
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/dao/AccountDAO.java b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/dao/AccountDAO.java
new file mode 100644
index 0000000..735aed2
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/dao/AccountDAO.java
@@ -0,0 +1,15 @@
+package com.example.spring.bank.dao;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import com.example.spring.bank.Account;
+
+public interface AccountDAO {
+ public Account createAccount();
+ public Account getAccount(int accountNumber);
+ public void update(Account account);
+ public void delete(int accountNumber);
+ public List<Account> findAllAccounts();
+ public List<Account> findAccountsWithLowBalance(BigDecimal lessThanAmount);
+}
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/dao/jdbc/JDBCAccountDAO.java b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/dao/jdbc/JDBCAccountDAO.java
new file mode 100644
index 0000000..d285a89
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/dao/jdbc/JDBCAccountDAO.java
@@ -0,0 +1,94 @@
+package com.example.spring.bank.dao.jdbc;
+
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+import javax.sql.DataSource;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.PreparedStatementCreator;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.support.GeneratedKeyHolder;
+import org.springframework.jdbc.support.KeyHolder;
+
+import com.example.spring.bank.Account;
+import com.example.spring.bank.dao.AccountDAO;
+
+public class JDBCAccountDAO implements AccountDAO {
+
+ private JdbcTemplate jdbcTemplate;
+
+ public void setDataSource(DataSource dataSource) {
+ this.jdbcTemplate = new JdbcTemplate(dataSource);
+ }
+
+
+ @Override
+ public Account createAccount() {
+// Connection con = dataSource.getConnection();
+// PreparedStatement stmt = con.prepareStatement("...", autoGeneratedKeys);
+// stmt.execute();
+// con.close();
+
+
+ final String INSERT_SQL = "insert into account (balance) values(0)";
+
+ KeyHolder keyHolder = new GeneratedKeyHolder();
+ jdbcTemplate.update(
+ new PreparedStatementCreator() {
+ public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
+ PreparedStatement ps =
+ connection.prepareStatement(INSERT_SQL, new String[] {"account_number"});
+ // ps.setString(1, name);
+ return ps;
+ }
+ }, keyHolder);
+
+ Account account = new Account();
+ // keyHolder.getKey() now contains the generated key
+ account.setAccountNumber(keyHolder.getKey().intValue());
+ account.setBalance(new BigDecimal("0.0"));
+
+ return account;
+ }
+
+ @Override
+ public void delete(int accountNumber) {
+ jdbcTemplate.update("delete from account where account_number = ?", Integer.valueOf(accountNumber));
+ }
+
+ @Override
+ public List<Account> findAccountsWithLowBalance(BigDecimal lessThanAmount) {
+ return this.jdbcTemplate.query( "select * from account where balance < ?", new Object[] {lessThanAmount.doubleValue()}, new AccountMapper());
+ }
+
+ @Override
+ public List<Account> findAllAccounts() {
+ return this.jdbcTemplate.query( "select * from account", new AccountMapper());
+ }
+
+ @Override
+ public Account getAccount(int accountNumber) {
+ return this.jdbcTemplate.queryForObject( "select * from account where account_number = ?", new Object[] {accountNumber}, new AccountMapper());
+ }
+
+ @Override
+ public void update(Account account) {
+ this.jdbcTemplate.update("update account set balance = ? where account_number = ?", account.getBalance(), account.getAccountNumber());
+ }
+
+
+ private static final class AccountMapper implements RowMapper<Account> {
+
+ public Account mapRow(ResultSet rs, int rowNum) throws SQLException {
+ Account account = new Account();
+ account.setAccountNumber(rs.getInt("account_number"));
+ account.setBalance(rs.getBigDecimal("balance"));
+ return account;
+ }
+ }
+} \ No newline at end of file
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/tx/TxAccountManager.java b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/tx/TxAccountManager.java
new file mode 100644
index 0000000..a5b310d
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/tx/TxAccountManager.java
@@ -0,0 +1,109 @@
+package com.example.spring.bank.tx;
+
+import java.math.BigDecimal;
+
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.TransactionStatus;
+import org.springframework.transaction.support.TransactionCallback;
+import org.springframework.transaction.support.TransactionCallbackWithoutResult;
+import org.springframework.transaction.support.TransactionTemplate;
+
+import com.example.spring.bank.Account;
+import com.example.spring.bank.AccountManager;
+
+/**
+ * This class decorates a given AccountManager by adding transaction boundaries.
+ *
+ * @author kamal
+ *
+ */
+public class TxAccountManager implements AccountManager {
+
+ private AccountManager accountManager;
+
+ public void setAccountManager(AccountManager accountManager) {
+ this.accountManager = accountManager;
+ }
+
+ private TransactionTemplate txTemplate;
+
+ public void setTxManager(DataSourceTransactionManager txManager) {
+ txTemplate = new TransactionTemplate(txManager);
+ }
+
+ @Override
+ public Account create() {
+ return txTemplate.execute(new TransactionCallback<Account>() {
+ @Override
+ public Account doInTransaction(TransactionStatus arg0) {
+ return accountManager.create();
+ }
+ });
+ }
+
+ @Override
+ public Account find(int accountNumber) {
+ return accountManager.find(accountNumber);
+ }
+
+ @Override
+ public Account deposit(int accountNumber, BigDecimal amount) {
+ return txTemplate.execute(new TransactionCallback<Account>() {
+
+ @Override
+ public Account doInTransaction(TransactionStatus arg0) {
+ return accountManager.deposit(accountNumber, amount);
+ }
+ });
+ }
+
+ @Override
+ public Account withdraw(int accountNumber, BigDecimal amount) {
+ return txTemplate.execute(new TransactionCallback<Account>() {
+
+ @Override
+ public Account doInTransaction(TransactionStatus arg0) {
+ return accountManager.withdraw(accountNumber, amount);
+ }
+ });
+ }
+
+ @Override
+ public void delete(int accountNumber) {
+ txTemplate.execute(new TransactionCallbackWithoutResult() {
+
+ @Override
+ protected void doInTransactionWithoutResult(TransactionStatus arg0) {
+ accountManager.delete(accountNumber);
+ }
+ });
+ }
+
+ @Override
+ public void chargeForLowBalance(BigDecimal minimumBalance, BigDecimal amount) {
+ txTemplate.execute(new TransactionCallbackWithoutResult() {
+
+ @Override
+ protected void doInTransactionWithoutResult(TransactionStatus arg0) {
+ accountManager.chargeForLowBalance(minimumBalance, amount);
+ }
+ });
+ }
+
+ @Override
+ public Account transfer(int accountNumber1, int accountNumber2, BigDecimal amount) {
+ return txTemplate.execute(new TransactionCallback<Account>() {
+
+ @Override
+ public Account doInTransaction(TransactionStatus status) {
+ try {
+ return accountManager.transfer(accountNumber1, accountNumber2, amount);
+ } catch (Exception e) {
+ // Some exception occurred.
+ status.setRollbackOnly();
+ throw e;
+ }
+ }
+ });
+ }
+}
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/web/BankGateway.java b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/web/BankGateway.java
new file mode 100644
index 0000000..e7908d5
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/java/com/example/spring/bank/web/BankGateway.java
@@ -0,0 +1,59 @@
+package com.example.spring.bank.web;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.context.support.WebApplicationContextUtils;
+
+import com.example.spring.bank.AccountManager;
+
+/**
+ * Servlet implementation class BankGateway
+ */
+public class BankGateway extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * @see HttpServlet#HttpServlet()
+ */
+ public BankGateway() {
+ super();
+ }
+
+ /**
+ * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
+ */
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ getServletContext().getRequestDispatcher("/deposit.jsp").forward(request, response);
+ }
+
+ /**
+ * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
+ */
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
+ AccountManager am = ctx.getBean("accountManager", AccountManager.class);
+
+ int accountNumber = Integer.parseInt(request.getParameter("accountNumber"));
+ BigDecimal amount = new BigDecimal(request.getParameter("amount"));
+
+ // How to use a session scoped bean (Example only)
+// DepositForm form = (DepositForm) ctx.getBean("depositForm");
+// form.setAccountNumber(accountNumber);
+// form.setAmount(amount);
+ // End of example
+
+
+ am.deposit(accountNumber, amount);
+
+ // We can dispatch to a success page if we prefer!
+ getServletContext().getRequestDispatcher("/deposit.jsp").forward(request, response);
+ }
+
+}
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/WEB-INF/spring/applicationContext.xml b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/WEB-INF/spring/applicationContext.xml
new file mode 100644
index 0000000..138f5d2
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/WEB-INF/spring/applicationContext.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:jdbc="http://www.springframework.org/schema/jdbc"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/jdbc
+ http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context.xsd">
+
+ <context:property-placeholder location="/WEB-INF/spring/jdbc.properties"/>
+
+ <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" >
+ <property name="driverClassName" value="${jdbc.driverClassName}"/>
+ <property name="url" value="${jdbc.url}"/>
+ <property name="username" value="${jdbc.username}"/>
+ <property name="password" value="${jdbc.password}"/>
+ </bean>
+
+ <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
+ <property name="dataSource" ref="dataSource"/>
+ </bean>
+
+ <bean id="accountDAO" class="com.example.spring.bank.dao.jdbc.JDBCAccountDAO" >
+ <property name="dataSource" ref="dataSource"/>
+ </bean>
+
+ <bean id="accountManagerWithNoTransactionSupport" class="com.example.spring.bank.AccountManagerImpl">
+ <property name="accountDAO" ref="accountDAO"/>
+ </bean>
+
+ <bean id="accountManager" class="com.example.spring.bank.tx.TxAccountManager">
+ <property name="accountManager" ref="accountManagerWithNoTransactionSupport"/>
+ <property name="txManager" ref="txManager"/>
+ </bean>
+
+</beans> \ No newline at end of file
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/WEB-INF/spring/jdbc.properties b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/WEB-INF/spring/jdbc.properties
new file mode 100644
index 0000000..09ab3ec
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/WEB-INF/spring/jdbc.properties
@@ -0,0 +1,7 @@
+jdbc.driverClassName=com.mysql.cj.jdbc.Driver
+jdbc.url=jdbc:mysql://localhost/bankdb?useSSL=false
+jdbc.username=bankdbuser
+jdbc.password=abc123
+
+#jdbc.driverClassName=org.postgresql.Driver
+#jdbc.url=jdbc:postgresql://localhost/bank
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/WEB-INF/web.xml b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..0fa6cae
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
+ <display-name>BankBasicWeb</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>
+ <description></description>
+ <display-name>BankGateway</display-name>
+ <servlet-name>BankGateway</servlet-name>
+ <servlet-class>com.example.spring.bank.web.BankGateway</servlet-class>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>BankGateway</servlet-name>
+ <url-pattern>/BankGateway</url-pattern>
+ </servlet-mapping>
+ <listener>
+ <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+ </listener>
+ <context-param>
+ <param-name>contextConfigLocation</param-name>
+ <param-value>/WEB-INF/spring/*Context.xml</param-value>
+ </context-param>
+</web-app> \ No newline at end of file
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/deposit.jsp b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/deposit.jsp
new file mode 100644
index 0000000..ede3415
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/deposit.jsp
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8"%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Deposit Money</title>
+<link rel="stylesheet" type="text/css" href="style/style.css">
+</head>
+
+<body>
+
+ <form method="post" action="BankGateway">
+ Account No: <input type="text" name="accountNumber" />
+ Amount: <input type="text" name="amount" />
+ <input type="submit" name="submit" value="Deposit" />
+ </form>
+
+</body>
+</html> \ No newline at end of file
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/index.jsp b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/index.jsp
new file mode 100644
index 0000000..324aa4f
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/index.jsp
@@ -0,0 +1,14 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8"%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Deposit Money</title>
+</head>
+<body>
+
+<a href="deposit.jsp">Deposit</a>
+
+</body>
+</html> \ No newline at end of file
diff --git a/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/style/style.css b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/style/style.css
new file mode 100644
index 0000000..38e09ca
--- /dev/null
+++ b/spring-framework/08-bank-jdbc-servlet-webapp/src/main/webapp/style/style.css
@@ -0,0 +1,4 @@
+input {
+ display:block;
+ margin-bottom: 0.5em;
+} \ No newline at end of file