JSP

leedong617·2024년 9월 10일
post-thumbnail

JSP(JavaServer Pages)는 자바 기반의 웹 애플리케이션에서 동적인 웹 페이지를 생성하기 위해 사용되는 기술임. JSPHTML, CSS, JavaScript 등의 정적 콘텐츠와 자바 코드를 결합하여 동적 웹 페이지를 생성할 수 있게 해줌. JSP는 주로 서버 측에서 실행되며, 클라이언트(브라우저)는 최종적으로 JSP가 생성한 HTML 페이지를 받음.

JSP는 자바 서블릿을 확장한 형태로, 자바 코드를 HTML에 쉽게 포함할 수 있도록 설계되었음. JSP서블릿과 함께 사용되며, 복잡한 비즈니스 로직은 서블릿에서 처리하고, JSP는 주로 프레젠테이션 계층을 담당함.

1. JSP의 기본 개념

JSPHTML 내에 자바 코드를 포함할 수 있는 서버 측 기술로, 주로 동적인 웹 페이지를 생성하는 데 사용됨.
JSP 파일은 .jsp 확장자를 가지며, 웹 서버에서 실행되면 서블릿으로 변환된 후 실행됨. 즉, JSP는 내부적으로 서블릿으로 컴파일되어 실행됨.
클라이언트는 최종적으로 HTML 페이지를 받기 때문에, JSP 페이지는 동적으로 생성된 HTML을 반환함.

2. JSP 작동 원리

JSP가 동작하는 과정은 다음과 같음

클라이언트 요청

  • 사용자가 웹 브라우저를 통해 .jsp 파일에 대한 요청을 보냄.

JSP 처리

  • 웹 컨테이너(예: Tomcat)는 JSP 파일을 처리하고, 이를 서블릿으로 변환하여 자바 코드로 컴파일함.

서블릿 실행

  • 변환된 서블릿이 실행되면서 동적으로 HTML 페이지를 생성함.

HTML 응답

  • 서버는 서블릿이 생성한 HTML 응답을 클라이언트(웹 브라우저)로 전송함.

클라이언트 표시

  • 클라이언트는 받은 HTML을 브라우저에 표시함.

3. JSP의 주요 기능 및 태그

1. JSP 스크립트 요소

JSP에서는 자바 코드를 여러 방식으로 포함할 수 있음. 주로 사용하는 세 가지 스크립트 요소는 다음과 같음

<%= ... %> (Expression)

  • 자바 표현식. 자바 코드를 실행하고, 결과를 HTML로 출력함.
<h1>Welcome, <%= username %>!</h1>
  • 위 코드에서는 username 변수의 값을 출력함.

<% ... %> (Scriptlet)

  • 자바 코드 블록을 포함함. 서블릿의 service() 메소드 내에서 실행됨.
<% 
    String username = "John"; 
    int age = 25;
%>
<p>User: <%= username %>, Age: <%= age %></p>
  • 자바 변수를 선언하고, HTML에 해당 변수를 출력함.

<%! ... %> (Declaration)

  • 자바 메소드나 변수를 선언함. 이 코드는 서블릿의 멤버 변수나 메소드로 포함됨.
<%! 
    public String getGreeting(String name) {
        return "Hello, " + name;
    }
%>
<p><%= getGreeting("Alice") %></p>
  • 위 코드에서는 JSP 페이지에서 사용할 수 있는 자바 메소드를 선언하고 호출함.

2. JSP 디렉티브

JSP 디렉티브는 페이지의 속성이나 설정을 지정할 때 사용됨. 주로 세 가지 디렉티브가 있음

<%@ page ... %>

  • JSP 페이지의 전반적인 설정을 정의함.

  • 예: 사용할 언어, 예외 처리, 인코딩 방식 등.

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

<%@ include ... %>

  • 다른 JSP 파일이나 HTML 파일을 현재 페이지에 포함할 때 사용됨.
<%@ include file="header.jsp" %>
  • header.jsp 파일을 현재 페이지에 포함시킴.

<%@ taglib ... %>

  • JSTL(JavaServer Pages Standard Tag Library)와 같은 외부 태그 라이브러리를 사용할 때 사용됨.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  • JSTL의 코어 라이브러리를 사용하기 위해 c라는 접두사를 지정함.

3. JSP 액션 태그

JSP는 액션 태그를 통해 자바 코드를 HTML과 함께 쉽게 사용할 수 있음. 주로 사용하는 액션 태그는 다음과 같음

<jsp:include>

  • 다른 JSP 파일이나 HTML 파일을 동적으로 포함함. 주로 헤더나 푸터 같은 공통적인 부분을 포함할 때 사용됨.
<jsp:include page="header.jsp" />

<jsp:forward>

  • 다른 JSP 페이지나 서블릿으로 요청을 전달할 때 사용됨.
