0710 학습 내용 - 서블릿 & 객체 활용 종합정리
✅ HTTP 요청/응답 흐름 요약
- Servlet 클래스를 상속하여 HTTP 요청과 응답을 제어할 수 있다.
- 서비스 로직은
service() 메서드 안에서 처리한다.
@WebServlet("/hello")
public class BasicServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
String age = req.getParameter("age");
String grade = req.getParameter("grade");
int birthYear = LocalDate.now().getYear() - Integer.parseInt(age) + 1;
String message = grade.equals("F") ? "재수강 대상입니다." : "통과했습니다";
resp.setContentType("text/html");
resp.setCharacterEncoding("UTF-8");
PrintWriter w = resp.getWriter();
w.write("<h1>%s님은 %d년생입니다.</h1>".formatted(name, birthYear));
w.write("<h2>%s</h2>".formatted(message));
w.close();
}
}
✅ 객체 모델 설계
- 댄서 객체
Dancer
- 수준(enum)
DanceLevel
- 장르(enum)
Genre
- 저장소 클래스
DancerRepository
public class Dancer {
private String name;
private String crewName;
private DanceLevel danceLevel;
private List<Genre> genres;
}
✅ 댄서 등록 기능 흐름
/chap02/dancer/register (GET): 등록 폼 HTML 반환
/chap02/dancer/process (GET): 등록 데이터 받아서 객체 생성, 저장소에 추가
/chap02/dancer/show-list (GET): 저장된 댄서 리스트 HTML로 출력
✅ Repository 구조
public class DancerRepository {
private static List<Dancer> dancerList;
static {
dancerList = new ArrayList<>(List.of(
new Dancer("춘식이", "카카오프렌즈", DanceLevel.AMATEUR, List.of(Genre.HIPHOP, Genre.KPOP)),
...
));
}
public static List<Dancer> getDancerList();
public static void addDancer(Dancer d);
public static void removeDancer(int index);
}
✅ 등록 폼 예시
- form 내부 구성: 이름, 크루명, 레벨 (라디오), 장르 (체크박스)
- form 전송 시
/chap02/dancer/process로 GET 요청됨
<form action="/chap02/dancer/process" method="get">
<input type="text" name="name">
<input type="radio" name="danceLevel" value="PROFESSIONAL">
<input type="checkbox" name="genres" value="KPOP">
...
</form>
📌 요약
- 서블릿은 자바 웹 개발의 핵심 기술로 요청/응답 흐름을 처리한다.
- 객체 설계와 컬렉션 활용으로 상태를 유지하며, 여러 화면 간 기능을 연결한다.
- 레벨, 장르, 크루 등의 정보들을 enum과 List로 구성하여 관리한다.
- HTML과 자바를 유기적으로 결합하여 웹 애플리케이션의 기능을 구성한다.