학습목표
JSP 파일 구조에 대해 설명할 수 있다.
Script Tag 사용 방법에 대해 설명할 수 있다.
JSP(Java Server Page)
- 프로그램을 작성하는 하나의 파일 단위
- Servlet 기반의 서버 스크립트 기술
- Servlet 특징을 대부분 유지
- HTML을 자바 클래스가 아닌 스크립트(HTML 파일 형식)로 작성
- 클라이언트 응답과 관련된 UI 전송 시 HTML 스타일로 작성
Servlet은 HTML을 자바 클래스 내에서 작성하게 됨으로 개발생산성 및 유지보수가 어려움
(200줄, 300줄 ... 쓰다보면 코드가 너무 복잡해진다.)
JSP 특징
- 비즈니스 모듈 분리로 재사용성이 높음(JavaBeans)
- 개발생산성 및 유지보수성 우수
- 많은 사용자의 요청 처리(Multi-Thread)
- 프로그램 간의 원활한 데이터 공유(내장객체 이용)
- 기능 확장의 편의성(Custom Tag & JSTL)
Servlet vs JSP
JSP에 대한 오해
- JSP를 이용하면 Servlet은 필요 없지 않을까?
- 자바 기반의 웹 기술에서 Servlet과 JSP는 역할이 구분되어 사용됨
- JSP는 속도가 느리다?
- 한 번 실행된 JSP는 Servlet으로 변환되어 컨테이너 메모리에 적재되기 때문에 재실행 시에 속도가 보장된다.
Servlet과 JSP 비교
작성방법에 차이가 있을 뿐 동작할 때는 동일함
Servlet | JSP | |
중심언어 | 자바(Java) | 태그 |
MVC 역할 | Control | View |
활용 | Business-Logic | 화면구성 |
JSP 파일 위치
JSP는 확장자가 jsp로 작성되고 HTML 파일과 동일 위치에 작성됨
Servlet이 만들어져 있는 곳에 위치하는 것이 아니라 일반 HTML이 들어가는 곳에 JSP 파일이 작성됨
JSP 처리 과정
Servlet으로 컴파일 되어 메모리에 적재되며 이후의 과정은 Servlet과 동일함
JSP는 그대로 서비스하지는 않음 --> 자동으로 Servlet으로 바꿔서 실행한다.
작성된 JSP 파일 --> 자동으로 컨테이너에 의해 Servlet으로 변환
<html>
<body>
hello JSP
</body>
</html>
클라이언트 화면구성을 위한 html을 명시하기에는 JSP가 쉬움
Script Tag
1. JSP 태그 종류
- JSP 내에 클라이언트의 요청에 의해 동적으로 실행되어 결과를 만들어 내기 위해 만드는 것
- JSP는 Servlet과 달리 태그 중심의 언어
- 태그의 종류는 세 가지로 구성되어 있음
- HTML Tag
- Script Tag : 태그 내에 자바 코드 삽입
- Action Tag : XML 규칙대로 작성되는 태그
2. Script Tag <% %>
- 지시문 : <%@ page contentType="text/html;charset=euc-kr"%>
- 주석문 : <%-- JSP 주석문 입니다. --%>
- 수행문 : <% String name = request.getParameter("name"); %>
- 선언문 : <%! Vector members; %>
- 연산문 : <%= getName() %>
3. page 지시문
- JSP 페이지가 Servlet으로 변환될 때, 추가할 코드를 Servlet Container에게 지시
- <%@와 %> 사이에 작성
- <%@ page 까지 명시한 다음 속성을 나열하여 필요한 만큼 사용 가능
- language : default 값 = java (보통 java라 거의 안씀)
- ★ import : JSP 페이지에서 사용할 클래스 선언함
- session : session 객체를 생성할 것인지 여부, default = true
- buffer : response를 버퍼링할 것인지 여부, default = 8kb
- autoFlush : 버퍼가 찾을 때 버퍼의 내용을 출력하여 비울지를 설정함, default = true
- isThreadSafe : false로 설정하면 Single-Thread, default = true
- info : 작성자 등의 부가 정보
- errorPage : JSP에서 Error 발생 시 처리 페이지 작성
- isErrorPage : 속성 값이 true 인 경우 exception 객체를 사용하여 예외처리 하는 페이지를 만듬, default = false
- contentType : Servlet 응답의 MIME Type을 지정
컨테이너가 Servlet으로 변형시킬 때 이러한 설정 정보가 적용되게끔 변형
<%@ page import="java.util.Date" %>
<%@ page session="false" %>
<%@ page errorPage="error.jsp" %>
<%@ page contentType="text/html;charset=euc-kr" %>
<HTML>
<HEAD>
<TITLE> 지시문 예제 </TITLE>
</HEAD>
<BODY>
<CENTER><H3> 여러 지시문 테스트 </H3>
<% Date d = new Date(); %>
현재 날짜 : <%= d.toLocaleString() %>
</CENTER>
</BODY>
</HTML>
4. include 지시문
외부 파일을 포함하기 위한 태그
5. 수행문
- <%와 %> 사이에 작성되는 프로그램 코드
- Servlet으로 변환 시 service 메서드에 포함되는 코드
- JSP 페이지에 특정 자바 코드를 담고 싶을 때 사용
6. 연산문
- <%=과 %> 태그 사이에 작성되는 프로그램 코드
- 변수 값이나 메서드 실행 결과 값을 출력할 목적으로 사용 (Servlet에서는 PrintWriter)
- Servlet으로 변환 시 service 메서드에 포함되는 코드
<%
String name = request.getParameter("name");
String email = request.getParameter("email");
Date date = new Date();
%>
이름 : <%= name %><BR>
E-mail : <%= email %><BR>
오늘은 <%= date.getDate() %>일 입니다.
7. 주석문
유형 | 사용형태 |
HTML 주석문 | <!--주석문입니다.-->, <!--<%= username%>의 주석문입니다.--> |
JSP 주석문 | <%-- 주석문입니다. --%> 주석부분이 Servlet에 포함되지 않음 |
Script 주석문 | //, /* ... */ |
8. 에러처리
- JSP 페이지에서 예외 처리 방법
- 직접 수행문 내에서 try ~ catch 구문 이용
- error 처리 전용 페이지를 통해서 예외를 forwarding
- try catch 구문 이용
<% // ArrayIndexOutOfBoundsException 발생
String[] days = {"월", "화", "수", "목", "금"};
try {
%>
<center> 내가 제일 좋아하는 요일은 <%= days[5]%>요일 입니다.</center>
<% } catch(ArrayIndexOutOfBoundsException e) { %>
프로그램 처리 과정에서 문제 발생했습니다.<br>
죄송합니다. 곧 조치하겠습니다.<hr>
<%=e.toString() %>
<% }%>
- 에러 페이지 이용
page 지시문을 이용하면 error 처리 전용 페이지로 error 처리 작업을 forwarding 할 수 있음
지시문을 이용해 에러 전용 페이지라고 선언해야 함 <%page errorPage="error.jsp"%>
9. 선언문
변수나 메서드를 변환된 Servlet의 멤버로 선언할 때 사용
JSP의 선언문 | Servlet으로 변환된 저장파일 |
변수 | field의 멤버 변수 |
메서드 | service() 메서드와 동급의 메서드 |
<%!// 멤버변수 선언
Date date;
String name;
String email;
%>
<%!// 멤버메서드 선언
public int getLength() {
int len = email.length();
return len;
}
%>
실습
head.jsp
<CENTER>
<FONT COLOR="GREEN">
<H3>include 지시문 예제.....</H3>
</FONT>
</CENTER>
include가 잘 작동되는 지만 테스트 해보는 파일
main.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="java.util.Date"%>
<%@ page session="false"%>
<%!
Date date;
String name;
String email;
%>
<%!
public int getLength() {
int len=email.length();
return len;
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>스크립트 태그 테스트</h1>
<%
date = new Date();
%>
현재 날짜 : <%=date.toLocaleString() %>
<br/>
<%@ include file="head.jsp" %>
<br/>
<%
name = request.getParameter("name");
email = request.getParameter("email");
%>
name : <%=name %><br/>
email : <%=email %><br/>
<%=date.getDate() %>열 입니다. 이메일의 길이는 <%=getLength() %>입니다.
</body>
</html>
main.jsp를 구동하면 JSP 페이지 내에 클라이언트 데이터가 전달되지 않았을 때의 Exception 처리를 하지 않았기 때문에 500 오류 페이지가 나온다. url 뒤에 임의로 id와 email 값을 넣어서 입력해주면 정상적으로 작동된다.
include에 의해 head.jsp 내용 확인 가능
name=kkang&email=a@a.com
'온라인 강좌 > JSP & Servlet 활용' 카테고리의 다른 글
11차시 Action Tag와 JSP Beans (0) | 2023.07.01 |
---|---|
10차시 JSP 내장 객체 (0) | 2023.06.30 |
8차시 Servlet Filter와 Listener (0) | 2023.06.30 |
7차시 상태 정보 활용 (0) | 2023.06.30 |
6차시 Servlet 설정 (0) | 2023.06.29 |