<jsp:forward page="nextPage.jsp" />

<jsp:param>

  • 파라미터를 전송할 때 사용됨.
<jsp:include page="footer.jsp">
    <jsp:param name="footerText" value="Thank you for visiting!" />
</jsp:include>

4. JSP 주석

JSP에서는 HTML 주석과 JSP 주석을 구분할 수 있음.

HTML 주석

  • 클라이언트에게 전달됨.
<!-- This is an HTML comment -->

JSP 주석

  • 클라이언트에게 전달되지 않음. 서버 측에서만 사용됨.
<%-- This is a JSP comment --%>

4. JSP와 서블릿의 관계

JSP는 본질적으로 서블릿의 상위 수준 추상화임. JSPHTML 중심의 개발을 쉽게 해주는 반면, 서블릿은 자바 코드 중심으로 작성됨. JSP는 웹 페이지의 프레젠테이션 로직에 더 초점을 맞추고, 서블릿은 비즈니스 로직과 요청 처리에 집중함.

JSP 파일은 최초 요청 시 서블릿으로 변환되어 실행됨.
개발자가 직접 HTML과 자바 코드를 혼합하여 동적인 웹 페이지를 생성할 수 있음.
JSP는 자바 코드뿐만 아니라 JSTL과 같은 태그 라이브러리를 통해 HTML에 쉽게 로직을 추가할 수 있음.

5. JSP의 장점

쉽고 간결한 코드 작성

JSPHTML에 자바 코드를 쉽게 포함할 수 있으므로, 동적 페이지 생성이 쉬움.
자바 코드와 HTML을 한 파일에서 처리할 수 있어, 웹 페이지의 비즈니스 로직과 프레젠테이션 로직을 결합할 수 있음.

재사용성

JSP<jsp:include>와 같은 태그를 통해 코드의 중복을 줄일 수 있음. 헤더, 푸터 등 공통 요소를 다른 JSP 페이지에 포함시켜 재사용 가능함.

MVC 패턴 구현

JSP는 서블릿과 함께 MVC(Model-View-Controller) 패턴을 쉽게 구현할 수 있음. 서블릿은 컨트롤러 역할을 하며, JSP뷰(View) 역할을 담당하여 비즈니스 로직과 프레젠테이션 로직을 분리함.

JSTL과 커스텀 태그

JSPJSTL(JavaServer Pages Standard Tag Library)을 지원하여, 반복문, 조건문 등을 쉽게 처리할 수 있음.
개발자는 자신만의 커스텀 태그를 정의하여 JSP 페이지에서 사용할 수 있음.
성능:

JSP 페이지는 최초 요청 시 서블릿으로 컴파일되기 때문에, 이후 요청부터는 서블릿처럼 빠르게 처리됨.

6. JSTL (JavaServer Pages Standard Tag Library)

JSTLJSP에서 자주 사용하는 로직을 쉽게 처리할 수 있도록 돕는 표준 태그 라이브러리임. 예를 들어 조건문, 반복문, 포매팅, 국제화(i18n) 등의 작업을 태그를 통해 쉽게 처리할 수 있음.

JSTL 주요 태그 예시

조건문

<c:if test="${user.age > 18}">
    <p>Adult</p>
</c:if>

반복문

<c:forEach var="item" items="${itemsList}">
    <p>${item.name}</p>
</c:forEach>

7. JSP의 단점

복잡한 비즈니스 로직

  • JSP는 HTML과 자바 코드를 함께 사용할 수 있지만, 복잡한 비즈니스 로직이 포함될 경우 코드가 복잡해질 수 있음.
  • 비즈니스 로직은 서블릿이나 다른 자바 클래스에서 처리하고, JSP는 프레젠테이션 로직에 집중하는 것이 좋음.

유지보수 어려움

  • JSP 페이지에 자바 코드가 너무 많이 포함되면, 유지보수가 어려워질 수 있음. MVC 패턴을 사용하여 로직과 프레젠테이션을 분리하는 것이 중요함.

초기 로드 시간

  • JSP는 최초 요청 시 서블릿으로 변환되고 컴파일되기 때문에, 첫 로드 시간이 약간 느릴 수 있음. 하지만 한 번 컴파일된 후에는 서블릿처럼 빠르게 작동함.

결론

JSP는 자바 기반의 웹 애플리케이션에서 동적 웹 페이지를 생성하기 위한 강력한 기술임.

JSP는 자바 코드를 HTML 내에 쉽게 포함할 수 있도록 하여, 서버 측에서 동적으로 콘텐츠를 생성하고 클라이언트에게 전달할 수 있음.

서블릿과 함께 사용하여 MVC 패턴을 구현하면, 비즈니스 로직과 프레젠테이션 로직을 분리하여 코드의 유지보수를 용이하게 할 수 있음.

profile
웹개발자 취업 준비생

0개의 댓글