JSP는 기본적으로 HTML을 기반으로 그 위에 자바 코드를 끼워 넣는 식으로 실행된다.
그래서 실제로는 대부분의 변수 선언, 메서드 선언, 로직 등 자바 언어로 짜게 된다.
하지만 자바 코드를 HTML 사이에 끼워 넣을 때 필요한 문법이 있다.
1. 지시어
<%@ %>
페이지 지시어로, 문서 전체에 적용되어야 할 내용을 입력한다.
JSP 내에서 JSP를 실행할 Container에게 해당 페이지를 어떻게 처리해야 되는지 설명하는 데 사용된다.
JSP 지시어는 page, include, taglib 이렇게 3가지로 분류한다.
1.1 page 지시어
<%@ page속성1=“값1” 속성2=“값2” ... %>
총 12가지의 속성을 지정할 수 있고, 하나의 지시어에 모두 넣어도 상관없고 분리하여 각각 하나씩 지정해도 상관없다.
하지만 import 속성을 제외하고 나머지는 한번 씩 지정할 수 있다.
1.2 include 지시어
특정한 JSP 파일이나 HTML 파일을 해당 JSP 페이지에 삽입할 수 있다. 특히, 공통되는 부분이 많이 사용될 경우 많이 사용한다.
만약, JSP 파일을 include 했을 때, include 되는 페이지가 Servlet으로 변환되어 결과가 포함되는 것이 아니라 소스코드 자체가 해당 JSP 페이지에 복사되어 더해진다. 그래서, 아무리 include가 많다고 하더라도 Servlet으로 변환되는 것은 한 번뿐이다.
1.3 taglib 지시어
JSTL이나 커스텀 태그 등 태그 라이브러리를 JSP에서 사용할 때 접두사를 지정하기 위해 사용한다.
taglib는 urt 속성, prefix 속성 두 가지로 나뉜다.
- uri 속성
: 태그 라이브러리에서 지정한 태그와 속성 정보를 저장한 Tag(Tag LibraryDescriptor) 파일이 존재하는 위치를 지정 - prefix 속성
: 사용할 커스텀 태그의 namespace를 지정
2. 스크립틀릿(Scriptlet)
"<% %>"으로 시작하고 끝나는 태그
Java 코드를 위한 각 코드에는 반드시 ; (세미콜론)가 필요
<% 스크립틀릿; %>
스크릿틀릿은 JSP 태그에서는 표현할 수 없는 작업을 Java 코드를 작성하고
자유로운 작업을 수행하는 경우에 사용한다.
스크립틀릿에서 선언된 변수는 요청 때마다 호출된다.
따라서 그 요청이 있을 때마다 변수의 값이 초기화된다.
<%@ 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>
<%! String name = "홍길동"; %>
<%! public int plus(int a, int b){ return a+b; } %>
<!-- 스크립트릿( 변수선언, 메서드 등에 대한 실행 가능 ) -->
<% int a = 5; %>
<% int b = 5; %>
<% plus(a,b); %>
<!-- 10 출력 -->
<% if(5>1){ System.out.println("5는 1보다 크다"); } %>
<!-- "5는 1보다 크다" 출력 -->
</body>
</html>
3. 선언
"<%! %>"는 변수, 메서드 등을 선언할 때 이용하는 태그
변수, 메서드 선언 시 반드시;(세미클론)가 필요
선언에서 선언된 변수, 메서드는 처음 요청이 있을 때 한 번만 호출된다.
따라서 계속되는 요구에도 변수의 값은 초기화되지 않고, JSP 컨테이너(Tomcat 등)를 다시 시작할 때까지 값이 유지된다.
<%@ 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>
<!-- 선언(선언만 가능) -->
<%! String name = "홍길동"; %>
<%! public int plus(int a, int b){ return a+b; } %>
</body>
</html>
4. 표현식
"<%= %>"는 변수, 메서드 등의 실행에 관한 부분을 맡아 그 결과를 표현
식에서는 ; (세미콜론)가 필요하지 않다.
식에서는 Java 코드를 작성하고 그 결과를 표시한다.
따라서 실행 결과를 반환 코드밖에 기술할 수는 없다.
<%@ 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>
<!-- 선언문(선언만 가능) -->
<%! String name = "홍길동"; %>
<%! public int plus(int a, int b){ return a+b; } %>
<!-- 구현부 (변수 선언, 변수 및 메서드에 대한 실행 가능) -->
<p><%= name %></p>
<!-- "홍길동" 출력 -->
<p><%= plus(5,5) %></p>
<!-- 10 출력 -->
</body>
</html>
다른 예시
<%@ 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>
<%! int num=0; %>
선언부에서 선언한 num: <%= num++ %>
<br><br>
<% int numS = 0; %>
스크립틀릿에 선언한 numS: <%= numS++ %>
</body>
</html>
실행결과
선언부에 선언한 num : 5
스클립틀릿에 선언한 numS: 0
Refresh를 눌렀을 경우
num의 숫자는 계속 올라가는 반면, numS의 숫자는 계속 0에 머물러 있다.
5. 주석
<%-- --%>
Java에서는 주석처리를 해줄 때 아래 코드블럭의 예시와 같이 슬래시를 두개 해주면 되었지만,
여기선 주석처리를 할 때 <%-- --%> 이 블럭 내부에 넣어줘야 한다.
'Spring' 카테고리의 다른 글
[Spring] MVC 구조 이해 (0) | 2022.11.01 |
---|---|
[JSP] EL 과 JSTL 정리 (0) | 2022.10.26 |
[Spring] DAO, DTO, VO, Entity 란? (0) | 2022.10.22 |
[JSP] Java Beans (0) | 2022.10.22 |
[JSP] Cookie (0) | 2022.10.20 |