All of My Records

[Server] JSP에 대하여

by 캐떠린

JSP

: Servlet과 JSP는 같은 기술이다. But JSP는 개발자에게 개선된 환경(개발 편의성)을 제공하기 때문에 본격적인 수업은 JSP에서 진행할 예정이다!

  • 특징 1: jsp 파일 최상단에 페이지 지시자가 추가되었다.
  • 특징 2: 가상 주소 생성 없이 실행이 가능하다.

 

✳ Servlet vs JSP 비교

  1. Servlet 기반 → Java 베이스(*.java)
    • 장점: 자바를 그대로 사용할 수 있다.
    • 단점: 클라이언트 코드를 작성하기가 불편하다. → 문자열 처리
  2. JSP 기반 → HTML 페이지 베이스(*.jsp)
    • 장점: HTML 기반 이기 때문에 클라이언트 코드를 작성하기가 쉽다. + 추가로 자바 코드 작성이 가능하다.
    • 단점: 자바 코드를 작성하기가 불편하다.

 

 

 

JSP 구성 요소

  1. JSP 지시자, JSP Directive
    • 형식: <%@ %>
    • 종류
      • page 지시자
      • include 지시자
      • taglib 지시자
  2. 스크립트 요소, Scripting Elements
    • 형식: <% %>
    • 종류
      • 스크립틀릿
      • 익스프레션
      • 선언부(declaration)
  3. 액션 태그, 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 컨테이너 == 톰캣)에게 현재 페이지의 정보를 알려준다.
  • 속성
    1. language="java"
           : JSP 페이지에서 사용할 서버 프로그래밍 언어 지정
    2. contentType="text/html; charset=UTF-8"
           : 현재 JSP 내용물에 대한 기술 → 브라우저에게 전달할 HTML 페이지
      • text/html: MIME Type → HTML 문서 → 브라우저에게 전달
      • charset: 돌려줄 HTML 문서의 인코딩 → 브라우저에게 전달
    3. pageEncoding="UTF-8"
           : JSP 페이지 인코딩
    4. 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? 왜 선언부에서 선언 작업을 하지 않을까?

  1. 코드 관리가 애매하기 때문이다.
  2. 선언한 메서드의 호출 영역이 해당 JSP 페이지 내로 제한되기 때문이다. (JSP 파일 1장이 1개의 클래스이나, 클래스명을 모른다. 톰캣이 클래스명을 자동으로 생성하기 때문!)

💡 그렇다면 사이트 내 모든 페이지에서 쓸 수 있는 메서드를 만드는 방법은?

  1. 일반 자바 클래스를 생성하고 그 안에 메서드를 선언한다.
  2. 스크립트릿에서 해당 클래스의 객체를 생성 및 임포트 후 사용한다.

❓ 그렇다면 스크립트릿에서 선언한 것과 선언부에서 선언한 것은 무슨 차이가 있을까?

  1. 스크립트릿
    • 변수 선언: 지역 변수(어떤 메서드의 영역의 지역변수)
    • 메서드 선언: 불가 → 이미 스크립틀릿 자체가 어떤 메서드의 구현부이기 때문
  2. 선언부
    • 변수 선언: 클래스 멤버 변수
    • 메서드 선언: 가능But 해당 메서드의 선언 영역은 오직 해당 JSP 페이지 내에서만 가능하다.

블로그의 정보

All of My Records

캐떠린

활동하기