** πλ°μ΄ν° μ μ₯ νλ¦ κ΅¬ν (JSP β Servlet β DAO β DB)**
μ¬μ©μ μ
λ ₯ λ°μ΄ν°λ₯Ό JSPμμ λ°μ DBμ μ μ₯νλ μ 체 μ€λ¬΄ νλ¦
ꡬ쑰λ + λ¨κ³λ³ μν + μ 체 μ½λ + λ©΄μ λλΉκΉμ§ μμ μ 리
π§© λͺ©μ°¨
- μ 체 νλ¦ κ°μ
- λ¨κ³λ³ μν (JSP β Servlet β DTO β DAO β DB)
- μ 체 νλ¦ μμ μ½λ
- μ€μ μ€ν νλ¦ μμ
- μμ£Ό λ°μνλ μ€λ₯ & ν΄κ²°λ²
- κΈ°μ λ©΄μ λλΉ ν΅μ¬ μμ½
- λ§λ¬΄λ¦¬ μμ½ + Notion μμ± ν
β
1. μ 체 νλ¦ κ°μ
[1] form.jsp
β¬ μ¬μ©μ μ
λ ₯
[2] SaveServlet.java
β¬ νλΌλ―Έν° β DTO μ μ₯
[3] BoardDTO.java
β¬ λ°μ΄ν° μΊ‘μν
[4] BoardDAO.java
β¬ insert()λ‘ DB μ μ₯
[5] MariaDB
β¬ λ°μ΄ν° μ μ₯ μλ£
[6] κ²°κ³Ό νλ©΄ (리λλ νΈ or λ©μμ§ μΆλ ₯)
β
2. λ¨κ³λ³ μν μ 리
λ¨κ³ |
νμΌ |
μν |
1 |
form.jsp |
μ¬μ©μλ‘λΆν° μ
λ ₯ λ°κΈ° (View) |
2 |
SaveServlet.java |
μ
λ ₯κ° μ²λ¦¬ + DTO μ λ¬ (Controller) |
3 |
BoardDTO.java |
μ
λ ₯ λ°μ΄ν°λ₯Ό λ΄λ ν΄λμ€ (Model) |
4 |
BoardDAO.java |
DB μ μ₯ λ©μλ ꡬν (Model) |
5 |
MariaDB |
μ€μ λ°μ΄ν° μ μ₯μ (DB) |
β
3. μ 체 νλ¦ μμ μ½λ π―
<form action="save" method="post">
μ λͺ©: <input type="text" name="title"><br>
λ΄μ©: <textarea name="content"></textarea><br>
<input type="submit" value="μ μ₯">
</form>
π [2] SaveServlet.java (μ
λ ₯ μ²λ¦¬ + DAO νΈμΆ)
@WebServlet("/save")
public class SaveServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
// 1. μ¬μ©μ μ
λ ₯κ° λ°κΈ°
String title = req.getParameter("title");
String content = req.getParameter("content");
// 2. DTOμ μ μ₯
BoardDTO dto = new BoardDTO();
dto.setTitle(title);
dto.setContent(content);
// 3. DAOμ μ λ¬νμ¬ DB μ μ₯
BoardDAO dao = new BoardDAO();
dao.insert(dto);
// 4. μ μ₯ ν λͺ©λ‘ νμ΄μ§λ‘ μ΄λ
resp.sendRedirect("list.jsp");
}
}
π [3] BoardDTO.java (λ°μ΄ν° κ°μ²΄)
public class BoardDTO {
private String title;
private String content;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
π [4] BoardDAO.java (DB μ μ₯ μ²λ¦¬)
public class BoardDAO {
public void insert(BoardDTO dto) {
try {
Connection conn = DB.getConnection();
String sql = "INSERT INTO board(title, content) VALUES (?, ?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, dto.getTitle());
ps.setString(2, dto.getContent());
ps.executeUpdate();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
π [5] DB.java (DB μ°κ²° μ μ© ν΄λμ€)
public class DB {
public static Connection getConnection() throws Exception {
Class.forName("org.mariadb.jdbc.Driver");
return DriverManager.getConnection(
"jdbc:mariadb://localhost:3306/mydb", "myuser", "mypassword"
);
}
}
β
4. μ€ν νλ¦ μμ μμ½
1. μ¬μ©μκ° form.jspμμ μ λͺ©/λ΄μ© μ
λ ₯ β μ μ‘
2. SaveServletμμ νλΌλ―Έν°λ‘ λ°μ DTOμ μ μ₯
3. DAOμ insert(dto) νΈμΆ β SQL μ€ν
4. DBμ κ²μκΈ μ μ₯
5. μ¬μ©μλ list.jsp λλ μλ£ νμ΄μ§λ‘ μ΄λ
β
5. μμ£Ό λ°μνλ μ€λ₯ & ν΄κ²°λ² π‘οΈ
μλ¬ λ©μμ§ |
μμΈ |
ν΄κ²° λ°©λ² |
NullPointerException |
request κ°μ΄ null |
name μμ± λλ½ or μ€ν νμΈ |
SQLException |
DB μ°κ²°/SQL μ€λ₯ |
DB URL, κ³μ , SQL ꡬ문 νμΈ |
404 Not Found |
URL λ§€ν μ€λ₯ |
@WebServlet("/save") μ form action μΌμΉ νμΈ |
νκΈ κΉ¨μ§ |
μΈμ½λ© μ€μ λλ½ |
request.setCharacterEncoding("UTF-8") νμ! |
β
6. κΈ°μ λ©΄μ λλΉ ν΅μ¬ μμ½ π¬
μ§λ¬Έ |
μμ μ 리 |
JSP β DB μ μ₯ νλ¦μ? |
JSP(form) β Servlet β DTO β DAO β DB |
DTOμ μν μ? |
μ
λ ₯κ°μ κ°μ²΄λ‘ μ μ₯ (λ°μ΄ν° μΊ‘μν) |
DAOμ μν μ? |
DB μ°κ²° ν SQL μ€ν (insert, select λ±) |
MVCμμ Servletμ μ΄λ€ μν ? |
Controller (μμ² μ²λ¦¬, νλ¦ μ μ΄) |
SQL Injection λ°©μ§λ? |
PreparedStatement μ¬μ© (λ¬Όμν λ°μΈλ©) |
β
7. λ§λ¬΄λ¦¬ μμ½ π§
- π€ μ¬μ©μμ μ
λ ₯κ°μ
form β Servlet β DTO
λ‘ μ λ¬λ¨
- π¦
DTO
λ λ°μ΄ν°λ₯Ό λ΄κ³ , DAO
λ DB μ²λ¦¬ λ΄λΉ
- π§ λͺ¨λ νλ¦μ μν λΆλ¦¬(MVC ꡬ쑰) λ‘ μ€κ³λμ΄μΌ μ μ§λ³΄μμ νμ₯μ΄ μ¬μ
- β
ν λ² μ μ₯ νλ¦μ μ΅νλ©΄, μμ /μμ λ μ μ¬ κ΅¬μ‘°λ‘ νμ₯ κ°λ₯!