서블릿
서블릿에 대하여
- 서블릿은 JVM 기반에서 웹 개발을 하기위한 명세이자 API이다.
- 서블릿 객체는 자바 코드안에 HTML을 포함할 수 있다.
- 서블릿의 생명주기는 초기화, 서비스, 소멸으로 구성되어 있다.
서블릿 객체 사용하기
- 서블릿 생성과 초기화
- HttpServlet 객체를 상속받아 서블릿 객체를 구현한다.
- @WebServlet 어노테이션을 사용하여 서블랫 이름과 호출 URL을 지정한다.
- init() 메소드는 서블릿 객체가 생성될 시 단 한번만 호출된다.
@WebServlet(urlPatterns = {"/hello"}) public class HelloServlet extends HttpServlet { @Override public void init(ServletConfig servletConfig) {} }
- 서블릿의 get 요청 처리
- doGet() 메소드 사용
- doGet() 메소드는 HttpServletRequest와 HttpServletResponse 객체를 매개변수로 전달 받음
- HttpServlerResponse 객체의 PrintWriter 인스턴스 변수를 사용하여 HTML을 생성
@WebServlet(urlPatterns = {"/hello"}) public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) {} }
- 서블릿의 post 요청 처리
- doPost() 메소드 사용
- doPost() 메소드는 HttpServletRequest와 HttpServletResponse 객체를 매개변수로 전달 받음
- HttpServlerResponse 객체의 PrintWriter 인스턴스 변수를 사용하여 HTML을 생성
- req.getParameter() 메소드로 POST 요청 데이터를 읽어 들임
@WebServlet(urlPatterns = {"/hello"}) public class HelloServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) {} }
- 서블릿의 멀티파일 요청 처리
- doPost() 메소드 사용
- @MultipartConfig 어노테이션을 사용하여 파일의 저장위치, 파일의 최대 크기, 요청의 최대 크기, 임시 디렉토리에 저장될 파일의 크기(Default 0)을 지정
- HttpServletRequest을 통해 요청 스트림을 받고 이를 파일로 저장함
@WebServlet(urlPatterns = "/upload", name = "uploadServlet") @MultipartConfig( fileSizeThreshold = 1024 * 1024 * 2, // 2mb maxFileSize = 1024 * 1024 * 10, // 10mb maxRequestSize = 1024 * 1024 * 50, //50mb location = "/Users/hsj/Desktop/myPicture" //파일저장위치 ) public class UploadServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException { final Part filePart = req.getPart("file"); InputStream inputStream = filePart.getInputStream(); } }
서블릿 관련 객체
필터
- 클라이언트 요청에 대해 전/후 처리를 할 수 있다.
- 필터는 생명주기를 위한 init()과 destroy()메서드를 가지고 필터 기능 사용을 위한 doFilter() 메서드가있다.
@WebFilter("*.jsp") public class ServletFilter implements Filter { @Override public void init(FilterConfig filterConfig) { } @Override public void doFilter(ServletRequest servletRequest, ServletResponseservletResponse, FilterChain filterChain) throws IOException, ServletException { PrintWriter printWriter = servletResponse.getWriter(); printWriter.println("필터 동작 전"); filterChain.doFilter(servletRequest, servletResponse); printWriter.println("필터 동작 후"); } @Override public void destroy() { } }
쿠키
- 사이트를 방문했을때, 사용자의 로컬에 저장되는 데이터
- 쿠키의 구성 요소
- 이름 : 각각의 쿠키의 값을 식별하기 위한 키
- 값 : 특정 이름으로 쿠키에 지정된 값
- 유효 시간 : 쿠키 유지 시간
- 도메인 : 쿠키를 전송할 도메인
- 경로 : 쿠키를 전송할 요청 경로
- 쿠키의 생성
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException { Cookie cookie = new Cookie("nickname", "firewood"); resp.addCookie(cookie); }
세션
- 세션은 클라이언트와 웹 서버간의 네트워크 연결이 유지되고 있는 상태
- 서버는 클라이언트를 세션ID로 식별
- 세션 ID는 JSESSIONID라는 이름으로 쿠키에 저장되고, 클라이언트가 재접속할 때 해당 쿠키를 이용해 세션 ID값을 서버에 전달함
protected void doGet(HttpServletRequest req, HttpServletResponse resp) { HttpSession httpSession = req.getSession(); httpSession.getId(); httpSession.getCreationTime(); httpSession.getLastAccessedTime(); }
Java EE 패턴
- Java EE 패턴은 자바 기반의 앤터프라이즈 웹 애플리케이션 개발을 위한 패턴
- Java EE 패턴 목록
패턴이름 | 개요 |
---|---|
Intercepting Filter | 요청에 대한 전처리 및 후처리 |
Front Controller | 요청에 대한 처리를 관리하는 중앙 컨트롤러 |
View Helper | 뷰의 표현을 위해 비즈니스 로직을 가지고 있는 개념상의 Helper |
Composite View | 레고 블럭 같은 작은 뷰를 조합해서 만드는 전체의 뷰 |
Service to work | 뷰에 대한 처리 이전에 동작하는 기법 |
Dispatcher View | Service to work와 동일하며 차이점은 뷰에 대한 처리중에 수행 |
Sample code: GitHub
참고도서
제목: 스프링 부트로 배우는 자바 웹 개발
지은이: 윤석진
펴낸곳: 제이펍
참고 문서
임베디드 톰캣 사용하기