[JSP] JSP파일 기본 구조 + page지시어

이지현·2021년 12월 17일
1
post-thumbnail

💻1. JSP파일 기본 구조

<%@ page language = "java" contentType = "text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
💡 지시어

<%! 
    String str1 = "JSP";
    String str2 = "안녕하세요";
%>
💡 위는 스크립트요소(선언부)
---------------------------------------------------------------------------------------------------

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HelloJSP</title>
</head>
<body>
    <h2>처음 만들어보는 <%= str1 %></h2> 💡 스크립트요소(표현식)
    <p>
        <%
            out.println(str2 + str1 + "입니다."); 💡 스크립트 요소(스크립틀릿)
        %>
    </p>
</body>
</html>

💡 지시어란?

해당 JSP페이지의 처리 방법을 JSP엔진에 "지시" 해주는 역할을 한다.

💡 스크립트 요소란?

HTML 파일 중간에 자바 코드를 삽일할 때 사용한다.


💻2. 지시어

  • 2-1 지시어란?

    JSP페이지를 서블릿코드로 변환하는데 필요한 정보를 JSP엔진에게 알려줍니다.

    • 주로 스크립트 언어나 인코딩 방식등을 설정합니다.
    • 여러가지의 속성을 지정할 수 있으며, 속성은 지시어마다 다르다
  • 2-2 지시어 구문

    <%@ 지시어종류 속성1="값1" 속성2="값2".......%>

  • 2-3 지시어 종류

    지시어 이름설명
    page 지시어JSP 페이지에 대한 정보를 설정합니다.
    include 지시어외부 파일을 현재 JSP페이지에 포함시킵니다.
    taglib 지시어표현 언어에서 사용할 자바 클래스나 JSTL을 선언합니다.

💻3. page지시어

  • 3-1 page지시어란?

    💡 JSP페이지에 대한 정보를 설정한다.

    • 예를들어 : 문서의 타입, 에러 페이지, MIME타입 등
  • 3-2 page지시어 속성

    속성내용
    info페이지에 대한 설명을 입력합니다.
    language페이지에서 사용할 스크립팅 언어를 지정합니다.
    contentType페에지에서 생성할 MIME 타입을 지정합니다.
    pageEncodingcharset과 같이 인코딩을 지정합니다.
    import페이지에서 사용할 자바 패키지와 클래스를 지정합니다.
    session세션 사용 여부를 지정합니다.
    buffer출력 버퍼의 크기를 지정합니다. 버퍼를 사용하지 않으려면 "none" 으로 지정합니다.
    autoFlush출력 버퍼가 모두 채워졌을 때 자동으로 비울 지를 결정합니다. buffer 속성이 none일 때 false로 지정하면 에러가 발생합니다.
    trimDirectiveWhitespaces지시어 선언으로 인한 공백을 제거할지 여부를 지정합니다.
    errorPage해당 페이지에서 에러가 발생했을 때 에러 발생 여부를 보여줄 페이지를 지정합니다.
    isErrorPage해당 페이지가 에러를 처리할지 여부를 지정합니다.
  • 3-3 page지시어 사용법 예시

    💡 이클립스에서 JSP파일을 생성하면 "language, contentType, pageEncoding" 속성이 기본적으로 삽입됩니다.

<%@ page languge="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

📌 위 지시어를 해석하면
- languge : 스크립팅 언어는 자바를 사용합니다.
- contentType : 문서의 타입, 즉 MIME타입은 text/html이고, 캐릭터셋은 UTF-8입니다.
- pageEncoding : 소스코드의 인코딩 방식은 UTF-8 방식입니다

💻4. page지시어-import속성

  • 4-1 import속성이란?

    💡 자바와 마찬가지로 JSP파일에서도 필요한 ㅋ늘래스가 있으면 임포트해서 사용을 한다.

  • 4-2 import로 외부 클래스 불러오기 예시

<%@ page language="java" contetnType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.text.SimpleDateformat"%>
<%@ page import="java.util.Date"%>
-------------------------------------------📌 import로 외부 클래스 불러옴
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>page 지시어-import 속성</title>
</head>
<body>
    <%
        Date today = new Date(); ---------------📌 외부 클래스 생성
        SimpleDateformat dateFormat = new SimpleDateformat("yyyy-mm-dd"); ------📌 외부 클래스 생성
        Stirng todayStr = dateFormat.format(today);
        out.println("오늘날짜 : " + todayStr); ------------📌 오늘 날짜를 웹브라우저에 출력
    %>
</body>
</html>

-------------------------------------------------------------------------------------------------
📌 코드 해석
위 코드는 DateSimpleDateFormat 클래스를 이용하여 오늘날짜를 출력하고 있다.
두 클래스는 java.lang패키지에 속하지 않기 때문에 현재 문서에 사용하기 위하여 import를 진행한다.

