CREATE DATABASE test0611;
USE test0611;
CREATE TABLE member (
id VARCHAR(50) PRIMARY KEY,
pw VARCHAR(50) NOT NULL
);
SELECT * FROM member;
1. 전반적인 흐름 구조
1.1. 요청(HTML/JSP → 컨트롤러)
HTML/JSP에서 form이나 a태그를 통해 컨트롤러로 요청이 감.
예시:
<a href="create">Create</a> <form action="create" method="post"> <a href="update?id=아이디">수정</a> <a href="delete?id=아이디">삭제</a>URL 매핑은 @WebServlet("/xxx")이랑 맞춰야 함.
1.2. 컨트롤러 흐름
extends HttpServlet무조건 상속.doGet,doPost오버라이드.- 요청 데이터 받기:
req.getParameter("파라미터명") - 전처리(데이터 가공, DTO 객체 만들기)
- 리파지토리(DAO)에 데이터 넘기기
- 리파지토리에서 DB 작업 결과 받음
- setAttribute로 JSP에 데이터 넘기기 (
req.setAttribute("이름", 데이터)) - 뷰(JSP)로 포워딩 (
RequestDispatcher ds = req.getRequestDispatcher("xxx.jsp"); ds.forward(req, resp);) - 또는 바로 리다이렉트 (
resp.sendRedirect("xxx");)
2. 싱글턴 패턴 (리파지토리/DAO 반드시 나옴)
이거 놓치면 무조건 감점!
private static member_repository repository = new member_repository(); // 1. 객체 생성(프라이빗, 스태틱)
private member_repository() {} // 2. 생성자 private(외부생성 불가)
public static member_repository getInstance() { // 3. 유일한 객체 반환 메서드
return repository;
}
3. DTO (데이터를 묶어서 이동)
public class member {
private String id;
private String pw;
// getter/setter 필수
}
컨트롤러에서 받은 데이터 DTO로 묶어서 리파지토리에 넘긴다.
예시:
member mb = new member(); mb.setId(id); mb.setPw(pw);
4. DB 연결 코드 (이거 빠지면 DB 작업 못 함)
필수 객체
- Connection
DB 연결 객체. - PreparedStatement
SQL문 실행 객체. - ResultSet
select 쿼리 결과 받을 때.
- Connection
예시:
Connection conn = null; String url = "jdbc:mysql://localhost:3306/DB명"; String id = "root"; String pw = "1234"; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, id, pw); // 쿼리문 준비 String sql = "select * from member where id=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); // 결과 받을 때만 ResultSet rs = pstmt.executeQuery();
5. CRUD 핵심 구현(코드 채워넣기)
Create
- Controller에서 폼 데이터 받음 → DTO로 묶어서 → repository.save() 호출
- 리파지토리에서 DB연결 후 insert문 실행
- 실행 후 리다이렉트
Read (전체)
- Controller에서 repository.readall() 호출 → ArrayList
반환 - setAttribute로 JSP에 넘김
- JSP에서 for문 돌리며 출력
- Controller에서 repository.readall() 호출 → ArrayList
Read (하나)
- Controller에서 repository.readone(id) 호출 → member 반환
- setAttribute로 JSP에 넘김
Update
- GET: id값 받기 → readone(id) → setAttribute로 넘김 → 수정폼 JSP로 이동
- POST: id, pw 받기 → repository.update(id, pw) 호출
Delete
- Controller에서 id 파라미터 받음 → repository.delmember(id) 호출
6. JSP에서 setAttribute/getAttribute
setAttribute: 컨트롤러 → JSP로 데이터 넘길 때
getAttribute: JSP에서 데이터 받을 때
예시:// 컨트롤러에서 req.setAttribute("allmember", allmember); // JSP에서 ArrayList<member> allmember = (ArrayList<member>)request.getAttribute("allmember");
7. Servlet Mapping (@WebServlet) & URL 연동
@WebServlet("/create")- form의 action, a태그 href 등과 반드시 일치해야 함
(안 맞으면 컨트롤러가 안 불림)
8. 코드 실수 주의 (변수/함수명)
- 컨트롤러/리파지토리/DTO 등에서 변수명, 함수명 반드시 정확히 맞출 것 (id, pw 등)
- setter/getter 이름, html 폼 input name 등 맞추지 않으면 null 들어감
9. 실제 시험에서 '코드를 채워야 하는 곳' 예시
| 역할 | 코드/구문 예시 |
|---|---|
| 컨트롤러 상속 | public class create_controller extends HttpServlet |
| 요청 데이터 받기 | String id = req.getParameter("id"); |
| DTO 객체로 묶기 | member mb = new member(); mb.setId(id); ... |
| 싱글턴 DAO 호출 | member_repository repository = member_repository.getInstance(); |
| DB 연결 | conn = DriverManager.getConnection(...); |
| SQL 실행 | PreparedStatement pstmt = conn.prepareStatement(sql); |
| 결과 받아서 DTO | ResultSet rs = pstmt.executeQuery(); |
| set/getAttribute | req.setAttribute("이름", 데이터); |
| JSP에서 출력 | <%= mb.getId() %> |
정리 – 꼭 나오는 체크리스트
- 컨트롤러 상속/오버라이딩
- 싱글턴 패턴 리파지토리
- DTO로 데이터 전달
- Connection/PreparedStatement/ResultSet
- 파라미터 받기/전달
- setAttribute, getAttribute
- URL 매핑 정확히 맞추기
'JSP' 카테고리의 다른 글
| JSP 수업자료 : CRUD 등등 (0) | 2025.07.01 |
|---|---|
| JSP 게시판 페이징 처리 / while(rs.next()) / rs.absolute(index) (0) | 2025.06.09 |
| [게시판] pageNum의 역할 (0) | 2025.06.09 |
| update (0) | 2025.06.05 |
| Create 서블릿 만들기 (0) | 2025.06.05 |