Back/JSP

JSP (Java Server Page) - 개요, 태그, 지시어

Hyeon_ 2021. 12. 31. 21:17

JSP (Java Server Page)

자바 기반 언어로 HTML 문서 내에 자바 코드를 삽입해서 웹 서버에서 동적으로 웹 페이지를 생성해서 클라이언트(웹 브라우저)에게 반환해 주는 언어를 말한다.

서버 사이드 스크립트 언어라고도 하며, JSP를 통해 HTML과 동적으로 생성된 컨텐츠(DB 연동된 실시간 데이터)를 혼합해서 사용할 수 있다.

JSP 특징

  • Servlet을 보완한 스크립트 방식 표준 언어
  • Servlet 기능 + 추가 기능
  • JSP(.jsp)는 실행되면서 Servlet(.java)으로 변환되어 컴파일 되어 클래스 파일(.class) 파일로 만들어져 실행
  • View를 담당하는 페이지로 사용
  • 점차 JSP 페ㅣ지에서 자바 코드가 사라지고 있는 추세
    • EL과 JSTL로 표현

JSP와 Servlet(서블릿)의 차이점

  • JSP : HTML 내부에 Java 소스 코드가 들어 있는 형식(사용하기 편리하고 쉬움)
  • Servlet : Java 코드 내에 HTML 코드가 들어 있어서 읽고 쓰기 불편

JSP 페이지 구조

JSP = 정적 페이지 + 동적 페이지

  • 정적 페이지 구현 : HTML 태그
  • 동적 페이지 구현
    • <%@ %>
    • <% %>
    • <%! %>
    • <%= %>
    • 등의 스크립트 사용

JSP 태그

  • <%로 시작하고 %>로 종료
    • @, !, =, -- 문자를 추가하여 태그의 의무 부여
    • 지시어 <%@ %> : JSP 페이지의 속성 지정
    • 선언부 <%! %> : 변수 선언 및 메소드 정의
    • 표편식 <%= %> : 계산식, 함수 호출 결과 등 출력
    • 스크립트릿 <% %> : 자바 코드 기술
    • 주석 <%-- --%> : JSP 페이지에 설명 추가
    • 액션 태그 <jsp:액션></jsp:액션> : 자바 빈, include / forward / param 등

JSP 페이지의 기본 구성 요소

JSP 페이지 내용

  • HTML 문서 내용 + JSP 태그 + 자바 코드

JSP 페이지 구성

  • 지시어 : page, include, taglib
  • 스크립트 요소
    • 선언문(Declaration)
    • 표현식(Expression)
    • 스크립트릿(Scriptlet)
  • 액션 태그

지시어

  • JSP 페이지의 전체적인 속성을 지정할 때 사용
  • JSP 컨테이너에게 전달하는 JSP 페이지 관련 메시지
  • <%@ 지시어 속성1=값, 속성2=값, ... %>
  • page, include, taglib 등 사용
    • page 지시어 : <%@ page %>
      • JSP 페이지에 대한 속성 설정
      • language="java"
      • contentType="text/html; charset=UTF-8"
      • pageEncoding="UTF-8"
    • include 지시어 : <%@ include %>
      • <%@ include file="포함될 파일의 url" %>
      • 포함시킬 파일명을 file 속성의 값으로 기술
      • (공통적으로)포함될 내용을 가진 파일을 해당 JSP 페이지 내에 삽입하는 기능 제공
      • 중첩 지정 가능
        • 한 JSP 페이지에서 다른 JSP 페이지를 포함하거나
        • 포함된 JSP 페이지가 또 다른 JSP 페이지에 중첩 포함 가능
      • 두 개의 파일이 하나의 파일로 합쳐진 후 하나의 파일로서 변환되고 컴파일
    • taglib 지시어 : <%@ taglib %>
      • <%@ taglib prefix="c" url="......" %>
      • 커스텀 태그를 JSP 페이지 내에 사용할 때 이용

변수 선언 예제

