JSP (JavaServer Pages)에 대해서

이건우·2025년 2월 23일

웹 프로그래밍

목록 보기
3/43

JSP 는 서버에서 동적으로 웹 페이지를 생성하기 위한 기술이다.
HTML 내에 Java 코드를 포함할 수 있는 구조를 가진다.
Servlet 기반으로 동작하며, 주로 Spring Legacy(Spring MVC) 환경에서 View를 렌더링하는 데 사용된다.

1. JSP의 특징

HTML + Java : HTML 코드에 Java 코드를 직접 삽입할 수 있다.
Servlet 기반 : JSP 파일은 내부적으로 Servlet으로 변환되어 실행된다.
동적 페이지 : 클라이언트 요청에 따라 동적으로 콘텐츠를 생성 할 수 있다.
JSTL 및 EL(Expression Language) 지원 : 코드의 가독성을 높여 유지보수를 쉽게 한다.


2. JSP의 동작 원리 및 과정

  1. 사용자가 jsp 페이지 요청
  2. JSP 엔진이 jsp파일을 Servlet(Java 코드)으로 변환
  3. 변환된 Servlet을 컴파일하여 클래스 파일 생성
  4. Servlet 컨테이너가 Servlet을 실행하고 그 결과의 HTML을 생성
  5. 생성된 HTML을 클라이언트(웹 브라우저)로 반환

    이 과정에서 JSP는 한 번 변환되면 계속 재사용되며,
    JSP 파일이 수정되면 자동으로 다시 변환된다.


3. JSP 기본 문법

JSP에서 Java 코드를 직접 삽입 할 수 있는 방법


JSP 스크립트 요소

1)선언문 (<%! %>)
JSP 페이지에서 클래스 변수 또는 메서드를 선언할 때 사용
Servlet 클래스 내부의 멤버 변수처럼 동작
// 고정 상수처럼 바뀌지 않는 값을 지정할때에 가끔 사용( 거의 안씀 )

예시)

<%! 
    int count = 0; 
    public int getCount() {
        return count++;
    }
%>

2) 스크립틀릿 (<% %>)
JSP 페이지에서 Java 코드를 실행할 때 사용
service() 메서드 내부에 포함됨
// 각 사용자들이 받는 데이터를 저장하거나 제어 할 때 사용( 주로 쓰는 방식 )

예시)

<%
    String name = "Gunwoo";
    int age = 25;
%>
<p>이름: <%= name %></p>
<p>나이: <%= age %></p>

3) 표현식 (<%= %>)
Java 코드의 결과 값을 출력하는 용도로 사용
예시)

<p>현재 카운트: <%= getCount() %></p>

JSP 내장 객체

JSP는 여러 개의 내장 객체(Implicit Objects)를 제공하여 웹 애플리케이션을 쉽게 개발할 수 있다.

내장 객체설명
request클라이언트의 요청 정보 (ex. 파라미터, 헤더 등)
response클라이언트에 응답 보낼 때 사용
session사용자별 세션 데이터를 저장
application애플리케이션 전체공유되는 데이터 저장
outJSP 페이지 객체 출력 (HTML 출력)
pageContextJSP 페이지 컨텍스트 정보 관리
configJSP 설정 정보 저장
exception예외 처리 시 사용 (errorPage에서 활용)

예시) request

<%
    String username = request.getParameter("username");
%>
<p>환영합니다, <%= username %> 님!</p>

JSP 디렉티브

JSP에서 특정 설정을 지정하는 요소로, 주로 페이지 설정과 import에 사용

1) taglib 디렉티브

JSTL(JavaServer Pages Standard Tag Library)을 사용하기 위해 선언
// JSP에서 JSTL을 사용하기 위해서는 아래 선언을 해야 한다.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

2) page 디렉티브

현재 JSP 페이지의 설정을 지정

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

코드 분석 )

  • language="java"
    JSP에서 사용할 프로그래밍 언어를 지정
    현재는 Java만 지원하므로 사실상 필요 없는 속성.

  • contentType="text/html; charset=UTF-8"
    응답(response)의 콘텐츠 타입 설정.
    text/html → HTML 문서임을 명시.
    charset=UTF-8 → 클라이언트(브라우저)에서 UTF-8 인코딩으로 해석하도록 지정.

  • pageEncoding="UTF-8"
    JSP 파일 자체의 인코딩 방식을 지정.
    JSP 파일을 UTF-8로 저장 및 해석하도록 설정. (서버)

3) include 디렉티브

다른 JSP 파일을 포함할 때 사용, 다른 JSP 파일을 불러와 사용 할 수 있다.
예시)

<%@ include file="header.jsp" %>


++ SpringMVC에서 JSP를 View로 설정

Spring MVC에서 JSP를 View로 설정할 경우,
InternalResourceViewResolver를 설정해야 한다.
예시)

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>

코드 분석)

1. InternalResourceViewResolver(bean class)

  • Spring MVC에서 View를 색인하고 렌더링하는 역할을 하는 뷰 리졸버(View Resolver).
  • 클라이언트가 요청한 URL을 기반으로 JSP 파일의 물리적 경로를 결정함.
  • prefix와 suffix를 조합하여 최종 JSP 파일 경로를 만들어,
    RequestDispatcher.forward() 방식으로 이동함.

    RequestDispatcher.forward() 방식 :
    서버 내부에서 페이지를 전환(포워딩)하는 방식으로,
    클라이언트의 요청을 다른 JSP, 서블릿 또는 다른 리소스로 넘겨서 처리하는 방식

2. prefix와 suffix 속성의 역할

  • prefix : 뷰 파일(JSP)의 기본 경로를 설정하는 속성.
  • suffix : 뷰 파일확장자를 설정하는 속성.
profile
새싹개발자

0개의 댓글