[JSP] JSP의 기본개요와 구조

Geehyun(장지현)·2024년 3월 9일

JSP

목록 보기
1/7
post-thumbnail

JSP란?

JSP 기본 개요

JSP(Java Server Pages)동적 웹페이지를 개발하기 위한 프로그래밍 기술로, Java를 사용하여 서버측에서 웹 페이지를 생성해 웹 브라우저로 전송해줍니다.

  • JSP의 장점
    • 짧은 코드로 동적인 웹 페이지를 생성할 수 있습니다.
    • 기본적인 예외는 자동으로 처리됩니다.
    • 많은 확장 라이브러리를 사용할 수 있습니다.
    • 스레드 기반으로 실행되어 시스템 자원을 절약해줍니다.

JSP는 기업용 자바 기술의 집합체인 Java EE(Java Platform, Enterprise Edition)의 핵심요소이며, Java EE는 대한민국 정부 표준 프레임워크의 근간입니다.
=> 대한민국에서 사용률이 다른 국가에 비해 굉장히 높은 편

JSP의 탄생 배경

  • 정적 웹페이지에서 동적 웹페이지로
    정적 웹페이지(static web page)란, 클라이언트가 어떤 형태로 요청을 하던 항상 동일한 모습을 보여주는 웹페이지를 말합니다.
    동적 웹페이지(dynamic web pagd)란, 동일한 페이지라 할지라도 클라이언트의 요청에 따라 그때 그때 적절한 웹페이지를 생성해(전처리) 보여주는 기술입니다.
    요즘날의 웹페이지는 이러한 정적 웹페이지와 동적웹페이지가 모두 혼합된 형태를 띄고 있습니다.

  • 동적 웹페이지 기술의 발전
    동적 웹페이지를 구현하는 기술은 전처리를 어떻게 처리하느냐에 따라서 구분됩니다. 대표적으로 JSP와 서블릿, ASP, PHP 등이 있습니다.
    이 중 Java를 이용한 동적 웹페이지 기술을 발전 과정을 살펴 보겠습니다.
    1. 애플릿
    웹을 동적으로 만들기 위한 고대의 자바 기술, 지금은 더 이상 지원되지 않는 추억의 기술
    2. 서블릿
    클라이언트 요청에 따라 서버에서 처리 후 응답으로 결과값만 보여주는 구조로 Java 코드 내에서 결과로 보여줄 HTML 코드로 생성&조립 하는 방식이다보니 너무 많은 코드가 필요하다는 단점이 있었습니다.
    3. JSP
    서블릿의 단점을 보완하여 기본을 HTML로 하고 필요한 부분만 Java 코드를 삽입하는 형태로 탄생하였습니다.
    JSP파일서블릿 변환하여 실행하는 방식으로 아래의 장점이 있습니다.

    • 한 번 서블릿으로 컴파일된 JSP 파일은 캐시되므로 실질적 성능 저하 없이 사용가능
    • 서블릿 기술도 여전히 사용 가능
      => 주로 클라이언트 단은 JSP로, 서버 단은 서블릿 요소가 주로 사용됩니다.

    서블릿JSP
    - Java 코드 안에서 HTML 페이지를 생성- HTML 코드 안에서 필요한 부분만 Java 코드를 스크립트 형태로 작성
    - 변수 선언 및 초기화가 반드시 선행되어야 함- 자주 쓰이는 기능을 내장객체로 제공 함(request, response, out, session 등)
    - 컨트롤러(Controller)를 만들 때 사용- 처리된 결과를 보여주는 뷰(View)를 만들 때 사용

JSP의 기본 구조

JSP파일은 웹 브라우저에 띄울 HTML 문서를 생성하는 것입니다. 따라서 기본적인 HTML 구조 + JSP 요소가 혼합된 형태입니다.

JSP 요소로는, 아래의 구조로 나눌 수 있습니다.

  • 지시어 (Directive)
  • 스크립트 요소 (Script Element)
    • 선언부 (Declaration)
    • 스크립틀릿 (Scriptlet)
    • 표현식 (Expression)

지시어

JSP페이지를 Java코드로(서블릿) 변환하는데 필요한 정보를 JSP엔진에게 알려주는 부분 입니다.
주로 스크립트 언어나 인코딩 방식 등을 설정합니다.

지시어 종류는 아래와 같으며, 지시어 종류에 따라 사용할 수 있는 속성이 다릅니다.

  • page : JSP 페이지에 대한 정보를 설정하는 지시어
  • include : 외부 파일을 현재 JSP 파일에 포함시키는 지시어
  • taglib : 표현 언어(EL)에서 사용할 자바 클래스나 JSTL을 선언하는 지시어

page 지시어

JSP 페이지에 대한 정보를 설정하는 지시어 입니다.
예를 들어 문서의 타입, 에러페이지, MIME타입과 같은 정보를 설정합니다.

  • 작성방식
