JSP(JavaServer Pages)는 웹 개발에서 서버 측에서 동적으로 컨텐츠를 생성하기 위해 사용되는 기술입니다. JSP는 HTML에 Java 코드를 포함시켜 웹 페이지를 작성할 수 있게 되는데요. 쉽게 얘기하면 페이지에 자바 코드를 사용할 수 있는 페이지가 JSP인 셈이죠.
<%--1. JAVA 코드 영역--%> <%@page import="java.text.SimpleDateFormat"%> <%@page import="java.util.Date"%> <%@page import="java.util.Calendar"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!--2. HTML 코드 영역 --%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="" method = "get"> <fieldset> <legend>개인 정보 전송</legend> <p>이름 <input type="text" name="name"></p> <p>나이 <input type="text" name="age"></p> <p> 반려동물( <input type="checkbox" name="pet" value="강아지">강아지 <input type="checkbox" name="pet" value="고양이">고양이 <input type="checkbox" name="pet" value="돼지">돼지 ) </p> <p><textarea rows="5" cols="30" name="info"></textarea></p> <input type="button" value="전송" onclick=send(this.form)> </fieldset> </form> </body> <script type="text/javascript"> function send(f){ f.action = 'Ex03_02_receive.jsp'; f.submit(); } </script> </html>
이러한 JSP 페이지는 스크립트 기반 태그를 이용해 자바의 선언문, 표현식등의 다양한 자바 전용 스크립트 태그를 페이지 내에 삽입하여 페이지에 동적인 기능 및 UI를 생성하는 것이 가능한데요. 이러한 자바 코드를 JSP 페이지에서 사용할 수 있게 해주는 태그를 스크팁트 기반 태그라고 하면, 해당 태그들의 종류들은 다음과 같습니다.
주로 해당 JSP 페이지의 설정 정보를 제공하거나 페이지 속성을 정의할 때 사용됩니다. 주로 JSP 페이지의 최상단에 위치해 있습니다. 지시어의 속성은 다양한데요. 우선 page 지시어의 속성들부터, 그러니까 가장 많이 쓰이니는 지시어인 page의 속성들을 소개해 드리도록 하겠습니다.
다음은 page 지시어에서 주로 쓰이는 속성들입니다.
language
스크립트 코드에서 사용되는 언어를 지정합니다.
<%@ page language="java" %>
contentType
컨텐츠 타입의 형식과 인코딩 방식을 지정합니다.
<%@ page contentType="text/html; charset=UTF-8" %>
pageEncoding
JSP 파일 자체의 문자 인코딩을 지정합니다.
<%@ page pageEncoding="UTF-8" %>
import
JSP 페이지 내에서 사용할 자바클래스나 라이브러리를 임포트 하는 용도로 사용합니다.
<%@ page import="java.util.Calendar" %>
session
해당 페이지 내에서 세션 객체를 사용할 것인지에 대한 여부를 지정하는데 사용됩니다.
<%@ page session="true" %>
buffer
콘텐츠를 클라이언트에게 전달하기 전에 메모리 내에서 임시로 저장하는 과정을 가지는데요. 이 메모리의 버퍼(크기)를 정할 때 사용합니다. 보통 기본값은 8kb 이며 웹페이지의 규모에 따라 64kb까지 버퍼를 설정하기도 합니다.
<%@ page buffer="8KB" %>
autoFlush
보통 버퍼가 가득 차면 자동으로 컨텐츠를 클라이언트에게 출력(응답) 하게 되는데요. 그 말인 즉 버퍼가 차지 않을 경우 클라이언트에게 출력을 하지 않는다는 의미인데, autoFlush 속성을 true로 설정하면 버퍼가 다 차지 않아도 자동으로 클라이언트에게 컨텐츠를 응답하게 됩니다.
기본적으로 이 속성은 false로 설정되어 있기 때문에 만약 메모리 효율을 높이고 싶을 경우 true로 설정하면 되나, 응답 속도를 느리게 하는데 영향을 줄 수 있기 때문에 상황에 따라 설정값을 주어야 하는 속성입니다.
<%@ page autoFlush="true" %>
errorPage
에러가 발생하면 호출할 오류 전용 페이지의 위치를 지정하는데 사용됩니다.
<%@ page errorPage="이동할 위치" %>
isErrorPage
해당 JSP 페이지가 오류 처리 페이지임을 명시하는데 사용됩니다. 이곳에서는 주로 예외 처리 과정을 거쳐 도출된 결과를 사용자에게 적절하게 보여주는 역할의 페이지로 사용됩니다.
<%@ page isErrorPage="false"%>
다음은 JSP 페이지 내의 최상단에 위치하는 지시어의 예시입니다.
<%@ page language="java" <%-- JSP 페이지에서 사용할 프로그래밍 언어를 설정합니다. 기본값은 "java"입니다. --%> contentType="text/html; charset=UTF-8" <%-- 페이지의 콘텐츠 타입과 문자 인코딩을 설정합니다. HTML과 UTF-8 인코딩을 사용합니다. --%> pageEncoding="UTF-8" <%-- JSP 페이지 소스 파일의 문자 인코딩을 설정합니다. 여기서는 UTF-8을 사용합니다. --%> import="java.util.*, java.text.*" <%-- JSP 페이지에서 사용할 Java 클래스들을 임포트합니다. --%> session="false" <%-- 이 JSP 페이지가 세션을 사용하지 않도록 설정합니다. --%> isThreadSafe="true" <%-- 페이지가 스레드 안전하다고 설정합니다. 기본값은 true이며, 페이지가 동시 요청을 안전하게 처리할 수 있음을 의미합니다. --%> buffer="8kb" <%-- 페이지의 버퍼 크기를 설정합니다. 여기서는 8KB로 설정합니다. --%> autoFlush="true" <%-- 버퍼가 가득 차면 자동으로 클라이언트에게 내용을 플러시하도록 설정합니다. --%> errorPage="error.jsp" <%-- 이 JSP 페이지에서 예외가 발생하면 "error.jsp"로 이동하여 예외를 처리하도록 설정합니다. --%> isErrorPage="false" <%-- 이 JSP 페이지가 오류 처리 페이지가 아님을 명시합니다. 이 속성은 주로 오류 처리 페이지에서 사용됩니다. --%> %>
include 지시어
include 지시어는 말 그대로 파일 내에 또 다른 JSP 파일의 HTML 영역을 삽입할 때 사용합니다. 예시로 해당 페에지의 헤더나 푸터로서 사용할 수 있기에 자주 사용되는 지시어이기도 하죠.
- Date 정보를 담고 있는 JSP 페이지
<%@page import="java.text.SimpleDateFormat"%> <%@page import="java.util.Date"%> <%@page import="java.util.Calendar"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <%Calendar cal = Calendar.getInstance(); %> <%=cal.get(Calendar.YEAR)%>년 <%=cal.get(Calendar.MONTH) %>월 <%=cal.get(Calendar.DATE) %>년일 <%Date today = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("HH시 mm분 ss초"); %> <%= sdf.format(today) %> </body> </html>
- 해당 Date 정보를 담고 있는 JSP 파일을 include 지시어로 포함시킨 페이지
<%@page import="java.text.SimpleDateFormat"%> <%@page import="java.util.Date"%> <%@page import="java.util.Calendar"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>현재 상황 <%@ include file = "Date.jsp" %> 날씨는 무진장 화창합니다!</h1> </body> </html>
Java 코드를 JSP 페이지에 삽입할 때 사용됩니다. 쉽게 이야기해서 자바의 코드는 대부분 이곳에서 작성된다고 생각하시면 됩니다.
<% // 자바의 서블릿 객체 중 request(사용자 요청 정보 저장) 객체의 특정 인코딩 속성을 세팅 request.setCharacterEncoding("UTF-8"); // 각 변수들에 request의 특정 메서드(getter 메서드)를 이용해 사용자의 응답 정보를 추출하여 할당 String name = request.getParameter("name"); int age = Integer.parseInt(request.getParameter("age")); String[] pet = request.getParameterValues("pet"); String info = request.getParameter("info"); %>
Java 표현식을 평가하고 결과를 출력할 때 사용됩니다. 주로 JSP 페이지 내에서 HTML 코드 내에 함께 사용하며, 스크립틀릿에 작성된 변수를 문서 내에 표현하고자 할 때 사용합니다.
<%-- HTML 코드 내에 자바의 변수들을 표현하기 위해 표현식을 사용한 모습 --%> <li>이름 :<%= name %></li> <li>나이 :<%= age %></li> <li>애완동물 :<%= pet == null ? "없음" : Arrays.toString(pet) %></li> <li>자기소개 :<%= info %></li>
메서드나 변수를 선언할 때 사용되는 태그로, 선언문이 아니더라도 더욱 포괄적인 개념에서의 스크립틀릿 태그가 존재하기 때문에 잘 사용되지 않는 태그이기도 합니다.
<%-- 사용자의 요청 중 name 속성이 name인 값을 얻어와 --%> <%-- 해당 값의 상태에 따라 출력문을 다르게 하는 함수를 정의한 후 호출 결과를 표현식으로 사용 --%> <%! String name = request.getParameter("name"); private String getGreeting(String name) { if (name == null || name.isEmpty()) { return "Hello, Guest!"; } else { return "Hello, " + name + "!"; } } %> <%= getGreeting(name) %>
주석문은 JSP 페이지 내에서 달 수 있는 설명글로, 그냥 편하게 주석이라고 생각하시면 되는데요. JSP 에서는 주석을 두 가지, 그러니까 HTML 주석과 JSP 주석을 달 수 있습니다.
공통점은 코드 실행에 영향을 주지 않는다는 점이지만, 차이점은 HTML 주석의 경우 페이지 소스 코드에서 보이는 반면, JSP 주석은 페이지 소스 코드에서도 보이지 않는다는 점을 들 수 있습니다.
<!-- 이 부분은 HTML 주석입니다. 브라우저가 렌더링할 때 무시되지만, 소스 코드에는 표시됩니다. --> <p>이 부분은 HTML 주석입니다.</p> <%-- 이 부분은 JSP 주석입니다. 클라이언트에게 전달되지 않습니다. --%> <p>이 부분은 JSP 주석입니다.</p>