본문 바로가기

Backend/JSP

JSP (Java Server Page) 기본 개념; 구조; 태그; 기본 구성 요소

JSP (Java Server Page)

  • Java 기반
  • HTML 문서 내에 자바 코드를 삽입해서 웹 서버에서 동적으로 웹 페이지를 생성해서 클라이언트(웹 브라우저)에게 반환해 주는 언어
  • 서버 사이드 스크립트 언어
  • JSP를 통해 HTML과 동적으로 생성된 컨텐츠(DB 연동된 실시간 데이터)를 혼합해서 사용 가능
  • Servlet을 보완한 스크립트 방식 표준 언어
  • Servlet 기능 + 추가 기능
  • JSP(.jsp)는 실행되면서 Servlet(.java)으로 변환되어 컴파일 되서 클래스 파일(.class) 파일로 만들어져 실행
  • View를 담당하는 페이지로 사용
  • 점차 JSP 페이지에서 자바 코드가 사라지고 있는 추세

JSP와 Servlet (서블릿) 차이점

  • JSP : HTML 내부에 Java 소스 코드가 들어 있는 형식 (사용하기 편리하고 쉬움)
  • Servlet : Java 코드 내에 HTML 코드가 들어 있어서 읽고 쓰기 불편 (자바 코드에 의존적)

JSP 페이지 구조

  • JSP = 정적 페이지 + 동적 페이지
  • 정적 페이지 구현 : HTML 태그
  • 동적 페이지 구현
    • <%@   %>
    • <%   %>
    • <%!   %>
    • <%=   %>
    • 등의 스크립트 사용

JSP 태그

  • <% 로 시작하고 %> 로 종료
  • @, !, =, – 문자를 추가하여 태그의 의미 부여
구분 태그 표기법 설명
지시어 <%@    %> JSP 페이지의 속성 지정
선언부 <%!    %> 변수 선언 및 메소드 정의
표현식 <%=    %> 계산식, 함수 호출 결과 등 출력
스크립트릿 <%    %> 자바 코드 기술
주석 <%--    --%> JSP 페이지에 설명 추가
액션 태그 <jsp:action>    </jsp:action> 자바 빈, include / foward / param 등

JSP 페이지의 기본 구성 요소

JSP 페이지 내용

  • HTML 문서 내용 + JSP 태그 + 자바 코드

JSP 페이지 구성

  • 지시어 : page, include, taglib
  • 스크립트 요소
    • 선언문 (Declaration)
    • 표현식 (Expression)
    • 스크립트릿 (Scriptlet)
  • 액션 태그

 

지시어

  • JSP 페이지의 전체적인 속성을 지정할 때 사용
  • JSP 컨테이너에게 전달하는 JSP 페이지 관련 메시지
  • <%@ 지시어 속성1=값, 속성2=값, … %>
  • 지시어 : page, include, taglib 등
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

 

page 지시어 : <%@ page  %>

  • JSP 페이지에 대한 속성 설정
  • language="java" 
  • contentType="text/html; charset=UTF-8"
  • pageEncoding="UTF-8"

include 지시어 : <%@ include %>

  • <%@ include file=”포함될 파일의 url” %>
  • 포함시킬 파일명을 file 속성의 값으로 기술
  • 공통적으로 포함될 내용을 가진 파일을 해당 JSP 페이지 내에 삽입하는 기능 제공
  • 중첩 지정 가능 : 한 JSP 페이지에서 다른 JSP 페이지를 포함하거나, 포함된 JSP 페이지가 또 다른 JSP 페이지에 중첩 포함 가능
  • 두 개의 파일이 하나의 파일로 합쳐진 후 하나의 파일로서 변환되고 컴파일됨

include 지시어 예제

top.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="java.util.*" %>
<%
	Date date = new Date();
%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>top.jspe</title>
	</head>
	<body>
		<font color="blue" size="3pt">
			top.jsp입니다.<p/>
			<%= date.toLocaleString() %>
		</font>
	</body>
</html>

 

bottom.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>bottom.jsp</title>
	</head>
	<body>
		<font color="red" size="3pt">
			top.jsp입니다.<p/>
			작성자<b><%-- <%= name %> --%></b> 입니다
			<!-- name : 선언되지 않은 변수이기 때문에 오류 발생 -->
			<!-- 다른 페이지에 포함되어서 선언되어 있는 name 변수 사용 시 오류 없음 -->
			<!-- 현재 오류가 있으므로 오류 있는 부분은 주석 처리 해 둔 상태 -->
		</font>
	</body>
</html>

 

include.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!
	String name = "홍길동";
%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>include 지시어 예제</title>
	</head>
	<body>
		<!-- top -->
		이 부분에 top.jsp의 내용이 포함될 것입니다.<p>
		<%@ include file="top.jsp" %>
		<hr>
		
		<!-- 본문 -->
		<h3>본문입니다</h3>
		이 부분은 include.jsp의 내용입니다<p>
		<hr>
		
		<!-- bottom -->
		이 부분에 bottom.jsp의 내용이 포함될 것입니다<p>
		<%@ include file="bottom.jsp" %>
	</body>