// 작성법
<%@ page 속성명1 = "값1" 속성명2 = "값2" %>
  • 주요 속성 한눈에 보기

    속성내용기본값
    info- 페이지에 대한 설명을 입력합니다.-
    language- 페이지에서 사용할 스크립팅 언어를 지정합니다.java
    contentType- 페이지에서 생성할 MIME 타입을 지정합니다.
    - 기본값이 영어와 서유럽 문자만 포함하고 있는 ISO-8859-1 이어서 UTF-8로 수정해줘야합니다.
    - 주로 <%@ page contentType = "text/html; charset=UTF-8"%>로 사용합니다.
    -
    pageEncoding- charset과 같이 인코딩을 지정합니다.ISO-8859-1
    import- 페이지에서 사용할 Java 패키지와 클래스를 지정합니다.-
    session- 세션 사용 여부를 지정합니다.-
    buffer- 출력 버퍼의 크키를 지정합니다. 버퍼를 사용하지 않으려면 'none'으로 지정합니다.8kb
    autoFlush- 출력 버퍼가 모두 차면 자동으로 비울 지 결정 합니다. 위 buffer 속성이 'none'일 때 'false'로 설정하면 에러가 발생합니다.true
    trimDirectiveWhitespaces- 지시어 선언으로 html 코드 내에 발생할 공백을 제거할지 여부를 지정합니다.false
    errorPage- 해당 페이지에서 에러가 발생할 경우 보여줄 에러페이지를 지정합니다.-
    isErrorPage- 해당 페이지가 에러를 처리하는 페이지인지 여부를 지정합니다.false

include 지시어

웹 사이트 헤더나, 푸터 등 처럼 해당 사이트 내 모든 페이지에서 반복되어 사용되는 경우
또는 세션 확인 같은 작업처럼 모든 페이지에서 삽입되야할 요소의 경우
따로 별도의 문서로 작성하여 include 지시어를 통해 필요한 페이지에서 포함시킬 수 있습니다.

  • 작성방식
<%@ page file="파일 경로" %>

include 지시어 사용 예시

  • include 테스트1 문서 (include 될 문서)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
header {width : 100%; height : 100px; border: 1px solid black; position: fixed; top: 0; background: skyblue;}
</style>
</head>
<body>
<header>저는 헤더입니다! 다른 파일에서 왔어요!</header>
</body>
</html>
  • include 테스트2 문서 (main 문서)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ include file="Include.jsp" %> <!--include 해온 부분-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
div {width : 100%; background : pink; height: 500px; margin : 0;}
p {padding-top: 200px; text-align : center;}
</style>
</head>
<body>
<div><p>저는 바디 입니다!!!! 헤더는 include해왔어요!</p></div>
</body>
</html>
  • 결과

    위 처럼 테스트1문서를 작성 후 테스트2문서에 include해서 같은 페이지로 보여줄 수 있습니다.

taglib 지시어

El(표현 언어)에서 자바 클래스의 메서드를 호출하거나 JSTL(JSP 표준 태그 라이브러리)를 사용하기 위한 지시어입니다!!
해당 부분은 추후 학습 예정입니다.

스크립트 요소

JSP에서 Java코드를 직접 작성할 수 있게 해주는 부분입니다.
용도에 따라 아래 3가지로 구분 됩니다.

  • 선언부
    표현식, 스크립틀릿에서 사용할 변수나 메서드를 선언합니다. _jspService() 메서드 외부에 위치합니다.
  • 스크립틀릿
    JSP 페이지가 요청을 받을 때 실행되야할 Java코드를 작성합니다. _jspService() 메서드 내부에 위치합니다.
  • 표현식
    화면에 값을 하나씩 표현해줄 때 사용합니다. _jspService() 메서드 내부에 위치합니다.

스크립틀릿에서는 메서드를 선언할 수 없나요?
JSP 파일은 실행될 때 Java파일(서블릿)으로 변환되는데,
이 때 _jspService() 라는 메서드가 생성되고 선언부는 _jspService() 외부에 위치하고, 스크립틀릿의 경우 _jspService() 내부에 위치합니다.

따라서 자바 문법 상 메서드 내부에서는 새로운 메서드를 선언할 수 없기 때문에 스클립틀릿에서는 새로운 메서드를 선언할 수는 없고 사용만 할 수 있습니다.

추후 학습하게 되겠지만 _jspService() 메서드의 경우 JSP의 내장객체를 생성하는 부분입니다. 따라서 스크립틀릿에서는 마음껏 JSP의 내장객체를 사용할 수 있지만,
선언부에서는 직접 사용할 수는 없고 매개변수로 받아서 사용할 수만 있습니다.

선언부

선언부 (Declaration) 에서는 스크립틀릿, 표현식에서 사용할 변수나, 메서드 등을 선언할 수 있습니다.
JSP에서 제공하는 내장객체를 직접 사용할 수 없습니다. 메서드의 매개변수로 받아서 사용할 수는 있습니다.

  • 작성방식
<%! 선언부 내용 %>

스크립틀릿

스크립틀릿 (Scriptlet) 에서는 실행해야할 Java코드를 작성합니다. 주로 선언부에서 작성한 메서드와 변수를 활용하여 연산을 하거나, JSP의 내장객체를 이용해 실행할 코드를 작성합니다.

  • 작성방식
<% 스크립틀릿 내용 %>

표현식

표현식(Expression) 에서는 실행결과 값이 하나만 남는 문장을 뜻하며, 결과값이 하나만 나오는 값을 화면에 표시해줄 때 사용합니다.
스크립틀릿 안에서 out.print()를 사용하는 것과 유사하며, 좀 더 단순하게 값을 바로 출력할 때 사용됩니다.

  • 작성방식
<%= 표현식 내용 %>

참고

성낙현의 JSP 자바 웹 프로그래밍 2판 - 성낙현 지음
위 책을 공부하며 작성하고 있습니다!

profile
블로그 이전 했습니다. 아래 블로그 아이콘(🏠) 눌러서 놀러오세요

0개의 댓글