
service() 메서드를 호출한다.service() 메서드는 요청 방식에 따라 doGet() 또는 doPost()를 호출해 실제 로직을 수행한다.HttpServletRequest / HttpServletResponse 이다.HttpServletRequest는 ServletRequest를 상속한 구현체이므로, 실제 사용 시에는 보통 HttpServletRequest로 캐스팅하여 사용한다.? 뒤에 데이터를 붙여 보내는 방식(쿼리스트링).http://localhost:8080/sendMessage?message=abc&code=20<form method="GET/POST"> 설정에 따라 요청 방식이 결정된다.service(request, response) 메서드 호출doGet() 또는 doPost()가 동적 바인딩되어 호출service, doGet, doPost는 모두 ServletException(및 IOException)을 처리해야 한다.doGet() 메서드% 형식(URLEncoder)으로 변환해서 전송.doPost() 메서드request.getCharacterEncoding() 호출 시 기본값은 null.request.setCharacterEncoding("UTF-8");
ServletRequest → HttpServletRequest| 메서드 | 내용 |
|---|---|
getParameter(String) | 단일 파라미터 값 String으로 가져오기 |
getParameterNames() | 모든 파라미터 이름 열거 |
getParameterValues(String) | 동일 이름으로 여러 값이 넘어올 때 배열로 받기 |
getParameterMap() | 전체 파라미터를 Map<String, String[]> 형태로 받기 |
setAttribute(String, Object) | request 범위에 데이터 저장 (forward 시 공유) |
getAttribute(String) | 저장된 속성 값 조회 |
removeAttribute(String) | request 범위 데이터 삭제 |
setCharacterEncoding(String) | 요청 Body 문자 인코딩 설정(POST 한글 처리 필수) |
getRequestDispatcher(String) | forward 대상 컴포넌트(jsp, servlet 등) 지정 |
주요 메서드:
| 메서드 | 내용 |
|---|---|
setContentType(String) | 응답 MIME 타입 지정 ("text/html", "application/json" 등) |
setCharacterEncoding(String) | 응답 데이터 인코딩 지정 |
getWriter() | 문자 기반 출력 스트림(PrintWriter) 반환 |
getOutputStream() | 바이트 기반 출력 스트림 반환(파일, 이미지 등) |
sendRedirect(String) | 지정한 URL로 리다이렉트 응답(302) |
response.sendError(500, "서버 내부 오류입니다.");
web.xml에 <error-page>를 등록하면, 특정 상태 코드 발생 시 사용자 정의 에러 페이지로 보내도록 설정 가능:<error-page>
<error-code>404</error-code>
<location>/showErrorPage</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/showErrorPage</location>
</error-page>
응답 MIME 타입 설정
response.setContentType("text/html");
응답 인코딩 설정
response.setCharacterEncoding("UTF-8");
// 또는
response.setContentType("text/html; charset=UTF-8");
주의: 반드시 getWriter() 호출 전에 설정해야 한다.
출력 스트림으로 내용 쓰기
PrintWriter out = response.getWriter();
out.print(responseBuilder.toString());
스트림 닫기
out.close();
request, response 객체를 그대로 전달한다.request.setAttribute()로 담아둔 데이터가 그대로 전달된다.request.setAttribute("userId", userId);
RequestDispatcher rd = request.getRequestDispatcher("print");
rd.forward(request, response);
response.sendRedirect("http://www.naver.com");
// 또는
response.sendRedirect("redirect"); // 다른 서블릿 url-pattern
sendRedirect()를 호출| 비교 항목 | forward | redirect |
|---|---|---|
| 요청 횟수 | 1회 | 2회 (서버→브라우저→다시 서버) |
| 주소창 URL | 변경되지 않음 | 변경됨 |
| request 데이터 | 유지됨 | 초기화됨(새 요청) |
| 사용 위치 | 서버 내부 | 클라이언트까지 왕복 |
| 주 사용 용도 | 조회, 내부 화면 이동 | 생성/수정/삭제 후 이동, 새 요청 강제 |
실전에서 자주 쓰는 패턴:
마지막으로, 빠른 복습용으로 키워드만 모아 둔 섹션.
request.setCharacterEncoding("UTF-8"); 후 파라미터 읽기service() → doGet() / doPost()ServletException, IOException 처리 필수getParameter, getParameterValues, getParameterMapsetAttribute, getAttributesetCharacterEncoding("UTF-8")getRequestDispatcher().forward(...)setContentType("text/html; charset=UTF-8")getWriter() 사용getWriter()getOutputStream()sendRedirect("url")