PLOD

[JSP] JSP , JSTL 본문

개발 공부/Spring framework

[JSP] JSP , JSTL

훌룽이 2023. 3. 9. 09:22

JSP

JSP(JaveServer Pages) 는 서블릿과 동일 하게 웹 어플리케이션에서 동적 콘텐츠를 만들기 위해 제공되는 기술이다.

JSP는 서블릿 프로그램에 HTML을 삽입하여 작성하여 웹으로 구현해준다.  JSP는 자바 클래스로 구현하기 때문에 플랫폼에 독립적이고, 특정 서버에 종속되지 않으면서 멀티스레드를 기반으로 다수의 사용자 요청을 효율적으로 처리한다. 

기존의 서블릿은 다음과 같은 단점이 있었다.

1. 정해진 규칙을 지켜서 작성해야 한다.
(import, public클래스, HttpServlet 상속, 기본 생성자 , 콜백 메소드 오버라이딩)
2. web.xml 파일이나 어노테이션을 통해 요청 URL에 대한 매핑을 설정해야 한다.
3. 소스를 수정한 후에는 반드시 재컴파일을 하고 리로딩 될때까지 기다려야 한다.
4. 가독성이 떨어지고, UI/UX 유지보수를 하기 힘들다.

위의 코드는 서블릿으로 웹을 구현한 것이고 아래는 JSP로 같은 웹을 구현한 것이다. 한 눈에 봐도 가독성과 유지보수적인 측면에서 깔끔하다.  JSP file을 너무 복잡하게 생각하지 말고 , HTML file에 java를 입힌다고 생각하면 된다. 

 

 

spring framework나 이클립스 dynamic web prigramming에서 JSP 파일을 생성하는 규칙은 src/main/webapp 폴더 밑에 JSP File을 만드는 것이다.

 

JSP script

JSP는 서블릿과 마찬 가지로 HTML 태그를 이용하여 사용자에게 UI 화면을 제공한다. 그리고 화면에 출력할 데이터를 획득하고 출력하는 과정에서 다양한 자바 코드를 사용하는데, 이때 자바 코드 사용과 관련한 다섯가지의 스크립트 기반 태그를 제공한다.

 

directive  (<%@    %>)

지시자(directive)는 JSP가 서블릿 클래스로 변환될 때 서블릿 클래스에 어떤 내용을 반영 할지를 지시 할 때 사용하며, 스크립트 기반 태그 중에서 가장 다양하고 복잡하다. 지시자는 다음과 같이 세가지 종류를 지원한다.

지시자 형태 의미
page <%@ page                  %> 서블릿 변환 과정에서 추가할 페이지 정보를 설정 한다.
include <% include                    %> 다른 JSP 코드를 특정 위치에 포함시킨다
taglib <%@ taglib                    %> XML 기반의 태그를 사용할 수 있도록 선언한다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>

지시자의 기능을 이해하기 위한 가장 기본적인 설정을 추가해보자. 위의 코드에서 page 지시자가 가진 contentType 속성의 문자셋을 UTF-8에서 EUC-KR로 수정했다.

속성 사용 예시 의미
isErrorPage <%@ page language="java" contentType="text/html; charset=EUC-KR"
    isErrorPage="true"%>
현재 페이지가 에러 처리 전용 페이지임을 설정한다.
errorPage <%@ page language="java" contentType="text/html; charset=EUC-KR"
    errorPage="errors/boardError.jsp"%>
에러가 발생했을 때 서비스 할 JSP 페이지를 지정한다.
import <%@ page language="java" contentType="text/html; charset=EUC-KR"
    isErrorPage="true"
import = "java.util.Date"%>
변환된 서블릿 클래스에서 import할 클래스를 설정한다.
session <%@ page language="java" contentType="text/html; charset=EUC-KR"
    errorPage="errors/boardError.jsp"
session = "true"%>
현재 페이지에서 세션 객체를 사용할 것인지 설정한다.

isErrorPage 속성은 특정 JSP를 에러 전용 페이지로 설정할 때 사용하는 속성이고, errorPage는 실행 중인 JSP 파일에서 에러가 발생하면 브라우저에 전송할 에러페이지를 지정할 때 사용한다. 에러가 발생했을 시 에러페이지로 이동할 때는 redirect 방식이 아닌 forward 방식이다. 

