[JSP] JSP란?
JSP(Java Server Pages)는 동적 웹페이지를 생성하는 기술로, HTML 코드 안에 Java 코드를 삽입하여 서버에서 동적으로 웹 페이지를 생성하는 도구입니다. JSP는 클라이언트의 요청을 처리하고 그에 맞는 웹 페이지를 반환하는 역할을 합니다. 이때, JSP 파일은 서버에 의해 **서블릿(Servlet)**으로 변환되고, 이를 통해 웹 페이지가 동적으로 생성됩니다. 결과적으로, 웹 애플리케이션 서버에서 데이터와 HTML을 결합하여 클라이언트에게 전달합니다.
JSP의 실행 흐름은 다음과 같습니다:
- 클라이언트가 요청한 JSP 파일은 서버에서 서블릿으로 변환됩니다.
- 변환된 서블릿은 클래스 파일로 변환되고 실행됩니다.
- 최종적으로 실행된 결과는 HTML 코드로 변환되어 클라이언트에게 반환됩니다.
예시 흐름:
- 클라이언트 요청 -> xxx.jsp -> 서버에서 서블릿 처리
- 서블릿 처리 후 결과 -> xxx.html로 변환되어 클라이언트에게 반환
JSP의 장점과 단점
JSP의 장점
- HTML 코드와 Java 코드 결합
JSP는 HTML 코드와 Java 코드를 함께 사용할 수 있어, 동적인 콘텐츠를 생성하기에 용이합니다. HTML을 작성하는 퍼블리셔와 협업이 가능하며, 개발자는 서버 측에서 필요한 로직을 처리할 수 있습니다. - 빠른 개발
간단한 동적 웹 페이지를 구현할 때는 JSP 문서를 작성하는 것이 효율적입니다. 별도의 복잡한 설정 없이 서버에서 바로 실행 가능하므로, 빠른 개발이 가능합니다.
JSP의 단점
- 복잡한 코드 관리
HTML 코드 내에 Java 로직이 삽입되기 때문에, 코드가 복잡해질 수 있습니다. 특히 복잡한 로직을 처리할 때 HTML과 Java가 혼합되어 코드가 어려워질 수 있습니다. - 보안과 유지보수 문제
프로그래밍 지식이 부족한 사람이 JSP 파일을 수정할 경우, 코드가 잘못 수정되어 문제가 발생할 수 있습니다. 또한, 비즈니스 로직을 JSP 파일에 넣으면 보안상의 문제가 발생할 수 있습니다. - 로직 분리의 필요성
중요한 로직은 JSP에서 처리하지 않고, Java 코드에서 처리하는 것이 보안과 성능 면에서 유리합니다.
JSP의 주요 태그들
스크립트 태그
JSP에서 자바 코드를 HTML 문서에 삽입하기 위해 다양한 태그를 사용할 수 있습니다.
- 선언문 (<%! ... %>)
- 자바 클래스나 메서드를 정의할 때 사용합니다.
- 예시:
<%! int x = 10; %>
- 스크립틀릿 (<% ... %>)
- 자바 코드를 실행하는 구문을 작성하는 데 사용합니다.
- 예시:
<% int x = 5; int y = 10; out.println(x + y); %>
- 표현문 (<%= ... %>)
- 계산된 값이나 변수 값을 출력하는 데 사용합니다.
- 예시:
<%= "현재 시간은: " + new java.util.Date() %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
디렉티브 태그
디렉티브 태그는 JSP 페이지의 속성을 설정하는 데 사용됩니다. 보통 페이지 최상단에 선언됩니다.
- 페이지 설정 (<%@ page ... %>)
- JSP 페이지의 설정을 지정합니다. 예를 들어, 사용 언어 설정, 콘텐츠 타입 설정 등이 있습니다.
- 예시:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
2. 클래스 임포트 (<%@ page import="클래스명" %>)
- 필요한 Java 클래스를 임포트하여 사용합니다.
- 예시:
<%@ page import="java.util.Date" %>
디렉티브 태그 옵션
1. import : 클래스를 사용
import 속성은 JSP 파일에서 사용할 Java 클래스를 임포트할 때 사용됩니다. 이를 통해 JSP 내에서 해당 클래스의 기능을 사용할 수 있습니다.
예시:
<%@ page import="java.util.Date" %>
위 코드에서 java.util.Date 클래스를 임포트하여, JSP 페이지 내에서 Date 객체를 사용해 현재 날짜와 시간을 출력할 수 있습니다.
2. language : 사용할 프로그래밍 언어 설정
language 속성은 JSP 페이지에서 사용할 프로그래밍 언어를 설정합니다. 기본적으로 JSP는 Java 언어를 사용하므로, 대부분의 경우 "java"로 설정됩니다.
예시:
<%@ page language="java" %>
이 속성은 JSP 페이지에서 Java 코드만 사용할 수 있도록 설정하는 것입니다. 이 속성을 다른 언어로 설정하면 JSP 페이지에서 다른 언어로 코드를 작성할 수 있습니다.
3. contentType : 생성할 문서의 컨텐츠 유형
contentType 속성은 JSP 페이지가 생성하는 HTML 문서의 MIME 타입과 문자 인코딩을 설정합니다. 일반적으로 HTML을 생성할 때는 text/html을 사용하며, 문자 인코딩은 주로 UTF-8로 설정합니다.
예시:
<%@ page contentType="text/html; charset=UTF-8" %>
위 코드에서, contentType을 text/html로 설정하고 문자 인코딩을 UTF-8로 설정하였습니다. 이는 생성된 HTML 문서가 UTF-8 인코딩을 사용하며 클라이언트에 전달된다는 의미입니다.
4. pageEncoding : 페이지 문자 인코딩을 설정
pageEncoding 속성은 JSP 페이지 파일 자체의 문자 인코딩을 설정합니다. 이 속성은 JSP 파일을 저장하는 파일 시스템에서 사용하는 문자 인코딩을 정의하며, 주로 페이지의 인코딩을 UTF-8로 설정하는 것이 일반적입니다.
예시:
<%@ page pageEncoding="UTF-8" %>
위 코드에서, JSP 페이지 자체의 문자 인코딩을 UTF-8로 설정합니다. 이는 페이지를 작성할 때, 특수 문자나 한글 등이 깨지지 않도록 하기 위함입니다.
종합 예시
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!-- 디렉티브 태그 -->
<%@ page import="java.util.Date" %> <!-- 선언문 -->
<%
String userid = "apple";
String name = "김사과";
int age = 20;
double height = 160.5;
%> <!-- 스크립틀릿 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP의 변수</title>
</head>
<body>
<p>아이디 : <%=userid %><!-- 표현문 --></p>
<p>이름 : <%=name %></p>
<p>나이 : <%=age %></p>
<p>키 : <%=height %></p>
<p>현재 시간은 <%=new Date() %></p>
<%
out.println("<p>아이디 : " + userid + "</p>");
out.println("<p>이름 : " + name + "</p>");
out.println("<p>나이 : " + age + "</p>");
out.println("<p>키 : " + height + "</p>");
if (age > 19) {
out.println("<p>성인입니다.</p>");
} else {
out.println("<p>미성년입니다.</p>");
}
%>
</body>
</html>
위 예시는 다음을 설정합니다:
- language="java": JSP 페이지에서 Java 언어를 사용
- contentType="text/html; charset=UTF-8": 생성된 HTML 문서의 콘텐츠 유형을 text/html로, 문자 인코딩은 UTF-8로 설정
- pageEncoding="UTF-8": JSP 페이지 자체의 문자 인코딩을 UTF-8로 설정
- import="java.util.Date": java.util.Date 클래스를 JSP 페이지에서 사용할 수 있도록 임포트
이러한 설정들을 통해 JSP 파일은 필요한 클래스를 임포트하고, 올바른 문자 인코딩 및 콘텐츠 유형으로 웹 페이지를 생성하게 됩니다.