</html>

 

하나의 페이지로 합쳐지기 때문에 top2.jsp, bottom2.jsp와 같이 필수적인 내용만 포함하도록 작성하여 include 해도 됨

top2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="java.util.*" %>
<%
	Date date = new Date();
%>
		<font color="blue" size="3pt">
			top.jsp입니다.<p/>
			<%= date.toLocaleString() %>
		</font>

 

bottom2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
		<font color="red" size="3pt">
			top.jsp입니다.<p/>
			작성자<b><%-- <%= name %> --%></b> 입니다
			<!-- name : 선언되지 않은 변수이기 때문에 오류 발생 -->
			<!-- 다른 페이지에 포함되어서 선언되어 있는 name 변수 사용 시 오류 없음 -->
			<!-- 현재 오류가 있으므로 오류 있는 부분은 주석 처리 해 둔 상태 -->
		</font>

 

include2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!
	String name = "홍길동";
%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>include 지시어 예제</title>
	</head>
	<body>
		<!-- top -->
		이 부분에 top.jsp의 내용이 포함될 것입니다.<p>
		<%@ include file="top2.jsp" %>
		<hr>
		
		<!-- 본문 -->
		<h3>본문입니다</h3>
		이 부분은 include.jsp의 내용입니다<p>
		<hr>
		
		<!-- bottom -->
		이 부분에 bottom.jsp의 내용이 포함될 것입니다<p>
		<%@ include file="bottom2.jsp" %>
	</body>
</html>

 

예제 1, 2 페이지 소스보기 결과 비교

include1.jsp
include.jsp

 

taglib 지시어 : <%@ taglib %>

  • <%@ taglib prefix = “c” url =”…….” %>
  • 커스텀 태그를 JSP 페이지 내에 사용할 때 이용
  • 뒤에서 상세하게 다룸

스크립트 요소

선언문 (Declaration)

  • JSP 페이지의 멤버 필드(변수)나 메소드를 정의할 때 사용
  • 선언문에서 선언된 변수는 페이지 전체에서 사용 (전역변수의 의미)
  • 형식 : <%! 선언 %>
<%! int a = 10; %>

<%!
  int x = 100;
  String str = “문자열”;
%>

 

표현식 (Expression)

  • 변수 값, 계산 결과, 메소드 호출 결과를 직접 출력하기 위해 사용
  • 형식 : <%= 수식 %>
<%= name %>

 

스크립트릿 (Scriptlet)

  • 자유롭게 자바 코드를 기술할 수 있는 영역
  • <%  자바코드 %>
  • 스크립트릿에서 선언된 변수는 지역변수의 개념
  • 선언된 이후부터 사용 가능
<%  String address = “경기”; %>

 

(+) 주의 : 메소드 선언 -> 반드시 선언부에서 정의 (스크립트릿 영역에서 선언 X, 스크립트릿 영역에서 선언 시 오류)

변수 선언 예제 : variable.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>변수 선언 예제</title>
	</head>
	<body>
		<%!
			//선언문 : 변수 선언 및 초기화만 가능
			int x = 10; // 변수 선언 및 초기화
			long y; // 변수 선언만
			
			// y=100; // 이 경우 오류 발생 -> 선언부에서는 값을 지정할 수 없음. 선언과 동시에 초기화만 가능
			
			float floatValue = 3.14f;
			double doubleValue = 3.14;
			
			char ch = 'a';
			String str = "abcd";
			
			boolean b = true;
		%>
		<%
			String name = "홍길동";
			y=100; // 스크립트릿 영역에서 값 지정
		%>
		
		<h3>변수 값 출력</h3>
		x : <%= x %><br>
		y : <%= y %><br>
		floatValue : <%= floatValue %><br>
		doubleValue : <%= doubleValue %><br>
		ch : <%= ch %><br>
		str : <%= str %><br>
		b : <%= b %><br>
		name : <%= name %><br>
	</body>
</html>

 

선언문 예제 : method.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>선언문 예제 - 메소드 정의(선언)</title>
	</head>
	<body>
		<h3>선언문 예제 - 메소드 정의</h3>
		<%!
			String id = "abcd";
		
			public String getId() {
				return id;
			}
		%>
		id : <%= id %><br>
		getID 메소드 호출 결과 : <%= getId() %>
	</body>
</html>

 

표현식 예제 : expression.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>표현식 예제</title>
	</head>
	<body>
		<%!
			int add(int a, int b){
				return a*b;
			}
		
		int x=10, y=20;
		%>
		
		x = <%= x %><br>
		y = <%= y %><br>
		add(x,y) = <%= add(x,y) %><br>
	</body>
</html>

 

 

'Backend > JSP' 카테고리의 다른 글

scope : 스코프 우선순위  (0) 2021.12.31
JSP 발전 과정 및 표현 언어 : EL (Expression Language)  (0) 2021.12.31
액션 태그  (2) 2021.12.30
JSP 제어문  (0) 2021.12.30
JSP 내장 객체  (0) 2021.12.30