서블릿과 JSP
1. 서블릿(Servlet)
-
자바 서버 어플리케이션에는 다양한 프로그램들이 있다. 이를 Server Application이라 한다. 서블릿(Server Application Let)의 ‘Let’은 조각이라는 뜻인데 이 말을 종합해 풀이하면 서블릿은 ‘모여있는 프로그램 중 하나’ 즉, ‘하나의 자바프로그램’이라고 정의할 수 있다.
1.2 서블릿의 생명주기
1.요청이 오면 Servlet Context에서 서블릿 인스턴스(Singleton 인스턴스)가 존재하는지 확인한다.
2.서블릿 인스턴스가 존재하면 service 메서드를 호출하고 응답한다.
3.서블릿 인스턴스가 존재하지 않으면 서블릿 클래스를 로딩한 후 인스턴스를 호출한다. -> init메서드를 호출한다. ->service 메서드를 호하여 응답한다.
4.프로그램이 변경되거나 웹 어플리케이션이 종료되면 destory 메서드를 호출한다.
이 모든 과정을 Servlet Container가 자동으로 메서드 실행.
- 생명주기를 코드로 표현
2.JSP(Java Server Page)
2.1 JSP란?
:HTML에 자바코드를 작성하는 것. <%~%>안에 자바코드를 작성
- <% ~ %>: 메서드 영역. 지역변수가 들어간다.
- <%! ~ !%>: 클래스영역. 클래스변수(cv)와 인스턴스변수(iv)가 들어간다.
2.1 JSP 호출과정
1.jsp요청이 들어오면 JspServlet이 무조건 받은 후 서블릿 인스턴스가 존재하는 확인한다.
2.서블릿이 인스턴스가 존재하지 않거나 변경된 jsp파일은 변환->컴파일->인스턴스의 과정을 거쳐 서블릿 인스턴스를 생성 후 응답한다. 변환, 컴파일, 인스턴스 생성하는 과정에서 많은 시간이 걸린다.
3.서블릿 인스턴스가 존재하면 _JspService()를 통해 곧장 응답한다.
2.2 JSP 기본객체
:객체 생성없이 사용할 수 있는 객체
4. 서블릿 유효 범위(scope)와 속성(attribute)
:서블릿 저장소는 접근범위가 생존기간에 따라 pageContext, application, session, request 4개의 저장소를 갖는다.
4.1 pageContext
:지역변수(기본객체)저장. 범위-> 페이지 안. EL을 쓰기위해 사용. EL은 기본객체를 사용할 수 없다. 지역변수를 저장소에 저장 후 사용.
4.2 application
:Web App 전체에서 접근가능. 1개만 존재. 상태를 저장하기 위해 사용(ex.로그인 후 글쓰기 할 때 로그인 정보를 잃지 않기 위해서). 은밀한 정보를 허가되지 않은 사용자가 쓸 수 있다. 개별 아이디를 저장하기에는 불리하다.
4.3 session
: 개별저장소. 클라이언트와 1:1. 로그인 후 로그인 정보 저장, 장바구니 저장 에 유용. 사용자마다 1개씩 갖는 개별저장소라 저장소 중에서 부담이 가장 많이감.
4.4 request
: 요청할 때마다 생성. 독립적. 요청을 forward하는 경우 쓴다. session보다 부담이 적기 때문에 데이터를 저장하고 전달할 때 많이 쓴다.
4.5 서블릿 유효 범위와 속성 정리
5.URL 패턴
:@WebServlet으로 서블릿을 URL에 맵핑하는 패턴을 의미한다.
스프링은 ‘DefaultServlet’을 가지고 있지 않다. 대신 ‘DispatcherServlet’을 사용하여 모든 요청을 맵핑한다.
6. 필터
: 필터는 중복코드를 분리할 때 사용한다.
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
// 필터를 적용할 요청의 패턴 지정 - 모든 요청에 필터를 적용.
@WebFilter(urlPatterns="/*")
public class PerformanceFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 초기화 작업
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 1. 전처리 작업
long startTime = System.currentTimeMillis();
// 2. 서블릿 또는 다음 필터를 호출
chain.doFilter(request, response);
// 3. 후처리 작업
System.out.print("["+((HttpServletRequest)request).getRequestURI()+"]");
System.out.println(" 소요시간="+(System.currentTimeMillis()-startTime)+"ms");
}
@Override
public void destroy() {
// 정리 작업
}
}
출처
-
스프링의 정석 : 남궁성과 끝까지 간다(패스트캠퍼스)
-
뉴렉쳐:서블릿/JSP 강의 03 - 웹 서버 프로그램과 Servlet(https://www.youtube.com/watch?v=sDWFWCvbrGg&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=3&ab_channel=%EB%89%B4%EB%A0%89%EC%B2%98)
-
MVC아키틱처, 마이바티스, 스프링으로 만드는 실무형 개발자 로드맵 자바 웹 개발 워크북(저자: 엄진영, 출판사:프리렉)
Comments