import는 JSP에서 다른 클래스를 사용 할 때 사용하는 속성이다. 

session은 HttpSession과 관련된 속성으로서 기본값은 true다. session 속성값이 true면 JSP 파일이 서블릿으로 변환할 때 session 변수가 자동으로 선언되고 세션 객체가 자동으로 할당된다.만약 session 속성을 false로 설정하면 HttpSession 객체는 자동으로 제공되지 않는다. 

scriptlet   (<%      %>)

수행문은 JSP에서 가장 많이 사용하는 스크립트 이다. HTML 태그 중심의 JSP를 동적 파일로 만들어주는 핵심 태그이다. 

expression  (<%=     %>)

표현식을 이용하면 변수에 저장된 값이나 메소드가 리턴한 값을 브라우저특정 위치에 표현할 수 있다.

EL과 JSTL

EL(Expression Language)와 JSTL(JSP Standard Tag Library)을 이용하여 JSP 파일에서 자바 코드(JSP script)를 완벽하게 제거할 수 있도록 지원한다. 

EL의 기본구문은 다음과 같이 달러 기호 뒤에 표현식을 블록으로 감싼다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<!-- 표현식 : ${} -->
	정수 : ${35}<br>
	실수 : ${35.8}<br>
</body>
</html>

EL의 내장객체는 다음과 같다(밑줄 친 메서드가 특히 많이 쓰인다.)

메서드 명 기능
pageScope page scope에 접근
requestScope request scope에 접근
sessionScope session scope에 접근
applicationScope application Scope에 접근
param parameter 값을 얻어올때
paramValues parameter 값 배열로 얻어 올때
header 헤더 값을 얻어올 때
headerValues 헤더값 배열로 얻어올때
cookie ${cookie.key 값.value값}으로 cookie값 조회
initParam 초기 parameter 조회
pageContext page Context 객체를 참조할 때

 

JSTL은 JSP에서 제공하는 표준 태그로 이해할 수 있다. JSTL 역시 EL과 마찬가지로 scriptlet(JSP)에 포함된 상당수의 자바 코드를 제거하는 데 사용된다. 아래 다섯가지 태그중 core하고 fmt를 제외한 나머지는 사용할 일이 거의 없다.

JSTL 태그 taglib 지시자 설정
(JSP 페이지에 선언)
기능
core <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix="c"%> 변수 선언이나 조건 제어, 반복 제어등을 제공한다. 그리고 페이지 이동을 비롯하여 URL 관련 기능을 제공한다.
xml <%@ taglib uri = "http://java.sun.com/jsp/jstl/xml" prefix="x"%> XML 파일을 처리하는 기능을 제공한다.
fmt <%@ taglib uri = "http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 날짜, 숫자, 문자열 데이터의 포맷을 지정할 수 있으며, 다국어를 지원한다.
sql <%@ taglib uri = "http://java.sun.com/jsp/jstl/sql" prefix="sql"%> 데이터베이스 연동과 관련된 기능을 제공한다
functions <%@ taglib uri = "http://java.sun.com/jsp/jstl/functions" prefix="fn"%> 문자열과 관련된 다양한 함수를 제공한다.

 

 

참고)

https://hunit.tistory.com/203

 

Jsp〃[EL]과 [JSTL] 한방에 정리 + Core

JSP파일에 자바형식의 코드를 사용하면 불편한 점을 한방에 해결할 수 있는 EL (Expression Language) 과 JSTL (Jsp Standard Tag Library)를 이용해 코드를 간결하게 사용하는 방법에 대해 포스팅하도록 하겠습

hunit.tistory.com

 

'개발 공부 > Spring framework' 카테고리의 다른 글

[spring] spring MVC - (2.Controller)  (0) 2023.04.17
[spring] spring MVC- (1.Model)  (0) 2023.03.23
[JSP] JDBC  (0) 2023.03.01
[JSP] XML과 Annotation  (0) 2023.02.28
[JSP] HTTP와 Servlet  (0) 2023.02.26
Comments