JSP의 구성요소중 지시어(Directive)에 대해 알아보자
JSP에서 지시어의 종류는 3가지가 있다.
- Page 지시어
- Include 지시어
- tagblib 지시어
taglib지시어는 Model2에 대한 포스팅때 알아보고 이번 포스팅 즉 Model1 방식에서는 Page와 Include지시어를 알아보자.
Page 지시어 : JSP엔진에게 JSP파일에 대한 정보를 알려주는 역할
contentType
: MIME 타입을 명시. text/html,text/plain,text/xml등 image/jpg 등
language
: 사용하고 있는 언어
pageEncoding
: JSP페이지에서 사용하는 문자의 encoding을 지정할 때 사용. contentType의 charset의 설정과 동일하게 설정한다.
▲ .jsp파일을 만들면 항상 제일 윗행에 기본적으로 존재하는 3개의 page 지시어의 속성들이다. 위 속성들은 한 페이지에 한번씩만 사용가능 즉, 중복사용 불가하다.
import
: java의 라이브러리를 import시 사용. 중복 사용이 가능한 속성
▲우리가 java의 JRE System Library 에 있는 기능들을 사용할 때 import를 했었듯 동일한 기능이다.
info
: JSP파일에 대한 설명. 예] info= "page지시어에 대한 데모파일"
session
: 세션의 사용여부 지정. 예] "true"(기본값) or "false";
buffer
: 버퍼의 사용 여부 지정한다. "8kb"(기본값) or "none". none으로 지정시 jsp가 출력하는 내용을 버퍼에 보내지 않고 바로 웹브라우저로 전송하기때문에<jsp:forward>기능을 사용할 수 없다.
autoflush
: JSP 페이지의 내용들이 브라우저에 출력되기 전에 버퍼가 다 찼을 경우 자동 flush지정
예] "true"(기본값) or "false". false시 버퍼가 다 찼을 경우 예외를 발생시키고 작업을 중지
errorPage
: 에러발생 시 보여줄 페이지 지정.
isErrorPage
: 현재 JSP가 에러처리를 담당하는 페이지인가를 구분하는 속성. 예] "false"(기본값) or"true"
▲ 배포하기 위한 폴더인 webapp에 폴더를 하나만들고 error를 발생시킬 페이지(ErrorIndex.jsp)와 error발생 시 이동할 페이지(ErrorInfo.jsp)를 만들었다.
▲에러를 발생시킬 페이지에 page지시어 중 하나인 errorPage로 error가 나면 이동할 페이지를 등록해준다.
<%
//사용자가 입력한 값 받기]
String stringAge=request.getParameter("age");
//out.println("stringAge:"+stringAge);
int after10Years=-1;
String errorMessage="";
if(stringAge !=null){
//방법1]try~ catch로 직접 에러처리
/*
try{
after10Years=Integer.parseInt(stringAge)+10;
}
catch(NumberFormatException e){
errorMessage="나이는 숫자만...";
}*/
//방법2]page지시어의 errorPage속성 사용:try~catch 불필요
after10Years=Integer.parseInt(stringAge)+10;
}
%>
▲ page 지시어 밑에 error가 발생했을 때 처리할 방법을 위해 변수선언과 방법을 스크립트렛에 작성했다.
errorpage와 isErrorPag를 사용하지 않으면 try~catch로 처리해줘야 하지만 사용하면 에러페이지를 사용해서 처리할 수 있다.
현재 error를 발생시킬 페이지(ErrorIndex.jsp)의 body와 브라우저는 아래와 같다.
<body>
<div class="jumbotron jumbotron-fluid bg-warning">
<div class="container-fluid">
<h1>errorPage 및 isErrorPage속성</h1>
</div><!--container-fluid-->
</div><!--jumbotron-fluid-->
<div class="container">
<fieldset class="form-group border p-3">
<legend class="w-auto px-3">에러가 발생할 페이지</legend>
<form>
<div class="form-group">
<label for="age">나이를 입력하세요?</label>
<input class="form-control" type="text" name="age" id="age"/>
</div>
<input class="btn btn-success" type="submit" value="확인"/>
</form>
<% if(after10Years !=-1){ %>
당신의 10년후 나이는 <%=after10Years %>살 이군요.
<%} %>
<% if(errorMessage.length()!=0){ %>
<div class="alert alert-success mt-2">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>Not Number!</strong> <%=errorMessage %>.
</div>
<%} %>
</fieldset>
</div><!-- container -->
</body>
▲ getParameter로 파라미터의 값을 가져오면 String형이고 이것을 parseInt로 after10Years변수로 저장할 때 숫자형식이 아닌 문자열을 입력하면 NumberFormatException이 발생하여 우리가 만들어둔 errorpage로 이동한다.
include 지시어 : 페이지를 삽입 할 때 사용
file
: 해당 페이지의 소스가 그대로 삽입된다.
- 모든 JSP페이지에서 공유하는 변수 선언시나 메소드 정의시 사용한다.
- HTML결과가 포함되는게 아니라 소스자체가 그대로 포함되며 포함된 소스도 함께 자바코드로 변환된다.
- file속성에는 상대경로나 혹은 Context Root(프로젝트명)를 제외한 /로 시작하는 절대경로 지정
- 지시어 안에는 JSP코드(스크립팅 원소) 사용불가하다.
▲ include할 페이지(IncludePage.jsp)와 include당하는(?) 페이지(IncludeIndex.jsp)를 만들었다.
먼저 include할 페이지(IncludePage.jsp)를 보자.
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- 여러 JSP페이지에서 공통으로 사용할 변수나 상수, 메소드 정의 -->
<%!
private SimpleDateFormat dateFormat= new SimpleDateFormat();
//공통 메소드]
private String getDate(String pattern){
dateFormat.applyPattern(pattern);
return dateFormat.format(new Date());
}////////////getDate
%>
<%
//공통 변수]
String currentPageName =
request.getRequestURL().toString().substring(request.getRequestURL().toString().lastIndexOf("/")+1);
%>
▲우리는 이 현재 시스템날짜와 시간을 나타내는 메소드와 현재 페이지 이름을 나타내는 변수를 include당하는 페이지에 include를 하여 메소드와 변수를 사용할 수 있도록 할 것이다.
아래는 include당하는 페이지이다.
<body>
<div class="jumbotron jumbotron-fluid bg-warning">
<div class="container-fluid">
<h2>include지시어</h2>
</div><!--jumbotron-->
</div><!--container-->
<%@ include file="IncludePage.jsp" %>
<div class="container">
<h2>오늘은 <%=getDate("yyyy-MM-dd")%>일 입니다.</h2>
현재 페이지명은 <%=currentPageName%> 입니다.
</div>
</body>
▲include의 위치는 사용하는 곳의 전(前) 위치에는 아무곳이나해도 된다.
▲include당하는 페이지에 출력결과이다.
'JSP' 카테고리의 다른 글
[JSP]out 객체 (0) | 2022.04.29 |
---|---|
[JSP]response 객체 (0) | 2022.04.29 |
[JSP]request객체 (0) | 2022.04.29 |
[JSP] 스크립팅 원소(Scripting Element) (0) | 2022.04.28 |
[JSP]JSP Basic (0) | 2022.04.27 |