
| 구분 | 전송 위치 | 특징 | 보안/용도 |
|---|---|---|---|
| GET | URL 쿼리스트링(?a=1&b=2) / Header | 크기 제한·북마크 가능·캐시 | 노출됨(민감정보 X), 조회/검색 |
| POST | Body | 크기 제한 없음(시간 제한 有) | URL 노출 X(개발자도구로는 보임), 등록/수정 |
브라우저는 요청/응답을 바이트 스트림으로 주고받고, 서버(Tomcat)가 이를 파싱해 Servlet의
service()→doGet/doPost()를 호출.
<form method="get|post"> 의 method에 따라 컨테이너가 doGet() 또는 doPost()를 호출service() → 동적 바인딩으로 현재 클래스의 doGet/doPost 실행ServletException 적절히 처리doGet()doPost()@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// ★ 파라미터 꺼내기 전 설정!
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
// ...
}
HttpServletRequest 핵심 메서드| 메서드 | 설명 |
|---|---|
getParameter(name) | 단일 값 조회 |
getParameterValues(name) | 다중 값 배열로 조회(체크박스 등) |
getParameterNames() | 모든 파라미터 이름 열거 |
getParameterMap() | 모든 파라미터 맵 |
setAttribute(name, obj) | 요청 범위 공유 데이터 저장 |
getAttribute(name) | 요청 범위 데이터 조회 |
removeAttribute(name) | 요청 범위 데이터 삭제 |
setCharacterEncoding(cs) | 요청 본문 인코딩 지정(POST 한글 깨짐 방지) |
getRequestDispatcher(path).forward(req, res) | 내부 forward (아래 참고) |
Host, User-Agent, Accept, Accept-Encoding, Accept-Language, ConnectionReferer, Cache-Control, Upgrade-Insecure-RequestsSec-Fetch-*(site/mode/dest/user): 요청 출처/의도 식별에 도움HttpServletResponse 핵심 메서드| 메서드 | 설명 |
|---|---|
setContentType(mime) | text/html, application/json 등 |
setCharacterEncoding(cs) | 응답 인코딩 지정 |
getWriter() | 문자 스트림(HTML/JSON 문자열) |
getOutputStream() | 바이트 스트림(파일/이미지) |
sendRedirect(url) | 302로 재요청 유도(redirect) |
// 상태코드 + 메시지
response.sendError(500, "서버 내부 오류");
web.xml에 에러 페이지 매핑 가능:
<error-page>
<error-code>404</error-code>
<location>/error404</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error500</location>
</error-page>
response.setContentType("text/html; charset=UTF-8"); // ★ Writer 얻기 전!
PrintWriter out = response.getWriter();
out.println("<h1>Hello Servlet</h1>");
out.close();
| 구분 | forward | redirect |
|---|---|---|
| 방식 | 서버 내부에서 위임 | 클라이언트에 재요청 지시(302) |
| URL 변화 | ❌ (변경 안 됨) | ✅ (변경됨) |
| 데이터 전달 | request.setAttribute() 로 전달 가능 | 새 요청이므로 공유 안됨(세션/쿠키/쿼리 사용) |
| 새로고침 영향 | 재조회 | 재요청(중복 처리 방지에 유리) |
| 용도 | 조회/합성/서버 내부 전파 | 등록/수정/삭제 후 목록으로 이동 등 |
forward
request.setAttribute("userId", userId);
request.getRequestDispatcher("/print").forward(request, response);
redirect
response.sendRedirect("/list"); // 또는 외부 URL도 가능
등록/수정/삭제 후에는 PRG(Post/Redirect/Get) 패턴으로 새로고침 중복 방지!
setAttribute/getAttribute (요청 1회 동안)| API | 공통 메서드 |
|---|---|
ServletRequest / HttpSession / ServletContext | setAttribute(name,obj), getAttribute(name), removeAttribute(name) |
request.setCharacterEncoding("UTF-8") (파라미터 꺼내기 전)setContentType("...; charset=UTF-8") 후 getWriter()sendRedirect로 중복 방지GET은 가볍게, POST는 정확하게.
화면 전환은 forward(내부위임) vs redirect(재요청)를 용도에 맞게