JSP에 대한 기본적인 개념들

Kevin·2024년 9월 6일
1

JAVA

목록 보기
14/16
post-thumbnail

서론

현재 JSP를 사용하는 프로젝트가 있어서 JSP를 통해 개발을 하고 있는데, JSP의 개념에 대해 부족한 감이 있어 이번 기회에 공부를 해보고자 한다.


JSP(Java Server Pages)

먼저 JSPServlet과 똑같다.

이유는 JSP를 사용하면 자동으로 Servlet으로 변환되기 때문이다.

예를 들어 아래의 JSP 코드가 있다고 가정하자.

<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.util.Random" %>
<%-- <%! 클래스 영역 %> --%>
<%!  
	int getRandomInt(int range){
		return new Random().nextInt(range)+1;
	}
%>
<%-- <%  메서드 영역 - service()의 내부 %> --%>
<%
	int idx1 = getRandomInt(6);
	int idx2 = getRandomInt(6);
%>
<html>
<head>
	<title>twoDice.jsp</title>
</head>
<body>
	<img src='resources/img/dice<%=idx1%>.jpg'>
	<img src='resources/img/dice<%=idx2%>.jpg'>
</body>
</html>

위의 JSP가 아래의 Servlet으로 변환된다.

@WebServlet("/rollDice2")
public class TwoDiceServlet extends HttpServlet {
    int getRandomInt(int range) {
	return new Random().nextInt(range)+1;
    }

    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
        int idx1 = getRandomInt(6);
        int idx2 = getRandomInt(6);

        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("</head>");
        out.println("<body>");
        out.println("<img src='resources/img/dice"+idx1+".jpg'>");
        out.println("<img src='resources/img/dice"+idx2+".jpg'>");
        out.println("</body>");
        out.println("</html>");
        out.close();	    
    }
}

Servlet이란 순수한 자바 코드로 작성되며, HTML 코드는 자바의 출력 스트림을 통해 동적으로 생성하는 것을 의미한다.

JSP의 HTML 태그는 Servlet에서 out.println으로 변환된다.

JSP의 호출 과정

JSP의 첫번째 호출은 Serlvet으로 변환을 해야하기에 오래걸린다.

그러나 두번째 호출은 이미 Servlet Instance가 존재함으로 분기에서 바로 yes로 탈출한다.

Servlet Instance란 하나의 Servlet 클래스로부터 생성된 인스턴스 객체이다.

위 참고 사진에서 jsp가 변환되어 Servlet 클래스 파일로 변환 및 컴파일 되고, 이를 통해 Servlet 인스턴스를 생성하는 걸 볼 수 있다.

추가적으로 Spring과 Servlet 모두 싱글톤으로 이루어져있지만, Spring은 early-init이고, Servlet은 lazy-init이다.

→ lazy-init : 요청이 올 때 객체를 생성한다.

→ early-init : 요청이 오기전에 미리 객체를 생성해놓는다.


JSP의 기본 객체

JSP(JavaServer Pages)에서는 개발자가 별도의 선언 없이도 기본적으로 사용할 수 있는 내장 객체(implicit objects)가 제공된다.

이 객체들은 웹 애플리케이션 개발에 자주 사용되는 기능을 쉽게 구현할 수 있도록 도와주며, JSP 페이지 내에서 바로 사용할 수 있고 JSP 컨테이너가 자동으로 생성 및 관리한다.


JSP의 저장소

JSP는 접근 범위와 생존 기간을 기준으로 4개의 저장소를 가지고 있으며, 저장소는 Map 자료 구조로 이루어져 있다.

  1. pageContext

    lv(지역변수), 기본 객체(rquest, response)를 저장할 수 있다.

같은 페이지에서만 접근 가능하다.

EL(${ })에서 lv를 바로 쓸 수 없음. 반드시 pageContext에 먼저 저장시키고, 사용해야함

EL은 <%= %>를 쓰기 불편해서 개선한 것이다.


  1. application

전체에 1개만 존재(공통 저장소)

WebApp 전체에서 접근 가능한 저장소이다.

전체에서 접근 가능하기에, ID와 같이 unique 해야 하는 값을 저장하기에는 일반적으로 옳지 않다.


  1. Session

각 클라이언트마다 1개씩 존재(개별 저장소)

세션은 쿠키를 이용해서 구현한다.

사용자만 사용할 수 있는 개별 정보를 저장하기에 용이(id, 장바구니)하다.

클라이언트마다 1개씩 있기에, 서버에 부담을 줄 수 있기에 세션에는 최소한의 데이터만 저장 해야 한다.


  1. request

request를 담고있는 저장소

request 객체는 다른 페이지간 forwarding을 사용할 때 추천한다.

→ forwarding : JSP간 request를 request 저장소에 담아서 넘겨주는 행위

profile
Hello, World! \n

0개의 댓글

관련 채용 정보