JSP

[JSP]지시어(Directive)

MoZZANG 2022. 4. 28. 19:24

JSP의 구성요소중 지시어(Directive)에 대해 알아보자

 

JSP에서 지시어의 종류는 3가지가 있다.

 

  1. Page 지시어
  2. Include 지시어
  3. 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">&times;</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