JSP 기본 요소 (D-97)

최우정·2022년 5월 12일
0

100일

목록 보기
4/17
post-thumbnail

JSP는 크게 주석(Comment), JSP 지시어(Directive), 스크립트 요소(Scripting Elements), 액션 태그(Action Tag)의 4가지 기본 요소로 구분한다.

📒 1. JSP 주석 (Comment)

개발자가 개발한 코드를 다른 개발자가 디버깅 하거나 수정할 때 이해하기 쉽도록 코드의 해설을
적어 놓은 글을 뜻한다. (프로그램의 실행에는 영향을 미치지 않는다)

✏️ 1) HTML 주석

  • 브라우저 소스 보기 기능으로 확인할 수 있다.

<!--HTML 주석입니다.-->

✏️ 2) JSP 주석

  • 숨겨진 주석(Hidden Comment)로 JSP 파일 내에서 완전히 무시되어 처리되므로 서버 상에서 컴파일 되지 않으며 클라이언트에 전송되지 않는다.
  • 브라우저의 소스 보기 기능으로 확인할 수 없다.

<%--JSP 주석입니다.%-->

✏️ 3) 자바 스타일 주석

    	<%
    	/* 여러 줄을 사용할 때의
        자바 주석입니다. */
        %>

<% // 한줄을 사용할 때의 자바 주석입니다. %>

📒 2. JSP 지시어 (Directive)

JSP 파일 내에서 JSP를 실행할 컨테이너에서 해당 페이지를 어떻게 처리할 것인가에 대한 설정 정보를 지정해 주는 데 사용된다.

✏️ 1) Page 지시어

  • JSP 페이지에 대한 속성을 지정하는 지시어
  • import 속성을 제외한 나머지 속성은 하나의 페이지에 한 번씩만 지정할 수 있다.
    	<%@ page language="java" contentType="text/html; charset=UTF-8"
    	    pageEncoding="UTF-8"%>
        <%@ page import="java.util.Enumeration"%>

📝 1-1) language 속성

  • JSP 파일 내에서 사용될 스크립트 언어를 지정하는 속성이다.
  • 특별히 지정하지 않을 경우 JSP 컨테이너가 지원하는 기본 언어인 java가 language 기본 속성으로 지정된다.

<%@ page language="java" %>

📝 1-2) extends 속성

  • JSP 파일은 컨테이너에서 실행되기 위해 파싱 과정을 거쳐 서블릿으로 변환된다.
  • 이 때 서블릿 클래스로 변환되는 과정에서 상속할 부모 클래스를 지칭하는 속성이 extends 속성이다.
  • (상속은 JSP 컨테이너에서 자체적으로 처리하기 때문에 개발자가 지정하는 경우는 거의 없다.)

<%@ page extends="javax.servlet.jsp.HttpJspBase" %>

📝 1-3) import 속성

  • JSP 페이지 내에서 사용할 (여러 개) 패키지 또는 클래스를 import 하는데 사용된다.

<%@ page import="java.io.*,java.util.ArrayList" %>

📝 1-4) session 속성

  • HTTP 프로토콜은 클라이언트로부터 요청이 들어오면 새로운 커넥션을 생성하여 요청에 대한 응답을 회신한 후 그 커넥션을 끊는다 = Stateless
  • Stateless 특성으로 커넥션을 매번 새로 생성하기 때문에 동일한 클라이언트에 대해 정보를 유지할 필요가 있는 경우 (로그인 상태 유지, 장바구니 유지 등) 다른 클라이언트와 현재 정보가 유지되어야 할 클라이언트를 구별할 특별한 방법이 사용된다 = 세션관리(Session Management)
  • 세션관리(Session Management) 에 의해 클라이언트 정보가 유지되도록 만들어진 가상의 커넥션(Virtual Connection) = HTTP 세션(HTTP Session) 이라고 한다.

<%@ page session="true" %>

