Servlet = java 기반
JSP = html 기반
Servlet | JSP |
자바 코드 안에서 전체 HTMl 페이지를 생성 | HTML 코드 안에서 필요한 부분만 자바 코드를 스크립트 형태로 추가 |
변수 선언 및 초기화가 반드시 선행되어야 함 | 자주 쓰이는 기능을 내장 객체로 제공하여 즉시 사용할 수 있음 |
Controller를 만들 때 사용 | 처리된 결과를 보여주는 View를 만들 때 사용 |
- 지시어: 해당 JSP 페이지의 처리 방법을 JSP 엔진에 '지시'해주는 역할을 함
- <%@ 지시어 종류 속성1="값1" 속성2="값2" ... %>
- page 지시어: JSP 페이지에 대한 정보 설정 (p.64)
-
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
- language: 스크립팅 언어로 자바 사용
- contentType: 문서의 타입, 즉 MIME 타입은 text/html이고, 캐릭터셋은 UTF-8
- pageEncoding: 소스 코드의 인코딩 방식은 UTF-8
- include 지시어: 외부 파일을 현재 JSP 페이지에 포함. 반복되는 부분을 별도 파일에 작성
- <%@ include file="포함할 파일의 경로" %>
- taglib 지시어: 표현 언어에서 사용할 자바 클래스나 JSTL을 선언
- EL(표현 언어)에서 자바 클래스의 메서드를 호출
- JSTL(JSP 표준 태그 라이브러리)을 사용하기 위한 지시어
-
- 스크립트 요소: HTML 파일 중간에 자바 코드를 삽입할 때 사용 (선언부, 스크립틀릿, 표현식)
- 선언부 (Declaration)
- 스크립틀릿이나 표현식에서 사용할 멤버 변수나 메서드를 선언함
- 서블릿으로 변환 시 _jspService() 메서드 '외부'에 선언됨
- <%! 메서드 선언 %>
- 스크립틀릿 (Scriptlet)
- JSP 페이지가 요청을 받을 때 실행되야 할 자바 코드를 작성하는 영역
- 서블릿으로 변환 시 _jspService() 메서드 '내부'에 그대로 기술
- <% 자바 코드 %>
- 선언부에서 정의한 메서드를 호출만 할 수 있을 뿐, 다른 메서드를 선언할 수는 없음
- 표현식(Expression)
- 실행 결과로 하나의 값이 남는 문장
- 상수, 변수, 연산자를 사용한 (수)식, '반환값이 있는 '메서드 호출 등이 모두 표현식에 속함
- <%= 자바 표현식 %>
- 선언부 (Declaration)
Page 지시어
page 지시어 - import 예제
예제1-1
webapp/01DirectiveScript/Import.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.text.SimpleDateFormat"%> <!-- 필요한 외부 클래스 import -->
<%@ page import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page 지시어 - import 속성</title>
</head>
<body>
<%
Date today = new Date(); // 외부 클래스 생성
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // 외부 클래스 생성
String todayStr = dateFormat.format(today);
out.println("오늘 날짜 : :" + todayStr); // 오늘 날짜를 웹 브라우저에 출력
%>
</body>
</html>
page 지시어 - errorPage, isErrorPage 속성
예제 1-2
webapp/01DirectiveScript/Error500.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page 지시어 - errorPage, isErrorPage 속성</title>
</head>
<body>
<%
int myAge = Integer.parseInt(request.getParameter("age")) + 10; //에러 발생
out.println("10년 후 당신의 나이는 " + myAge + "입니다."); // 실행되지 않음
%>
</body>
</html>
내장 객체인 request로부터 "age"라는 이름의 매개변수 값을 받아와 정수로 변환함.
최초 실행 시 매개변수가 없으므로 null 값이 전달되어 예외(에러)가 발생함.
고객에게는 해당 오류가 보이지 않도록 처리해야 함.
- try/catch를 사용하여 직접 에러 처리
- errorPage, isErrorPage 속성을 사용하여 디자인이 적용된 페이지로 대체함
try~catch 구문으로 직접 처리
예제1-3
webapp/01DirectiveScript/ErrorTryCatch.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>지시어 - errorPage, isErrorPage 속성</title>
</head>
<body>
<%
try { // 예외 발생 부분을 try/catch로 감싸기
int myAge = Integer.parseInt(request.getParameter("age")) + 10;
out.println("10년 후 당신의 나이는" + myAge + "입니다.");
} catch(Exception e) {
out.println("예외 발생 : 매개변수 age가 null입니다.");
}
%>
</body>
</html>
errorPage 속성으로 에러 페이지 지정
예제 1-4
webapp/01DirectiveScript/ErrorPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="IsErrorPage.jsp" %> <!-- 에러 페이지 지정 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page 지시어 - errorPage, isErrorPage 속성</title>
</head>
<body>
<%
int myAge = Integer.parseInt(request.getParameter("age")) + 10; //에러 발생
out.println("10년 후 당신의 나이는 " + myAge + "입니다."); // 실행되지 않음
%>
</body>
</html>
isErrorPage 속성을 설정한 에러 페이지 작성
예제 1-5
webapp/01DirectiveScript/IsErrorPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true" %> <!-- isErrorPage 속성에 true 지정 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page 지시어 - errorPage, isErrorPage 속성</title>
</head>
<body>
<h2>서비스 중 일시적인 오류가 발생하였습니다.</h2>
<p>
오류명 : <%=exception.getClass().getName() %><br />
오류 메시지: <%=exception.getMessage() %>
</p>
</body>
</html>
주소 표시줄에는 [ErrorPage.jsp]가 표시되지만, 화면에는 [IsErrorPage.jsp]의 내용이 출력됨
page 지시어 - trimDirectiveWhitespaces 속성
page 지시어로 생긴 공백 제거
예제 1-6
webapp/01DirectiveScript/TrimWhitespace.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page 지시어 - trimDirectiveWhitespaces 속성</title>
</head>
<body>
<h2>page 지시어로 생긴 불필요한 공백 제거</h2>
</body>
</html>
page 지시어 - buffer, autoFlush 속성
버퍼와 플러시
예제 1-7
webapp/01DirectiveScript/AutoFlushTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" buffer="1kb" autoFlush="false"%> <!-- 버퍼 설정 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page 지시어 - buffer, autoFlush</title>
</head>
<body>
<%
for (int i = 1; i <= 100; i++) { // 버퍼 채우기
out.println("abcde12345");
}
%>
</body>
</html>
1kb를 넘기게 되어서, 에러 발생
include 지시어
공통 UI 요소를 담은 JSP 파일(포함될 파일)
예제 1-8
wepapp/01DirectiveScript/IncludeFile.jsp
<%@ page import="java.time.LocalDateTime"%>
<%@ page import="java.time.LocalDate"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
LocalDate today = LocalDate.now(); //오늘 날씨
LocalDateTime tomorrow = LocalDateTime.now().plusDays(1); //내일 날씨
%>
다른 JSP 파일을 포함하는 JSP 파일
예제 1-9
wepapp/01DirectiveScript/IncludeMain.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="IncludeFile.jsp"%>
<!-- 다른 JSP 파일 포함 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>include 지시어</title>
</head>
<body>
<%
//IncludeFile.jsp에서 선언한 변수 사용
out.println("오늘 날짜 : " + today);
out.println("<br/>");
out.println("내일 날짜 : " + tomorrow);
%>
</body>
</html>
스크립트 요소
스크립트 요소 활용
예제 1-10
wepapp/01DirectiveScript/ScriptElements.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! // 선언부(메서드 선언)
public int add(int num1, int num2) {
return num1 + num2;
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>스크립트 요소</title>
</head>
<body>
<% // 스크립틀릿(자바 코드)
int result = add(10,20);
%>
덧셈 결과 1 : <%= result %> <br/> <!-- 표현식(변수) -->
덧셈 결과 2 : <%= add(30,40) %> <!-- 표현식(메서드 호출) -->
</body>
</html>
[성낙현의 JSP 자바 웹 프로그래밍] 책 공부 기록
'Language > JAVA' 카테고리의 다른 글
[JSP] 게시판 만들기 따라하기 feat.동빈나 (0) | 2023.06.29 |
---|---|
[자바/스프링] MVC와 템플릿 엔진 (0) | 2023.02.13 |
[JSP] Java Server Pages (0) | 2022.03.10 |
[JSP] 프로젝트 생성 & JSP 파일 생성 (0) | 2022.03.09 |
[JAVA] 컬렉션즈 프레임워크 1~9 ArrayList, HashSet, Map (0) | 2022.02.14 |