Java Reousrces > user ์ UserDAO ํด๋์ค ์์ฑํ๊ณ , JDBC ์ฐ๋์ ํด ์ค ๊ฒ์ด๋ค.
DAO(Data Access Object) ํด๋์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ์ํธ์์ฉ์ ๋ด๋นํ๋ ๊ฐ์ฒด. ์ฃผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ CRUD(Create, Read, Update, Delete) ์์ ์ ์บก์ํํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ง๋ณด์์ฑ์ ๋์ด๋ ๋ฐ ์ฌ์ฉ๋จ.
1. MySQL ์ ์ํ๊ธฐ
๋จผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ฃผ์ ๊ฐ์ฒด๋ค `Connection conn`, `PreparedStatement`, `ResultSet` ๋ฅผ ์ ์ธ ํด ์ฃผ์.
package user;
public class UserDAO {
// MySQL ์ ์ํ๊ธฐ
private Connection conn;
private PreparedStatement psmt;
private ResultSet rs;
}
์ ์ฝ๋ ์จ ์ฃผ๊ณ
`Ctrl + Shift + O` ํ๋ฉด ์๋ import ๋จ.
โก `Connection conn`
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๊ฒฐ์ ์ด๊ณ , ์ด ์ฐ๊ฒฐ์ ํตํด SQL ์ฟผ๋ฆฌ๋ฅผ ์คํ์ํฌ ์ ์๊ฒ ๋์์ฃผ๋ ๊ฐ์ฒด. ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ํต์ ์ฑ๋์ ์ ๊ณตํ๋ค.
`Connection conn`์ ์์ฑํ ๋๋ ์์ด๋, ๋น๋ฐ๋ฒํธ, ๊ฒฝ๋ก(๋ฐ์ดํฐ๋ฒ ์ด์ค URL)๋ฅผ ์ ๊ณตํด์ผ ํ๋ค.
`createStatement()` SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ํ Statement ๊ฐ์ฒด ์์ฑ.SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ํ Statement ๊ฐ์ฒด ์์ฑ.
`prepareStatement(String sql)` SQL ์ฟผ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์ปดํ์ผํ์ฌ ํจ์จ์ ์ผ๋ก ์คํํ ์ ์๋ PreparedStatement ์์ฑ.
โก `PreparedStatement psmt `
๋ฏธ๋ฆฌ ์ปดํ์ผ๋ SQL ์ฟผ๋ฆฌ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด์
๋๋ค. ๋์ ํ๋ผ๋ฏธํฐ๊ฐ ํฌํจ๋ SQL ๋ฌธ์ ์คํํ ๋ ์ฌ์ฉ๋๋ค.
Statement์ ๋ฌ๋ฆฌ ํ๋ผ๋ฏธํฐ ๋ฐ์ธ๋ฉ ๊ธฐ๋ฅ์ด ์์ด SQL Injection ๋ฐฉ์ง์ ํจ๊ณผ์ ์ด๊ณ , ์ฑ๋ฅ๋ ๋ ์ข๋ค.
?๋ก ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํ์ฌ ์ฟผ๋ฆฌ ์์ฑ.
๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ๋ฌ ๋ฒ ์คํํ ๊ฒฝ์ฐ ์ฑ๋ฅ์ด ํฅ์๋จ.
`setString(int parameterIndex, String value)` : SQL์ ?์ ๋ฌธ์์ด ๊ฐ ๋ฐ์ธ๋ฉ
`setInt(int parameterIndex, int value)` : ์ ์ ๊ฐ ๋ฐ์ธ๋ฉ
`executeQuery()` : SELECT ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ResultSet ๋ฐํ
`executeUpdate()` : INSERT, UPDATE, DELETE ์ฟผ๋ฆฌ ์คํ
โก `ResultSet rs`
SQL ์ฟผ๋ฆฌ(์ฃผ๋ก SELECT)์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ํ ๋จ์๋ก ์ํํ๋ฉฐ ์ฝ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ๋ฐํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅ.
๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋ฐฉํฅ(Forward-only)์ผ๋ก ํ์.
๋ฐ์ดํฐ๋ฅผ ํ ํ์ฉ ์ฝ์ผ๋ฉด์ ์ด ๊ฐ์ ์ ๊ทผ ๊ฐ๋ฅ.
`next()` : ๋ค์ ํ์ผ๋ก ์ด๋. ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด false ๋ฐํ
`getInt(String columnLabel)` : ์ด ๊ฐ์ ์ ์๋ก ๋ฐํ
`getString(String columnLabel)` : ์ด ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐํ
`close()` : ResultSet ์ข
๋ฃ
์ฌ๊ธฐ๊น์ง ํ์ผ๋ฉด ์ด์ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํ DAO ํด๋์ค์ ์์ฑ์๋ฅผ ๋ง๋ค์ด ์ค๋ค.
UserDAO๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด๋ก, ์์ฑ๋ ๋ ์๋์ผ๋ก MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๊ฒฐ์ ์ค์ ํ๋ค.
package user;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class UserDAO {
// MySQL ์ ์ํ๊ธฐ
private Connection conn;
private PreparedStatement psmt;
private ResultSet rs;
// ์์ฑ์ ๋ง๋ค๊ธฐ
public UserDAO() {
try {
String dbURL = "jdbc:mysql://localhost:3306/BBS";
String dbID = "root";
String dbPassword = "12341234";
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
} catch (Exception e) {
e.printStackTrace();
}
}
db URL, ๋ฃจํธ, ๋น๋ฐ๋ฒํธ๋ฅผ String ํ์ ์ ๋ณ์์ ๋ด์ ์ค๋ค.
โก `String dbURL = "jdbc:mysql://localhost:3306/BBS";`
- ๋ฐ์ดํฐ๋ฒ ์ด์ค URL์ ์ค์
`localhost` : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๊ฐ ํ์ฌ ๋ก์ปฌ ๋จธ์ ์์ ์คํ ์ค์์ ๋ํ๋
`3306` : MySQL์ ๊ธฐ๋ณธ ํฌํธ ๋ฒํธ
`BBS` : ์ฐ๊ฒฐํ๋ ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ
โก `String dbID = "root";`
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์ ์ด๋ฆ
์ฌ๊ธฐ์๋ MySQL์ ๊ธฐ๋ณธ ์ฌ์ฉ์ root๋ฅผ ์ฌ์ฉ
โก `String dbPassword = "12341234";`
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ก๊ทธ์ธํ๊ธฐ ์ํด ํ์
โก `Class.forName("com.mysql.cj.jdbc.Driver");`
- MySQL JDBC ๋๋ผ์ด๋ฒ ๋ก๋
`JDBC` ๋๋ผ์ด๋ฒ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Java ์ ํ๋ฆฌ์ผ์ด์
๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โก `conn = DriverManager.getConnection(dbURL, dbID, dbPassword);`
- `DriverManager`๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ
์ฐ๊ฒฐ์ด ์ฑ๊ณตํ๋ฉด Connection ๊ฐ์ฒด๊ฐ conn ๋ณ์์ ์ ์ฅ๋๋ค.
์ด ๊ฐ์ฒด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ (SQL ์คํ)์ ์ํํ ์ ์๋ค.
โก `catch (Exception e)`
๋๋ผ์ด๋ฒ ๋ก๋ ์คํจ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์คํจ, ๋๋ ๊ธฐํ ์ค๋ฅ ๋ฐ์ ์ ์์ธ๋ฅผ ์ก์ ์ฒ๋ฆฌ
e.printStackTrace()๋ก ์ค๋ฅ ๋ด์ฉ์ ์ฝ์์ ์ถ๋ ฅ
2. ๋ก๊ทธ์ธ ์ฒ๋ฆฌ ๋ก์ง ๋ง๋ค๊ธฐ
์์์๋ ์ดํด๋ฆฝ์ค๋ DB(MySQL)์ ์ฐ๊ฒฐํด ์ค ๊ฒ์ด๊ณ , ์ฌ๊ธฐ์๋ถํฐ๋ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํด์ ์ดํด๋ฆฝ์ค๋ก ๊ฐ์ง๊ณ ์ค๋ ๋ก์ง์ด๋ค. ๋ก๊ทธ์ธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ login() ๋ฉ์๋๋ `userID`์ `userPassword`๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์์ ์ผ์น ์ฌ๋ถ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ์ธํ์ฌ ๋ก๊ทธ์ธ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ intํ ๊ฐ์ผ๋ก ๋ฐํํ๋ค.
// ๋ก๊ทธ์ธ ์ฒ๋ฆฌ ๋ก์ง
public int login(String userID, String userPassword) {
// SQL ์ฟผ๋ฆฌ๋ฌธ ๋ด๊ธฐ
// ๋ญ๊ฐ ๋ค์ด์ฌ ์ง ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ?๋ก ์ฒ๋ฆฌํด ์ค๋ค
String SQL = "SELECT userPassword FROM USER WHERE userID = ?";
// ์์ธ ์ฒ๋ฆฌ ํ์
try {
psmt = conn.prepareStatement(SQL);
psmt.setString(1, userID);
rs = psmt.executeQuery();
if (rs.next()) {
if(rs.getString(1).equals(userPassword))
return 1; // ๋ก๊ทธ์ธ ์ฑ๊ณต
else
return 0; // ๋น๋ฐ๋ฒํธ ๋ถ์ผ์น
}
return -1; // ์์ด๋๊ฐ ์์
} catch (Exception e) {
e.printStackTrace();
}
return -2; // db ์ค๋ฅ
}
SQL๋ฌธ์ ์ค๋นํ ๋ค์ conn๊ฐ์ฒด์ prepareStatement์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํด์ psmt ๊ฐ์ฒด์ ๋ด์์ค๋ค. ์ฟผ๋ฆฌ๋ฌธ์์ ์ด๋ค ๊ฐ์ด ๋ค์ด์ฌ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฌผ์ํ ๊ธฐํธ `?`๋ฅผ ์จ ์ฃผ ์๋ค. ์ด ๋ถ๋ถ์ ๋ฐ์ธ๋ฉ ํด ์ค๋ค.
โก `psmt.setString(1, userID);`
SQL ๋ฌธ์ ์ฒซ ๋ฒ์งธ ๋ฐ์ธ๋ฉ ๋ณ์ (?)์ userID ๊ฐ์ ์ค์
โก `rs = psmt.executeQuery();`
์ค๋น๋ SQL ๋ฌธ์ ์คํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ResultSet ๊ฐ์ฒด rs์ ์ ์ฅ, ์ด ๊ฐ์ฒด๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ(row) ๋จ์๋ก ์ ๊ทผ
โก `if (rs.next())`
์ฒซ ๋ฒ์งธ ๊ฒฐ๊ณผ ํ์ด ์กด์ฌํ๋์ง ํ์ธ.
- ์กด์ฌํ๋ค๋ฉด: ํด๋น ID๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์
- ์กด์ฌํ์ง ์๋๋ค๋ฉด: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ID (return -1)
rs.next() ๋?
ResultSet ๊ฐ์ฒด์์ ๋ค์ ํ(row)์ด ์๋์ง ํ์ธํ๋ ๋ฉ์๋
๋ฐํ๊ฐ์ boolean ํ์
- true: ResultSet์ ๋ค์ ํ์ด ์กด์ฌํ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ์ปค์(cursor)๊ฐ ๋ค์ ํ์ผ๋ก ์ด๋.
- false: ๋ค์ ํ์ด ์์ผ๋ฉด false๋ฅผ ๋ฐํ
๋น๋ฐ๋ฒํธ ๊ฒ์ฆ
โก `rs.getString(1)` : ๊ฒฐ๊ณผ ํ์ ์ฒซ ๋ฒ์งธ ์ด(๋น๋ฐ๋ฒํธ) ๊ฐ์ ธ์ค๊ธฐ
`if (rs.getString(1).equals(userPassword))`
- ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ๋ฉด return 1 (๋ก๊ทธ์ธ ์ฑ๊ณต)
-๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด return 0 (๋น๋ฐ๋ฒํธ ๋ถ์ผ์น)
rs.next()๊ฐ ๊ฑฐ์ง์ผ ๊ฒฝ์ฐ, ID๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ์ํ๋ก ํ๋จ return -1 (์์ด๋ ์์)
`catch (Exception e)` : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์์ธ๋ฅผ ์ถ๋ ฅ
์์ธ ๋ฐ์ ์ -2๋ฅผ ๋ฐํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๋ฅ ๋ณด๊ณ return -2 (๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๋ฅ)
3. MySQL DJBC Driver ์ฐ๊ฒฐ
์ด์ MySQL ์์ JDBC Driver๋ฅผ ๋ค์ด๋ก๋ ํด์ ์ดํด๋ฆฝ์ค์ ์ถ๊ฐ ํด ์ค ์ฐจ๋ก!
์๋ mysql ๊ณตํ์์ Platform Independent๋ก ๋ค์ด ๋ฐ๊ณ ์์ถ ํ์ด ์ฃผ๊ธฐ
https://dev.mysql.com/downloads/connector/j/
์์ถ ํ๋ฉด `mysql-connector-j`๋ผ๋ jarํ์ผ์ด ์๊ธด๋ค.
์ด ํ์ผ์ ๋ณต์ฌํด์ BBS > src > webapp > WEB-INF > lib ์ ๋ถ์ฌ๋ฃ๊ธฐ
์ด๋ ๊ฒ jar ํ์ผ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ถ๊ฐ ๋ ๋ชจ์ต์ ํ์ธ ํ ์ ์๋ค.
์ถ๊ฐ๋ ๋๋ผ์ด๋ฒ๋ฅผ Build Path์๋ ์ถ๊ฐ ํด ์ฃผ์ด์ผ ํ๋ค.
BBS ์ฐํด๋ฆญ > Properties > Java Build Path > Libraries > ClassPath > Add JARs ์ `mysql-connector` jarํ์ผ ์ฐ๊ฒฐ > OK
์ฌ๊ธฐ๊น์ง JDBC ์ฐ๊ฒฐ์ด ์๋ฃ๋์๋ค.
4. `loginAction.jsp` ๋ง๋ค๊ธฐ
์ด์ ๋ก๊ทธ์ธ ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ `loginAction.jsp` ํ์ด์ง๋ฅผ ๋ง๋ค์ด ๋ณด์. ์ด JSP ํ์ด์ง๊น์ง ๋ง๋ค๊ณ ๋์ ์ค์ ๋ก ๋ก๊ทธ์ธ์ ํด ๋ณด๋ฉด์ Eclipse์ DB ์ฐ๊ฒฐ์ด ์ ๋์๋์ง ํ์ธ ํด ๋ณผ ๊ฒ์ด๋ค.
ํ์ฌ src ์ `index.html`, `login.jsp`๋ง ๋ง๋ค์ด์ ธ ์๋ ์ํ์ด๋ค. ์ ๋ฒ์ ๋ง๋ `login.jsp`์ ๋ค์ด๊ฐ๋ณด๋ฉด form ํ๊ทธ์ action ์์ฑ์ผ๋ก ์ด๋ฏธ loginAction์ ์ถ๊ฐ ํด ์ฃผ์๋ค.
`loginAction.jsp`์์ ์ด๋ฃจ์ด์ง๋ ์์
์ฌ์ฉ์ ์ ๋ ฅ ๊ฐ ๋ฐ๊ธฐ -> ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ฐ ํ์ธ -> ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ฒ๋ฆฌ
๋ก๊ทธ์ธ ํผ์์ ์ ๋ฌ๋ ์ฌ์ฉ์ ID์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฒญ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ค.
userID์ userPassword๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ์ธํ์ฌ ๋ก๊ทธ์ธ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ํ๋จํ๋ค.
๋ก๊ทธ์ธ ์ฑ๊ณต, ๋น๋ฐ๋ฒํธ ๋ถ์ผ์น, ๋๋ ์ฌ์ฉ์ ์ ๋ณด ์์๊ณผ ๊ฐ์ ์ํ์ ๋ฐ๋ผ ์ ์ ํ ์๋ต์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ค.
webapp ํด๋ ์ฐํด๋ฆญํด์ new > loginAction.jsp ํ์ผ ์์ฑํด ์ฃผ์.
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP ๊ฒ์ํ ์น์ฌ์ดํธ</title>
</head>
<body>
<script>
location.href = 'login.jsp';
</script>
</body>
</html>
login.jsp
<link rel="stylesheet" href="css/bootstrap.css">
<title>JSP ๊ฒ์ํ ์น ์ฌ์ดํธ</title>
</head>
<body>
<nav class="navbar navbar-expand-lg bg-body-tertiary">
<div class="container-fluid">
<a class="navbar-brand" href="#">JSP ์น์ฌ์ดํธ</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link active" aria-current="page" href="#">Home</a></li>
<li class="nav-item"><a class="nav-link" href="#">๊ฒ์ํ</a></li>
<li class="nav-item dropdown ms-auto">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
์ ์ํ๊ธฐ
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item active" href="login.jsp">๋ก๊ทธ์ธ</a></li>
<li><a class="dropdown-item" href="join.jsp">ํ์๊ฐ์
</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-4">
<div class="jumbotron" style="padding-top: 20px;">
<form method="post" action="loginAction.jsp">
<h3 style="text-align: center;">๋ก๊ทธ์ธํ๋ฉด</h3>
<div class="form-group">
<input type="text" class="form-control" placeholder="์์ด๋" name="userID" maxlength="20">
</div>
<div class="form-group">
<input type="password" class="form-control" placeholder="๋น๋ฐ๋ฒํธ" name="userPassword" maxlength="20">
</div>
<input type="submit" class="btn btn-primary form-control" value="๋ก๊ทธ์ธ">
</form>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
loginAction.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="user.UserDAO" %>
<%@ page import="java.io.PrintWriter" %>
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean id="user" class="user.User" scope="page" />
<jsp:setProperty name="user" property="userID" />
<jsp:setProperty name="user" property="userPassword" />
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP ๊ฒ์ํ ์น ์ฌ์ดํธ</title>
</head>
<body>
<%
UserDAO userDAO = new UserDAO();
int result = userDAO.login(user.getUserID(), user.getUserPassword());
if (result == 1) { // ๋ก๊ทธ์ธ ์ฑ๊ณต!
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("location.href = 'main.jsp'");
script.println("</script>");
}
else if (result == 0) { // ๋น๋ฐ๋ฒํธ๊ฐ ํ๋ฆด๋
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('๋น๋ฐ๋ฒํธ๊ฐ ํ๋ฆฝ๋๋ค.')");
script.println("history.back()");
script.println("</script>");
}
else if (result == -1) { // ์์ด๋๊ฐ ์กด์ฌํ์ง ์์ ๋
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('์กด์ฌํ์ง ์๋ ์์ด๋์
๋๋ค.')");
script.println("</script>");
}
else if (result == -2) { // db์ค๋ฅ
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.')");
script.println("</script>");
}
%>
</body>
</html>
์ฐธ๊ณ ๋ก ์ ์ฝ๋๋ธ๋ญ ๋ค์ฌ์ฐ๊ธฐ ์๋ง๋๊ฑด ํฐ์คํ ๋ฆฌ ๋ฌธ์ ์ ๋๋ค.
`<%@ %>` : ํ์ด์ง ์ง์์ (Page Directive)
- JSP ํ์ด์ง์ ์ค์ ์ ์ ์
- ํ์ด์ง๊ฐ ์คํ๋ ๋ ์ํฅ์ ๋ฏธ์น๋ ์ ๋ณด๋ค์ ๋งํจ.
- ํ์ด์ง ์ธ์ฝ๋ฉ, ์ฌ์ฉํ๋ ํด๋์ค, ์ฝํ ์ธ ํ์ ๋ฑ์ ์ค์
`<% %>` : ์คํฌ๋ฆฝํธ๋ฆฟ (Scriptlet)
- Java ์ฝ๋๋ฅผ JSP ํ์ผ์ ์ง์ ์ฝ์
- ์ฝ๋๋ ์๋ฒ์์ ์คํ, ํด๋ผ์ด์ธํธ์๊ฒ HTML ํํ๋ก ๋ฐํ๋จ.
`<jsp: />` : ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๊ทธ (JSP Tag)
- ํ๊ทธ๋ฆฝ
- ๋ณดํต JSP์์ ์ ๊ณตํ๋ ๋ด์ฅ ํ๊ทธ (๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ ์ฌ์ฉ์ ์ ์ ํ๊ทธ๋ฅผ ์ฌ์ฉํ ๋ ์.
- Java ์ฝ๋๋ฅผ ๋ช ์์ ์ผ๋ก ์ฝ์ ํ๋ ๋์ , ๊ฐ๊ฒฐํ๊ณ ์ฝ๊ฒ ๊ธฐ๋ฅ์ ๊ตฌํ
- ์ฌ๊ธฐ์๋ JSP ๋ด์ฅ ํ๊ทธ์ธ `<jsp:useBean>`๊ณผ `<jsp:setProperty>`๋ผ๋ ๊ฑธ ์จ์ user๋ผ๋ Java Bean ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์์ฑ ๊ฐ์ ์ค์ ํด ์ฃผ์๋ค.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- JSP ํ์ด์ง์ ์ค์ :
- 'language="java"': JSP ํ์ด์ง์์ ์ฌ์ฉํ ์ธ์ด๋ Java
- 'contentType="text/html; charset=UTF-8"': ํ์ด์ง์ ์ปจํ
์ธ ์ ํ์ HTML, ๋ฌธ์ ์ธ์ฝ๋ฉ์ UTF-8
- 'pageEncoding="UTF-8"': JSP ํ์ผ ์์ค ์ฝ๋ ์ธ์ฝ๋ฉ์ UTF-8๋ก ์ค์ -->
<%@ page import="user.UserDAO" %>
<!-- 'user.UserDAO' ํด๋์ค๋ฅผ JSP ํ์ด์ง์์ ์ฌ์ฉํ ์ ์๋๋ก import -->
<%@ page import="java.io.PrintWriter" %>
<!-- 'java.io.PrintWriter' ํด๋์ค๋ฅผ importํ์ฌ HTML ์ถ๋ ฅ์ ํ ๋ ์ฌ์ฉ -->
<% request.setCharacterEncoding("UTF-8"); %>
<!-- ์์ฒญ(request)์ ๋ฌธ์ ์ธ์ฝ๋ฉ์ UTF-8๋ก ์ค์ ,
์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ฐ์ดํฐ๊ฐ UTF-8๋ก ์ฒ๋ฆฌ๋๋๋ก ํ๋ ๊ฒ -->
<jsp:useBean id="user" class="user.User" scope="page" />
<!-- 'user'๋ผ๋ ์ด๋ฆ์ Java Bean ๊ฐ์ฒด๋ฅผ ์์ฑํด์ JSP ํ์ด์ง์์ ์ฌ์ฉํ ์ ์๋๋ก ํจ.
- 'class="user.User"': 'user.User' ํด๋์ค ํ์
์ผ๋ก ๊ฐ์ฒด ์์ฑ
- 'scope="page"': ํด๋น ํ์ด์ง ๋ด์์๋ง ๊ฐ์ฒด ์ฌ์ฉ ๊ฐ๋ฅ -->
<jsp:setProperty name="user" property="userID" />
<!-- 'user' Java Bean ๊ฐ์ฒด์ 'userID' ์์ฑ์, ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ๋ฌ๋ 'userID' ๊ฐ์ ์ค์ -->
<jsp:setProperty name="user" property="userPassword" />
<!-- 'user' Java Bean ๊ฐ์ฒด์ 'userPassword' ์์ฑ์, ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ๋ฌ๋ 'userPassword' ๊ฐ์ ์ค์ -->
<%
UserDAO userDAO = new UserDAO();
int result = userDAO.login(user.getUserID(), user.getUserPassword());
if (result == 1) { // ๋ก๊ทธ์ธ ์ฑ๊ณต!
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("location.href = 'main.jsp'");
script.println("</script>");
}
else if (result == 0) { // ๋น๋ฐ๋ฒํธ๊ฐ ํ๋ฆด๋
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('๋น๋ฐ๋ฒํธ๊ฐ ํ๋ฆฝ๋๋ค.')");
script.println("</script>");
}
else if (result == -1) { // ์์ด๋๊ฐ ์กด์ฌํ์ง ์์ ๋
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('์กด์ฌํ์ง ์๋ ์์ด๋์
๋๋ค.')");
script.println("</script>");
}
else if (result == -2) { // db์ค๋ฅ
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.')");
script.println("</script>");
}
%>
1. userDAO ๊ฐ์ฒด ์์ฑ
2. userDAO์ login ๋ฉ์๋์ getter๋ฉ์๋๋ก ๊ฐ์ ธ์จ userID๋ userPassword๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฃ์ด์ ๋ก์ง ์ํ
3. ๊ฒฐ๊ณผ๊ฐ์ 1(๋ก๊ทธ์ธ ์ฑ๊ณต), 0(๋ก๊ทธ์ธ ์คํจ - ๋น๋ฐ๋ฒํธ ๋ถ์ผ์น), -1(์์ด๋์์), -2(DB ์ฐ๊ฒฐ ์ค๋ฅ)
์ฌ๊ธฐ๊น์ง ํ์ผ๋ฉด ๋ค ํ๋ค. ์ด์ ๊ฐ์ด ์ ๋์ด๊ฐ๋์ง ํ ์คํธ ํด ๋ณผ ์ฐจ๋ก
ํ๋ก์ ํธ๋ช BBS > ์ฐํด๋ฆญ > Run As > Run on Server
์์ด๋๋ ๋น๋ฒ ์๋ฌด๊ฑฐ๋ ์ ๋ ฅํ๊ธฐ
์กด์ฌํ์ง ์๋ ์์ด๋๋ก ๋์ค๋ฉด ์ฑ๊ณต!
๋ง์ฝ DB ์ค๋ฅ๋ผ๋ ์๋์ฐฝ์ด ๋จ๋ฉด ์คํจํ๊ฒ
(JDBC ์ฐ๊ฒฐ์ด ์ ๋๋ก ์๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Driver ์ฐ๊ฒฐ์ด๋ DB url, ์ ์ id, ๋น๋ฐ๋ฒํธ ๋ง๋์ง ์คํ๋ ์๋์ง ํ์ธํด ์ฃผ์)
์ด๋ฒ์๋ DB์ ํ์ ๋ฑ๋ก์ด ๋์ด์๋ gildong ์์ด๋์ ์ผ๋ถ๋ฌ ๋น๋ฐ๋ฒํธ๋ง ํ๋ฆฌ๊ฒ ์ ๋ ฅ
๋น๋ฐ๋ฒํธ๊ฐ ํ๋ฆฌ๋ค๊ณ ๋์ค๋ฉด DB ์ ์ฐ๊ฒฐ๋ ๊ฒ.
๋ง์ง๋ง์ผ๋ก DB์ ๋ฑ๋ก๋ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅ ํด ์ฃผ์์ ๋ 404 ์๋ฌ๊ฐ ๋จ๋ฉด ๋์ฑ๊ณต์ด๋ค.
์์ง ๋ก๊ทธ์ธ ์ฑ๊ณต ํ๋ฉด ์ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ 404 ์๋ฌ ๊ฐ ๋จ๋ ๊ฒ์ด๋ค.
TMI
์ด๊ฑฐ ๋ง๋๋ ๊ฑด ํ์๊ฐ์ด๋ฉด ํ๋๋ฐ ๋ธ๋ก๊ทธ์ ๊ธ ์ฐ๋๊ฒ ๋๋ฌด ์ค๋๊ฑธ๋ฆผ;;;;
๋ก๊ทธ์ธ ๋ฉ์๋๋ง๋ค๊ณ JDBC์ฐ๊ฒฐํ๋ ๋์ค์
๊ณ์๋ น ์ ํฌ๋๋ค๋ ๋ด์ค๋ฅผ ๋ดค๋๋ฐ
๊ฒ์๊ธ ๋ค ์ฐ๊ณ ๋๋๊น ๋น์๊ณ์ ํด์ ์๊ตฌ์์ด ๊ฐ๊ฒฐ๋ฌ๋ค๊ตฌ ํจ....
ํฌ์คํ ์์ ์ด ์๊ฐ๋ณด๋ค ๋ ธ๊ฐ๋ค์ด๋ค. 3์๊ฐ์ด ๊ฑธ๋ฆฌ๋ค
์์ฆ ๋ธ๋ก๊ทธ ์ปค์คํ ์ ํฌ์คํ ๊น์ง ํ๋ฆฌ์ ๋์ด ๋๋ ์ํธ๋ค.