📝 1-5) buffer 속성

  • JSP 페이지가 서블릿으로 변환되어 응답을 생성해 클라이언트에 전송할 때 사용되는 버퍼의 크기를 지정하는 속성이다.
  • 기본적으로 8kb로 설정되어 있으며, 만일 "none"으로 설정할 경우 응답을 생성할 때 버퍼를 사용하지 않고 바로 클라이언트에 응답을 전송한다.

<%@ page autoFlush="true" %>

📝 1-6) autoFlush 속성

  • buffer 속성에서 지정한 버퍼가 다 채워졌을 경우 이를 어떻게 처리할 것인지 JSP 컨테이너에게 알려주는 속성이다.
  • 기본 값은 "true"로, 버퍼가 다 채워지면 클라이언트에 전송하고 버퍼를 비운다.
  • autoFlush 속성을 "false"로 하면 버퍼가 다 채워졌을 경우 버퍼를 전송하는 것이 아니라 Exception을 발생시킨다.

<%@ page autoFlush="true" %>

📝 1-7) isThreadSafe 속성

  • 기본적으로 JSP는 다중 스레드(Multiple Thread)를 기반으로 실행된다.
  • JSP 파일이 JSP 컨테이너에 의해 파싱되어 서블릿 인스턴스가 생성되고, 사용자의 요청 각각에 대한 스레드가 하나씩 생성되어 그 스레드가 사용자의 요청을 처리하는 방식이다.
  • 하지만 다중 스레드에 의해 한 데이터에 동시 접근이 이루어지면 그 데이터의 값이 의도되지 않은 값으로 변경될 경우 다중 스레드에 의한 동시 접근을 차단 할 필요가 있다.
  • 이러한 경우 isThreadSafe 속성을 "true"로 지정하면 JSP 파일이 실행되더라도 하나에 스레드에 의한 servide() 메소드 실행이 완전히 끝날 때까지 다른 스레드는 기다리게 된다.

<%@ page isThreadSafe="true" %>

📝 1-8) info 속성

  • 해당 페이지 전체에 대한 주석의 역할을 한다.

<%@ page info="이 velog는 최우정의 velog입니다." %>

📝 1-9) errorPage 속성

  • JSP 페이지를 처리하는 과정에서 예외(Exception)가 발생했을 때 해당 페이지에서 직접 처리하지 않고, 에러 페이지를 지정해 지정된 에러 페이지에서 예외를 처리하도록 할 때 사용하는 속성이다.
  • 만일 buffer 속성이 "none"으로 지정되었거나, autooFlush 속성이 "true"로 지정되어 있을 경우, 에외가 발생하더라도 JSP 컨테이너가 제어권을 에러 페이지로 넘겨줄 수 없다.

<%@ page errorPage="error/error.jsp" %>

📝 1-10) contentType 속성

  • JSP 페이지가 전송할 응답의 형태가 어떠한 MIME 형식으로 되어 있는지를 지정한다.
  • MIME(Multipurpose Internet Mail Extension)란 인터넷을 통해 문서를 주고 받을 때 사용되는 문서 형식을 정의해 놓은 것으로 단순한 ASCII 파일 뿐 아니라 이미지, 오디오, 비디오 등 멀티미디어 형식의 문서도 원활히 주고 받을 수 있도록 text/html, image/gif, video/avi 등 여러 가지 타입을 제공한다.

<%@ page contentType="text/html"%>

  • 다음처럼 문자셋 >character set)의 인코딩 방식을 ";charset:"을 사용해 추가할 수 있다.

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

📝 1-11) isErrorPage 속성

  • 현재 페이지가 다른 페이지에서 발생한 예외(Exception)를 처리할 페이지일 때 지정한다.
  • 기본 값은 "false"이고, 특정한 JSP 페이지의 예외를 처리할 JSP 에러 페이지를 만들었다면 다음처럼 그 에러 페이지의 isErrorPage 속성을 "true"로 지정한다.
  • isErrorPage 속성 값을 "true"로 설정하면 에러가 발생한 페이지에서 전달된 Exception 객체를 사용할 수 없다.

<%@ page isErrorPage="true" %>

📝 1-12) pageEncoding 속성

  • JSP 페이지의 문자셋 인코딩 방식을 지정할 때 사용한다.