💻5. page지시어-errorPage, isErrorPage속성

  • 5-1 errorPage, isErrorPage속성이란?

    💡 JSP 실행 도중 에러가 발생하면 에러화면을 웹브라우저에 표시해주게 되는데 그 때 일부 코드가 노출되게 된다. 이를 방지하기 위해 try/catch문을 사용하거나 위 속성을 사용하여 디자인이 적용된 페이지로 대체할 수 있다.

  • 5-2 errorPage , isErrorPage 파일 구성방법

    💡 1. errorPage="IsErrorPage.jsp
    💡 2. isErrorPage = "true"

    1. errorPage가 발생할 경우 IsErrorPage.jsp가 보여지도록 한다.
    2. isErrorPage = "true"로 지정을 해야된다.
  • 5-3 errorPage, isErrorPage로 에러페이지 대체하기 예시

<%@ page language="java" contetnType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<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>
-------------------------------------------------------------------------------------------------
📌 위 코드 해석
에러발생 부분은 "age"라는 이름의 매개변수 값을 받아와 정수로 변환해야되는데 최초 실행 시 매개변수가 없으므로 
null값이 전달되어 에러가 발생한다.

📌 함수 
- interger.parseInt() :  String타입의 숫자를 int타입으로 변환해준다.
- request.getParameter() : 웹브라우저에서 전달한 parameter값을 가져오는 것

💡 위 코드에서 에러가 난 부분을 이제 errorPage 속성을 이용해보자

위 코드에서 에러나는 부분을 사전으로 조취를 취할 수 있다.
📌 errorPage 속성을 이용하여 개발자가 지정한jsp페이지 보여주기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="IsErrorPage.jsp" isErrorPage = "true"%>
---------📌코드 해석: errorPage는 IsErrorPage.jsp페이지를 보여주도록 한다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>errorPage, isErrorPage</title>
</head>
<body>

</body>
</html>
================> 💡 결론 :
위처럼 errorPage를 지정해주면 직접에러를 처리하지않고 또다른 페이지를 보여줄 수 있다. 

💻6. page지시어-trimDirectiveWhitespaces속성

  • 6-1 trimDirectiveWhitespaces란?

    💡 지시어 때문에 생성된 불필요한 공백을 제거하고자 할 때 이 속성을 사용한다.

  • 6-2 trimDirectiveWhitespaces속성을 왜 써야할까?

    📢 page지시어는 웹서버에서 처리된 후 공백으로 남게되는데 , 일반적으로는 크게 문제는 없으나 안드로이드와 같은 외부 기기와 연동시 가끔 문제를 일으키키도 하기에 공백을 제거하는 속성을 쓴다.

    컴퓨터 입장에서는 공백도 하나의 문자로 인식을 한다.

  • 6-3 trimDirectiveWhitespaces 예시

<%@ 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>

💻7. buffer, autoFlush속성

  • 7-1 buffer란?

    💡 버퍼라는 개념은 매우 다양하게 사용되며, 그 중 예시로 들자면 네트워크로 영상 데이터를 전송할 때, 작은 단위로 여러번 전송하는 것 보다 큰단위로 한 번에 보내는편이 효율적이다. 이처럼 "버퍼"라는 임시 저장소를 두어 데이터들이 충분히 쌓일 때까지 기다렸다가 보내는것이다.

  • 7-2 buffer 속성 이동경로

<버퍼가 없을 때>
                입력 즉시 전송
키보드 ------------------------------------------>프로그램


<버퍼 사용시>
키보드---------------------->버퍼---------------------->프로그램
      입력시 버퍼에 먼저 저장        버퍼가 가득차면 전송 
  • 7-3 buffer의 장점

    💡 "포워드"와 "에러 페이지 처리"를 할 수 있다.

    📢 jsp가 생성한 결과는 일단 버퍼에 저장되는데 만약 실행 도중 에러가 발생하면 버퍼에 저장된 내용을 삭제하고 에러 화면을 표시할 수있다.

  • 7-4 buffer의 속성값

    💡 1. buffer의 사용유무
    <%@ page buffer="1kb"%>
    → 버퍼의 크기를 설정할 수 있고, 기본값을 8kb로 되어있다.

    1. <%@ page buffer="none"%>
      → 버퍼를 사용하지 않을 때 none을 한다.
      단 , 버퍼를 사용하지 않으면 포워드나 에러페이지 기능을 사용할 수 없기 때문에 none으로 지정하는 경우는 거의 없다.
  • 7-5 autoFlush란?

    💡 buffer가 모두 채워졌을 때의 처리 방법을 정하는 데 쓰인다.
    값은 "true" 와 "false" 중 선택할 수 있으며
    📍 true(기본값) : 버퍼가 채워지면 자동으로 플러시한다.
    📍 false : 버퍼가 채워지면 예외를 발생시킨다.

    플러시(flush)란?
    → 버퍼 안의 데이터를 목적지로 전송하고 버퍼를 비우는 작업을 말한다.

  • 7-6 buffer와 flush의 예제

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" buffer="1kb" autoFlush="false"%>
-------- 📌버퍼설정 : buffer의 크기는 1kb로 지정, 버퍼가 채워지면 예외를 발생시킴
<!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>
profile
개발 공부 중인 지현이

0개의 댓글