728x90
Servlet
자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버 측 프로그램이다. 흔히 "서블릿"이라고 불린다.
자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.
서블릿 라이프 사이클(Servlet Life-Cycle)
Servlet class는 javaEE에서의 class와는 다르게 main method가 없다. 즉, 객체의 생성부터 사용(method call)의 주체가 사용자가 아닌 Servlet Container에게 있다.
Client가 요청(request)을 하게 되면 Servlet Container는 Servlet 객체를 생성(최초 한 번만)하고, 초기화(최초 한 번만)하며 요청에 대한 처리(요청 시마다 반복)를 하게 된다.
또한 Servlet 객체가 필요 없게 되면 제거하는 일까지 Container가 담당하게 된다.
서블릿의 주요 method
method | 설명 |
init() | 서블릿이 메모리에 로드 될 때 한번 호출 (코드 수정으로 인해 다시 로드 되면 다시 호출) - 최초 요청 시 한번만 실행 |
doGet() | GET방식으로 data전송 시 호출 - 요청 시 마다 반복 실행 |
doPost() | POST방식으로 data전송 시 호출 - 요청 시 마다 반복 실행 |
service() | 모든 요청은 service()를 통해서 doXXX()메소드로 이동 - 요청 시 마다 반복 실행 |
destroy() | 서블릿이 메모리에서 해체되면 호출 (코드가 수정되면 호출) - 최초 요청 시 한번만 실행 |
페이지 이동 방법 2가지와 특징
forward(request, response) | sendRedirect(location) | |
사용 방법 | RequestDispatcher dispatcher = request.getRequestDispatcher(path); dispatcher.forward(request, response); |
response.sendRedirect(location); |
이동 범위 | 동일 서버(project)내 경로 | 동일 서버 포함 타 URL 가능 |
location bar | 기존 URL 유지(실제 이동되는 주소 확인 불가) | 이동하는 page로 변경 |
객체 | 기존의 request와 response가 그대로 전달 | 기존의 request와 response는 소멸되고, 새로운 request와 response가 생성 |
속도 | 비교적 빠름 | forward()에 비해 느림 |
데이터 유지 | request의 setAttribute(name, value)를 통해 | request로는 data 저장 불가능. session이나 cookie를 이용 |
클라이언트 요청 방식
GET | POST | |
특징 | 전송되는 데이터가 URL뒤에 Query String으로 전달. 입력 값이 적은 경우나 데이터가 노출이 되도 문제가 없을 경우 사용 |
URL과 별도로 전송 HTTP header 뒤 body에 입력 스트림 데이터로 전달 |
입력 | 간단한 데이터를 빠르게 전송 form tag뿐만 아니라 직접 URL에 입력하여 전송 가능 |
데이터의 제한이 없다. 최소한의 보안 유지 효과를 볼 수 있다. |
단점 | 데이터 양에 제한이 있다. (location bar(URL + parameters)를 통해 전송할 수 있는 데이터의 사이즈는 2kb(2048byte)로 제한된다. |
전달 데이터의 양이 같을 경우 GET방식보다 느리다. (전송 패킷을 body에 데이터를 구성해야 하므로) |
728x90
'개발 > 기타' 카테고리의 다른 글
[TIL] EL, JSTL (Expression Language, JSP Standard Tag Library) (0) | 2022.04.05 |
---|---|
[TIL] JSP (Java Server Page) (0) | 2022.04.05 |
[TIL] MVC Pattern Model1, Model2 - (MVC 패턴 모델1, 모델2) (0) | 2022.03.28 |
[TIL] FrontEnd 관련 이것저것 3 (jQuery, Bootstrap) (0) | 2022.03.25 |
[TIL] FrontEnd 관련 이것저것 2 (JavaScript, WebStorage, AJAX 등등) (0) | 2022.03.24 |