<%@ page pageEncoding="UTF-8" %>

  • 보통은 contentType 속성을 사용해 한꺼번에 지정하여 사용한다.

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

✏️ 2) includ 지시어

  • JSP 파일 또는 HTML 파일을 해당 JSP 페이지에 삽입할 수 있도록 하는 기능을 제공하는 지시어이다.
  • 여러 JSP 페이지에서 공통되는 부분이 많을 때 공통되는 부분을 따로 파일로 만들어 include 지시어로 삽입하면 간단하게 공통되는 부분을 포함시킬 수 있다.

✏️ 3) taglib 지시어

  • JSTL(JSP Standard Tag Library)나 커스텀 태그 등 태그 라이브러리를 JSP에서 사용할 때 접두사를 지정하기 위해 사용된다.
  • tag 지시어는 uri 속성과 prefix 속성의 두 가지 속성으로 이루어지는데 uri 속성은 태그 라이브러리에서 정의한 태그와 속성 정보를 저장한다.
  • TLD(Tag Library Descriptor) 파일이 존재하는 위치를 지정하고, prefix 속성에는 사용할 커스텀 태그의 네임 스페이스(Name Space)를 지정한다.

<%@ taglib url=http://taglib.com/sampleURI prefix-"samplePrefix" %>

📝 선언문 (Declaration)

  • JSP 페이지에서 자바 코드에서 말하는 멤버 변수와 메소드를 선언하기 위해 사용된다.
  • 선언문을 사용해 선언된 변수는 JSP 파일이 웹 컨테이너에 의해 컴파일될 때 멤버 변수로 인식되기 때문에 JSP 페이지의 어느 위치에서도 해당 변수를 참조하는 것이 가능하다.
  • 스크립틀릿 요소에서 변수를 선언하면 멤버 변수가 아니라 지역 변수로 인식되기 때문에 변수를 선언하기 이전의 위치에서는 참조가 불가능한 점이 가장 큰 차이점이다.
<%!
private String str = "JSP 스터디"
public String checkStr() {
		if(str == null) return "no";
        else return "ok";
}
%>

📝 스크립틀릿 (Scriptlet)

  • JSP는 서블릿 코딩의 어려움을 극복하기 위해서 개발된 방식이다.
  • 서블릿으로 HTML 응답을 만들어 내기 위해서는 각각의 HTML, 태그를 PrintWriter 등의 클래스를 사용해 출력 객체를 생성한 후 일일이 출력해주어야 한다. 코드가 길어지면 코드의 유지, 보수가 어려워진다.
  • HTML 코드로 된 부분은 일반 HTML 파일처럼 사용하고, 자바 코드로 이루어진 비즈니스 로직 부분은 <% ... %>로 표현되는 스클립틀릿 태그를 사용하여 구분할 수 있다. (out 객체를 사용하지 않고 쉽게 HTML 응갑을 만들어 낼 수 있다.)
<% 문장1; %>
<%
문장 2; 문장 3; 문장 4; ...
%>

📝 표현식 (Expression)

  • 선언문 또는 스크립틀릿 태그에서 선언된 변수 값이나 메소드의 리턴값을 스크립틀릿 태그 외부에서 출력하기 위해 사용되는 방법으로 다음과 같이 사용할 수 있다.
<%=변수 %>
<%=리턴값이 있는 메소드 %>
<%=수식 (변수 또는 리턴값이 있는 메소드를 포함할 수 있음) %>
  • 표현식 태그 (<%= ...%>)내 구문 전체의 결과 값은 JSP 파일이 파싱될 때 출력 객체의 print() 메소드를 통해 자동으로 문자열 (String) 형식으로 변환되어 출력된다.
  • 하나의 표현식 태그 내의 구문 전체가 하나의 print() 메소드의 괄호 안에 통째로 들어가게 되므로 표현식 태그 내부에서는 세미콜론(;)을 사용해서는 안된다.
profile
비전공자 Java, JavaScript, Html, Css, C++ 공부중

0개의 댓글