38. JSP의 주요 구성 요소 (2)
- JSP 전용 태그 : 지시자
<%@ 지시자 속성="값" 속성="값" … %>는 JSP 전용 태그로 '지시자(Directives)나 '속성'에 따라 특별한 자바 코드를 생성한다. JSP 지시자에는 page, taglib, include가 있다.
page 지시자는 JSP 페이지와 관련된 속성을 정의할 때 사용하는 태그다.
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Calculator.jsp에 작성된 page 지시자이다.
language 속성은 스크립트릿(Scriptlet)이나, 표현식(Expression element), 선언부(Declaration element)를 작성할 때 사용할 프로그래밍 언어를 지정한다. 즉 JSP 페이지에 삽입되는 코드의 스크립팅 언어를 지정한다. 'java'문자열은 모두 소문자로 작성해야 하는 것은 대소문자를 구분하기 때문이다. language 속성을 생략하면 기본으로 'java'라서 생략해도 된다.
contentType 속성은 출력할 데이터의 MIME 타입과 문자 집합을 지정한다. Calculator.jsp에서 값 'test/html'은 출력할 데이터가 HTML 텍스트임을 가리킨다. Calculator.jsp에서 값 'charset=UTF-8'은 출력할 데이터를 UTF-8로 변환(encoding)할 것을 지시하는데 문자 집합을 생략하면 기본값 'ISO-8859-1'을 사용한다. 자바는 문자열을 다룰 때 유니코드(UTF-16BE)를 사용하는데, 클라이언트 문자열을 출력할 때 유니코드(UTF-16 BE)를 pageEncoding 또는 contentType에 설정된 문자 집합으로 변환하여 내보낸다.
pageEncoding 속성은 출력할 데이터의 문자 집합을 지정한다. 기본값은 'ISO-8859-1'이고 만약 이 속성을 생략하면 contentType에 설정된 값을 사용한다. contentType 속성에도 없다면 기본값 'ISO-8859-1'을 사용한다.
page 지시자가 어떤 자바 코드를 생성했는지 살펴본다.
C:\javaide\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\web05\org\apache\jsp\calc
위 경로에 있는 JSP 엔진이 생성한 Calculator.jsp의 자바 서블릿 소스 Calculator_jsp.java를 확인한다.
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException {
...
try {
response.setContentType("text/html; charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);
...
}
page 지시자의 pageEncoding 속성과 contentType 속성은 response.setContentType() 호출 코드를 생성한다. language 속성은 JSP 엔진에 정보를 제공하는 것으로 그 역할을 다하므로 별도의 자바 명령문을 생성하지 않는다.
- JSP 전용 태그 : 스크립트릿
<% 자바코드 %>는 JSP 페이지에서 자바 코드를 넣을 때 사용하는 스크립트릿(Scriptlet Elements) 태그이다. 스크립트릿 태그 안에 작성한 내용은 서블릿 파일을 만들 때 그대로 복사된다.
<%
String v1 = "";
String v2 = "";
String result = "";
String[] selected = {"", "", "", ""};
//값이 있을 때만 꺼낸다.
if (request.getParameter("v1") != null) {
v1 = request.getParameter("v1");
v2 = request.getParameter("v2");
String op = request.getParameter("op");
result = calculate(
Integer.parseInt(v1),
Integer.parseInt(v2),
op);
...
}
%>
Calculator.jsp에 작성된 스크립트릿 태그의 일부 내용이다. 스크립트릿 <% %> 안에는 클라이언트가 보낸 매개변수 값을 임시 변수에 저장하고 그 계산 결과도 임시 변수에 저장하는 자바 코드가 들어있다.
스크립트릿의 내용이 서블릿 파일에서 어떤 자바 코드를 생성하는지 확인한다.
C:\javaide\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\web05\org\apache\jsp\calc
위 경로의 JSP 엔진이 생성한 Calculator.jsp의 자바 서블릿 소스 Calculator_jsp.java에서 _jspService()를 확인한다.
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException {
...
String v1 = "";
String v2 = "";
String result = "";
String[] selected = {"", "", "", ""};
//값이 있을 때만 꺼낸다.
if (request.getParameter("v1") != null) {
v1 = request.getParameter("v1");
v2 = request.getParameter("v2");
String op = request.getParameter("op");
result = calculate(
Integer.parseInt(v1),
Integer.parseInt(v2),
op);
...
}
out.write(" \n");
out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \n");
out.write(" \"http://www.w3.org/TR/html4/loose.dtd\">\n");
out.write("<html>\n");
...
}
스크립트릿의 내용을 그대로 서블릿 파일에 복사한 것을 확인할 수 있다. 복사한 위치도 JSP 파일에서 태그를 작성한 위치와 같다. 즉 스크립트릿에 작성한 자바코드 바로 다음에 <!DOCTYPE html...> 태그 출력물인 템플릿 데이터가 나온다.
참고도서 : https://freelec.co.kr/book/1674/
[열혈강의] 자바 웹 개발 워크북
[열혈강의] 자바 웹 개발 워크북
freelec.co.kr