1. 서블릿
(1) 서블릿(Servlet)이란?
- Web Server
- HTTP 프로토콜을 기반으로 하여 클라이언트의 요청을 서비스하는 기능을 담당
- 클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해 주는 자바 프로그램
- 웹을 다룰 수 있도록 해주는 "HttpServlet" 클래스를 상속받은 클래스
(2) 서블릿 작동원리
- 클라이언트가 url을 입력하면 HTTP request가 servlet Container로 전송
- 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성
- web.xml을 기반으로 사용자기 요청한 URL이 어느 서블릿에 대한 요청인지 찾음
- 해당 servlet에서 service메소드를 호출한 후 클라이언트의 GET, POST여부에 따라서 doGet() 또는 doPost()를 호출
- HttpServletResponse 객체에 응답
- 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸
(3) get 방식 vs post 방식
(1) GET방식
- 서블릿에 데이터를 전송할 떄 데이터가 URL 뒤에 name=value 형태로 전송
- 보안에 취약
- 전송 가능 데이터가 최대 255자
- 기본 전송 방식으로 사용이 쉬움
- 웹 브라우저에서 직접 입력하여 전송 가능
- 여러 개의 데이터를 전송할 때 '&'로 구분해서 전송
- doGet()
(2) POST방식
-서블릿에 데이터를 전송할 때 TCP/IP 프로토콜 데이터의 HEAD영역에 숨겨진 채 전송
- 보안에 유리하지만 확인은 가능
- 전송 데이터 용량 무제한
- 전송 시 서블릿에서 또 다시 가져오는 작업이 필요하므로 GET방식보다 처리 속도가 느림
- doPost()
2. Servlet Filter
(1) Servlet Filter
- 클라이언트 서버 사이에 위치, 요청과 응답이 오고가면서 filter를 거침
- 한글 필터가 있으면 내가 하나하나 셋팅 안해도 자동으로 한글 인코딩
- 서블릿 방식 -> 너무 노가다 -> 어노테이션 방식으로 기능을 많이 넣어줌
- 스프링 프레임워크는 내부에 다 숨겨줌
- 스프링 프레임워크 = jsp 과정에서 배우는 걸 내부에 다 숨겨주는 기능
💡 알아두기
intercept vs Servlet Filter
💡 한글 필터 : 따로 패키지에 만들어두고 매번 복붙해서 쓰기
package com.codingbox.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;
@WebFilter("/*") // 웹 전체에 필터 implements : 인터페이스 상속
public class CharacterEncodingFilter implements Filter{
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
arg0.setCharacterEncoding("UTF-8");
arg1.setCharacterEncoding("UTF-8");
arg1.setContentType("text/html; charset=UTF-8");
arg2.doFilter(arg0, arg1);
}
}
3. 서버 상태 코드
HTTP 상태 코드
- 1xx(정보) : 요청을 받았으며 프로세스를 계속한다.
- 2xx(성공) : 요청을 성공적으로 받았으며 인식했고 수용했다.
- 3xx(리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요하다.
- 4xx(클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.
- 5xx(서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패했다.
ex. 404 error 코드, 500 error 코드, 200 성공 코드
4. 상태유지의 필요성
- 사용자에게 넘어온 정보(로그인)를 유지하고 사용자가 어떤 페이지를 방문했는 지 추적하기 위해 다음과 같은 객체를 사용한다.
application, session , cookie