variable.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <title>Title</title>
  </head>
  <body>
    <%!
      // 선언문
      // 변수 선언 및 초기화만 가능
      int x = 10;
      long y;
      // y = 100; 이 경우 오류(선언부에서는 값을 지정할 수 없음. 선언과 동시에 초기화만 가능)
      float floatValue = 3.14f;
      double doubleValue = 3.14;

      char ch = 'a';
      String myJob = "프로그래머";

      boolean b = true;
    %>
    <%
      y = 100; // 스크립트릿 영역에서 값 지정
      String name = "홍길동";
    %>
    <h3>변수 값 출력</h3>
      x : <%= x %><br>
      y : <%= y %><br>
      floatValue : <%= floatValue %><br>
      doubleValue : <%= doubleValue %><br>
      ch : <%= ch %><br>
      myJob : <%= myJob %><br>
      b : <%= b %><br>
      name : <%= name %><br>
  </body>
</html>

메소드 예제

method.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <title>선언문 예제 - 메소드 정의(선언)</title>
  </head>
  <body>
    <h3>선언문 예제 - 메소드 정의(선언)</h3>
    <%!
      String id = "abcd";

      public String getId() {
        return id;
      }
    %>
    id : <%= id %><br>
    getId 메소드 호출 결과 : <%= getId() %>
  </body>
</html>

표현식 예제

expression.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <title>선언문 예제 - 메소드 정의(선언)</title>
  </head>
  <body>
    <h3>선언문 예제 - 메소드 정의(선언)</h3>
    <%!
      String id = "abcd";
      // 메소드는 반드시 선언부에서 정의
      public String getId() {
        return id;
      }
    %>
    id : <%= id %><br>
    getId 메소드 호출 결과 : <%= getId() %>
  </body>
</html>

include 지시어 예제

top.jsp
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    Date date = new Date();
%>
<html>
    <head>
        <title>top.jsp</title>
    </head>
    <body>
        <font color='blue' size="3pt">
            top.jsp 입니다.<p>
            <%= date.toLocaleString() %>
    </body>
</html>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%Date date = new Date();%>
<font color='blue' size="3pt">
    top2.jsp 입니다.<p>
    <%= date.toLocaleString() %>
bottom.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>bottom.jsp</title>
    </head>
    <body>
        <font color='red' size="3pt">
            bottom.jsp 입니다.<p>
            작성자 <b> <%= name %> <b> 입니다.
            <%-- name :  선언되지 않은 변수이기 때문에 오류 발생 --%>
            <%-- 다른 페이지에 포함되어서 선언되어 있는 name 변수 사용 시 오류 없음 --%>
    </body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<font color='red' size="3pt">
    bottom2.jsp 입니다.<p>
    작성자 <b> <%= name %> <b> 입니다.
    <%-- name :  선언되지 않은 변수이기 때문에 오류 발생 --%>
    <%-- 다른 페이지에 포함되어서 선언되어 있는 name 변수 사용 시 오류 없음 --%>
jspInclude.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%!
    String name = "홍길동";
%>
<html>
    <head>
        <title>include.jsp</title>
    </head>
    <body>
        <%-- top --%>
        이 부분에 top.jsp 내용이 포함될 것입니다.<p>
        <%@ include file="top.jsp" %>
        <hr>
        <%-- 본문 --%>
        <h3>본문</h3>
        이 부분은 include.jsp의 내용입니다.
        <hr>
        <%-- bottom --%>
        이 부분에 bottom.jsp 내용이 포함될 것입니다.<p>
        <%@ include file="bottom.jsp" %>
    </body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%!
    String name = "홍길동";
%>
<html>
    <head>
        <title>include.jsp</title>
    </head>
    <body>
        <%-- top --%>
        이 부분에 top2.jsp 내용이 포함될 것입니다.<p>
        <%@ include file="top2.jsp" %>
        <hr>
        <%-- 본문 --%>
        <h3>본문</h3>
        이 부분은 include2.jsp의 내용입니다.
        <hr>
        <%-- bottom --%>
        이 부분에 bottom2.jsp 내용이 포함될 것입니다.<p>
        <%@ include file="bottom2.jsp" %>
    </body>
</html>