[Server] JSP에 대하여
by 캐떠린JSP
: Servlet과 JSP는 같은 기술이다. But JSP는 개발자에게 개선된 환경(개발 편의성)을 제공하기 때문에 본격적인 수업은 JSP에서 진행할 예정이다!
- 특징 1: jsp 파일 최상단에 페이지 지시자가 추가되었다.
- 특징 2: 가상 주소 생성 없이 실행이 가능하다.
✳ Servlet vs JSP 비교
- Servlet 기반 → Java 베이스(
*.java
)
- 장점: 자바를 그대로 사용할 수 있다.
- 단점: 클라이언트 코드를 작성하기가 불편하다. → 문자열 처리
- JSP 기반 → HTML 페이지 베이스(
*.jsp
)
- 장점: HTML 기반 이기 때문에 클라이언트 코드를 작성하기가 쉽다. + 추가로 자바 코드 작성이 가능하다.
- 단점: 자바 코드를 작성하기가 불편하다.
JSP 구성 요소
- JSP 지시자, JSP Directive
- 형식:
<%@ %>
- 종류
- page 지시자
- include 지시자
- taglib 지시자
- 형식:
- 스크립트 요소, Scripting Elements
- 형식:
<% %>
- 종류
- 스크립틀릿
- 익스프레션
- 선언부(declaration)
- 형식:
- 액션 태그, Action Tags
- 형식:
<jsp:XXX>
,<c:XXX>
- 종류
- 기본 액션 태그
- 확장 액션 태그
- 사용자 정의 액션 태그
- 형식:
1.1 page 지시자
- 형식:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- JSP 페이지의 항상 첫번째 라인의 위치(첫번째 라인이 아니어도 에러가 발생하진 않는다.)
- 1개 이상 작성이 가능하다.(필요에 따라 여러 페이지 지시자 생성 가능)
- JSP의 실행 환경(JSP 컨테이너 == 톰캣)에게 현재 페이지의 정보를 알려준다.
- 속성
language="java"
: JSP 페이지에서 사용할 서버 프로그래밍 언어 지정contentType="text/html; charset=UTF-8"
: 현재 JSP 내용물에 대한 기술 → 브라우저에게 전달할 HTML 페이지text/html
: MIME Type → HTML 문서 → 브라우저에게 전달charset
: 돌려줄 HTML 문서의 인코딩 → 브라우저에게 전달
pageEncoding="UTF-8"
: JSP 페이지 인코딩import="java.util.Calendar"
: 자바의 import 구문과 동일한 역할, 패키지/클래스 참조속성
1.2 include 지시자
- 형식:
<%@ include file="URL" %>
- 지정된 URL → 페이지(JSP, HTML, Text 등)을 현재 JSP 페이지의 일부로 사용하는 기능
- 조각 페이지
- 톰캣이 jsp 파일을 읽다가 include 지시자를 만나는 순간, (JSP 지시자를 제외한)모든 내용을 가져온다.
- ⚠️ 주의사항 : 조각으로 삽입할 내용을 제외한 부분은 삭제해야한다.(JSP 지시자는 존재해야 함!)
2.1 스크립트릿, Scriptlet
- 형식:
<% %>
- HTML 페이지 영역에서(JSP) Java를 사용 가능하게 영역을 제공 →
<% 자바 영역 %>
- 가장 일반적으로 많이 사용되는 스크립트 요소
- 스크립트릿 내에서 선언된 변수는 지역 변수로 선언이 되고 메서드 선언은 할 수 없다.(메서드 안에 메서드를 선언한 것이기 때문)
- 되도록 언어가 섞이지 않게 코딩하기 위해 스크립트릿을 상단(JSP 지시자 아래)으로 올려서 코딩한다.
2.2 표현식/익스프레션, Expression
- 형식:
<%= %>
- 자바의 값(데이터)을 HTML 문서에 출력하는 역할(System.out.print와 유사한 역할)
- 동적인 jsp 페이지를 브라우저로 표현하기 위한 요소
- 스크립트릿과 달리 변수나 메서드를 출력할 때 세미콜론(;) 표기X (→ 내부적으로 servlet 코드로 변환될 때 자동으로 세미콜론이 붙기 때문)
- 브라우저가 보게될 소스를 만드는 것!!!
- 표현식은 화면에 찍는게 아니라 소스페이지에 소스를 찍는 것!!!
- 자바 입장에서는 해당 변수를 HTML에 찍는지, CSS에 찍는지 구분하지 않는다. 이 말은 즉 자바 변수는 위치에 상관 없이 어디든 다 찍을 수 있다.
- 스크립트릿 + 익스프레션 [사용 예제1]
<%@ 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 a = 10;
int b = 20;
int c = a + b;
String name = "홍길동";
%>
<!-- 화면에 출력을 하기 위해서 -->
<table border="1" width="300">
<tr>
<th>a</th>
<td><%= a %></td>
</tr>
<tr>
<th>b</th>
<td><%= b %></td>
</tr>
<tr>
<th>c</th>
<td><%= c %></td>
</tr>
</table>
</body>
</html>
- [사용 예제2]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
int dan = 5;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- ex04.jsp -->
<h1>구구단</h1>
<%
//스파게티 코드(돌돌 꼬여있어서..)
for (int i=1; i<=9; i++) {
%>
<div><%= dan %> x <%= i %> = <%= dan * i %></div>
<%
}
%>
</body>
</html>
2.3 선언부
- 형식:
<%! %>
- 멤버 변수와 멤버 메서드를 선언하는 영역
- But 안타깝게도 실효성이 떨어지기 때문에 실제로 여기서 선언 작업을 하지 않는다. 아래와 같은 이유로 일반 자바 클래스를 활용하는 일이 더 많다.
❓ Why? 왜 선언부에서 선언 작업을 하지 않을까?
- 코드 관리가 애매하기 때문이다.
- 선언한 메서드의 호출 영역이 해당 JSP 페이지 내로 제한되기 때문이다. (JSP 파일 1장이 1개의 클래스이나, 클래스명을 모른다. 톰캣이 클래스명을 자동으로 생성하기 때문!)
💡 그렇다면 사이트 내 모든 페이지에서 쓸 수 있는 메서드를 만드는 방법은?
- 일반 자바 클래스를 생성하고 그 안에 메서드를 선언한다.
- 스크립트릿에서 해당 클래스의 객체를 생성 및 임포트 후 사용한다.
❓ 그렇다면 스크립트릿에서 선언한 것과 선언부에서 선언한 것은 무슨 차이가 있을까?
- 스크립트릿
- 변수 선언: 지역 변수(어떤 메서드의 영역의 지역변수)
- 메서드 선언: 불가 → 이미 스크립틀릿 자체가 어떤 메서드의 구현부이기 때문
- 선언부
- 변수 선언: 클래스 멤버 변수
- 메서드 선언: 가능 → But 해당 메서드의 선언 영역은 오직 해당 JSP 페이지 내에서만 가능하다.
'Server' 카테고리의 다른 글
[Server] 데이터 입력 및 데이터 수신 과정 톺아보기 (0) | 2023.10.29 |
---|---|
[Server] 정적 페이지 vs 동적 페이지 (2) | 2023.10.22 |
[Server] Servlet 관련 각종 Error Case (0) | 2023.10.22 |
[Server] Servlet(서블릿) (0) | 2023.10.22 |
[Server] 개발 환경 Setting :: Apache Tomcat, Eclipse (0) | 2023.10.22 |
블로그의 정보
All of My Records
캐떠린