JSP 개념 / 탄생 배경 / 동작 원리 / JSP 기본 구조

2023. 10. 21. 01:08웹/백엔드-JSP-Servlet

728x90
반응형

JSP란

JSP는 동적인 웹 페이지를 개발하기 위한 웹 프로그래밍 기술.

자바 언어를 사용하여 서버측에서 웹 페이지을 생성해 웹 브라우저로 전송해 줍니다.

자바를 서버 개발 언어로 자리 잡게 한 일등 공신.

장점

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

활용 사례

JSP는 기업용 자바 기술의 집합체인 Java EE의 핵심 요소이며, Java EE는 대한민국 정부 표준 프레임워크의 근간 임.

구글 앱 엔진, 아마존 웹 서비스 등에서도 지원해주고 있음.

 

기본 용어 소개

출처 : Minjoo Kwon — coding journey

서버(Server)

웹에서 서비스를 제공하는 컴퓨터 시스템을 말합니다. 서버는 우리말로 레스토랑에서 '시중드는 사람' 정도로 비유할 수 있습니다. 우리는 주로 정보를 검색하기 위해 포털 사이트를 이용하고, 필요한 물품을 구매하기 위해 쇼핑몰을 이용하게 되는데, 이런 서비스를 제공하는 웹 애플리케이션은 서버 컴퓨터에 파일의 형태로 저장되어 있습니다.

웹 서버(Web Server)

사용자로부터 HTTP를 통해 요청을 받거나, 웹 컨테이너가 전달해준 결과물을 정적인 페이지로 생성하여 사용자에게 응답해주는 소프트웨어를 말합니다. 웹 페이지는 주로 HTML, CSS, 자바스크립트 등으로 구성됩니다.

웹 컨테이너(Web Container)

웹 서버가 전송해준 요청을 기초로 동적인 페이지를 생성하여 웹 서버로 돌려줍니다. '동적'인 페이지라고 표현하는 이유는 사용자마다 다른 결과로 응답할 수 있기 때문인데, 간단한 예로 로그인이 있습니다. 로그인한 아이디를 보고 각자에 맞는 페이지를 구성해 보내 주는 것입니다.

WAS(Web Application Server)

웹 애플리케이션이 실행될 수 있는 환경을 제공하는 소프트웨어로, 컴퓨터에서 운영체제(윈도우, 리눅스 등)와 비슷한 역할을 하는 '소프트웨어'라 할 수 있습니다. WAS는 웹 서버와 웹 컨테이너를 포함한 개념, 대표적으로 톰캣, 웹로직, 웹스피어 등의 제품이 있습니다.

HTTP/ HTTPS

보통 www라고 줄여 쓰는 월드 와이드 웹에서 웹 서버와 사용자 사이의 "통신 규약"을 말하며, 사용자가 요청하면 웹 서버가 응답하는 단순한 구조입니다. HTTPS는 HTTP가 암호화된 것입니다.

프로토콜(Protocol)

네트워크를 통해 컴퓨터들이정보를 주고받는 절차 혹은 통신 규약을 말합니다. 프로토콜은 서로 다른 컴퓨터들이 대화하는 데 필요한 공통 언어 역할을 해줍니다. 앞에서 설명한 HTTP도 프로토콜의 한 종류이고, 다른 프로토콜로는 파일 전송을 위한 FTP, 이메일 전송을 위한 SMTP 등이 있습니다.

포트(Port)

포트를 직역하면 '항구'라는 뜻인데, 컴퓨터 사이에서 데이터를 주고받을 수 있는 통로를 말합니다. 인터넷에서는 IP 주소를 통해 서버 컴퓨터의 위치를 파악합니다. 그런 다음 그 컴퓨터가 제공하는 특정 서비스는 포트 번호를 통해 알 수 있습니다. 우리가 이용하는 인터넷상의 모든 서비스는 IP 주소와 함께 포트 번호까지 지정해야 제대로 요청을 전달할 수 있습니다. 대표적으로 HTTP는 80번 포트를, 보안이 적용된 HTTPS는 443번 포트를 사용합니다.


JSP란 동적 웹 페이지를 쉽고 빠르게 제작할 수 있도록 자바가 제시한 해법.

정적 웹 페이지 / 동적 웹 페이지

정적 웹 페이지란, '저장되어 있는 파일을 그대로' 웹 브라우저에 전송해 출력하는 가장 기본적인 웹 페이지를 의미합니다.

클라이언트가 어떤 형태로 요청하더라도 같은 페에지는 항상 동일한 모습을 보여주기 때문에 '정적'이라 불립니다.

 

동적 웹 페이지란, 동일한 페이지라 할지라도 그때그때 내용이 달라질 수 있는 웹 페이지입니다. 계정, 시간, 지역, 언어, 기타 입력값에 따라 다른 결과를 출력합니다.

출처 : 골드 레빗

애플릿, 동적 웹을 향한 자바의 첫걸음

애플릿은 웹에서 실행되도록 설계된 자바 애플리케이션을 통째로 웹 브라우저로 전송한 후, 자바 가상 머신을 탑재한 웹 브라우저가 이를 실행하는 방식으로 구동됩니다. HTML과 자바스크립트가 발전하면서 지금은 더 이상 지원되지 않은 추억의 기술입니다.

서블릿, 자바 웹 기술의 새 지평을 열다

요청을 받으면 서버에서 처리한 후, 응답으로는 결과값만 보내주는 구조입니다. 서블릿은 자바 파일을 컴파일한 클래스 파일 형태입니다. 이를 실행하고 관리해주는 런타임을 서블릿 컨테이너라고 합니다. 대표적인 서블릿 컨테이너로는 아파치 톰캣이 있습니다.

https://dinfree.com/lecture/backend/javaweb_2.1.html

JSP, 자바 웹 기술의 최종 진화

HTML 코드를 일일이 자바로 생성, 조합하다 보니 너무 많은 코드가 필요하여, 기본을 HTML로 하고 필요한 부분만 자바 코드를 삽입하는 형태인 JSP가 탄생하게 되었습니다. 

출처 : been

출처 : som2na.log

출처 : 한코딩

 

[웹 프로그래밍] JSP 전체 동작 과정 및 기본 실습

안녕하세요. 코딩 좀 해본 한코딩입니다. 교내 교과목인 웹 프로그래밍 수업 하면서 배운 것을 정리해보겠...

blog.naver.com

서블릿 JSP
자바 코드 안에서 전체 HTML 페이지를 생성 HTML 코드 안에서 필요한 부분만 자바 코드를 스크립트 형태로 추가
변수 선언 및 초기화가 반드시 선생되어야 함 자주 쓰이는 기능을 내장 객체로 제공하여 즉시 사용할 수 있음
컨트롤러를 만들 떄 사용 처리된 결과를 보여주는 뷰를 만들 때 사용

JSP가 서블릿으로 변환되어 실행되고 class로 변환되어 실행 됩니다.

오늘날의 웹 사이트

출처 : mer1

 

변하지 않는 정보는 정적 웹 페이지가 훨씬 유리합니다. 그래서 동적, 정적 웹 페이지가 혼합된 형태로 웹 사이트는 이루어져 있습니다. 


JSP 파일 기본 구조

 

지시어(Directive)

지시어는 JSP를 자바 코드로 변환하는 데 필요한 정보를 JSP 엔진에 알려줍니다. 주로 스크립트 언어나 인코딩 방식 등을 설정합니다. 

기본 구문은 다음과 같습니다.

<%@ 지시어의 종류 속성1="값1" 속성2="값2" .....%>
  • page 지시어 : JSP 페이지에 대한 정보를 설정합니다.
  • include 지시어 : 외부 파일을 현재 JSP 페이지에 포함시킵니다.
  • taglib 지시어 : 표현 언어에서 사용할 자바 클래스나 JSTL을 선언합니다.

page 지시어

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

속성 내용 기본값
info 페이지에 대한 설명을 입력한다. -
language 페이지에서 사용할 스트랩팅 언어를 지정한다. java
contentType 페이지에서 생성할 MIME 타입을 지정한다. -
pageEncoding charset과 같이 인코딩을 지정한다. ISO-8859-1
import 페이지에서 사용할 자바 패키지와 클래스를 지정한다. -
session 세션 사용 여부를 지정한다. true
buffer 출력 버퍼의 크기를 지정한다. 8KB
autoFlush 출력 버퍼가 모두 채워졌을 때 자동으로 비울 지를 결정한다. ture
trimDirective
Whitespaces
지시어 선언으로 인한 공백을 제거할지 여부를 지정한다. flase
errorPage 해당 페이지에서 에러가 발생했을 때 발생 여부를 보여줄 페이지를 지정한다. -
isErrorPage 해당 페이지가 에러를 처리할지 여부를 지정한다. false

출처 : 각진 세상..

 

[JSP] 지시어(Directive)

지시어는 JSP 페이지를 자바(서블릿)코드로 변환하는 데 필요한 정보를 JSP 엔진에 알려준다. 주로 스크립트 언어나 인코딩 방식 등을 설정하며 지시자 혹은 디렉티브로 부른다. 지시자의 기본 구

this-circle-jeong.tistory.com

language, contentType, pageEncoding 속성

<%@ page language="java" contentType="text/html"; charset=utf-8" pageEncoding="UTF-8" %>
  • language : 스크립팅 언어는 자바
  • contentType : 문서의 타입, 즉 MIME 타입은  text/html, 캐릭터셋은 UTF-8 
  • pageEncoding: 소스 코드의 인코딩 방식은 UTF-8의미

캐리터셋이나 인코딩의 기본값은 ISO-8859-1(영어, 서유럽어 문자 포함)이여 한글은 표현이 안되어 UTF-8로 설정하여 사용해줘야 합니다.

 

import 속성

자바에서 외부 클래스를 사용하려면 import문으로 해당 패키지나 클래스를 가져와야 하듯이, JSP 파일에서도 필요한 클래스가 있으면 임포트해서 사용할 수 있습니다. 이때 사용하는 것이 바로 page 지시어의 import 속성입니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 필요한 외부 클래스 임포드 -->
<%@ page import="java.text.SimpleDateFormat" %> 
<%@ page import ="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page 지시어 - import 속성</title>
</head>
<body>

<%
 //외부 클래스 생성
 Date today = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String todayStr = dateFormat.format(today);
out.println("오늘 날짜 : " + todayStr); // 오늘 날짜를 웹 브라우저에 출력

%>
</body>
</html>

info 속성

페이지 내용을 설명을 입력하여 사용합니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page info="info 속성 사용해 보기" %>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>page 지시어 - info속성</title>
	</head>
	<body>
		<p>
			page info : <%= getServletInfo() %>
		</p>
	</body>
	</html>

errorPage, isErrorPage 속성

에러 처리 방법 2가지

  1. try/catch를 사용하여 직접 에러 처리
  2. errorPage, isErrorPage 속성을 사용하여 디자인이 적용된 페이지로 대체

try/catch 사용하여 에러 처리

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page 지시어 - errorPage, isErrorPage 속성</title>
</head>
<body>
<%
	try{
		int myAge = Integer.parseInt(request.getParameter("age")) + 10;
		out.println("10년 후 당신의 나이는" + myAge + "입니다.");
		
	}catch (Exception e){
		out.println("예외 발생 : 매개변수 age가 null입니다.");
	}

%>
</body>
</html>

errorPage, isErrorPage 사용

errorPage속성에 에러시 나올 페이지 이름을 작성

error 페이지에는 isErrorPage 속성을 true로 바꿔준다.

500 page

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" errorPage="beautyErrorPage.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>errorPage 500</title>
</head>
<body>
	<%
	int myAge = Integer.parseInt(request.getParameter("age")) + 10;
	out.println("10년 후 당신의 나이는" + myAge + "입니다.");
	%>
</body>
</html>

500 page 처리 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"  isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>beauty Error Page</title>
<style>

      body {
        background-color: #f1f1f1;
        margin: 0;
      }
      body,
      input,
      button {
        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
      }

      .container { margin: 50px auto 40px auto; width: 600px; text-align: center; }

      a { color: #4183c4; text-decoration: none; }
      a:hover { text-decoration: underline; }

      h1 { letter-spacing: -1px; line-height: 60px; font-size: 60px; font-weight: 100; margin: 0px; text-shadow: 0 1px 0 #fff; }
      p { color: rgba(0, 0, 0, 0.5); margin: 10px 0 10px; font-size: 18px; font-weight: 200; line-height: 1.6em;}

      ul { list-style: none; margin: 25px 0; padding: 0; }
      li { display: table-cell; font-weight: bold; width: 1%; }

      .logo { display: inline-block; margin-top: 35px; }
      .logo-img-2x { display: none; }
      @media
      only screen and (-webkit-min-device-pixel-ratio: 2),
      only screen and (   min--moz-device-pixel-ratio: 2),
      only screen and (     -o-min-device-pixel-ratio: 2/1),
      only screen and (        min-device-pixel-ratio: 2),
      only screen and (                min-resolution: 192dpi),
      only screen and (                min-resolution: 2dppx) {
        .logo-img-1x { display: none; }
        .logo-img-2x { display: inline-block; }
      }

      #suggestions {
        margin-top: 35px;
        color: #ccc;
      }
      #suggestions a {
        color: #666666;
        font-weight: 200;
        font-size: 14px;
        margin: 0 10px;
      }

      #parallax_wrapper {
        position: relative;
        z-index: 0;
      }
      #parallax_field {
        overflow: hidden;
        position: absolute;
        left: 0;
        top: 0;
        height: 380px;
        width: 100%;
      }
      #parallax_illustration {
        display: block;
        margin: 0 auto;
        width: 940px;
        height: 380px;
        position: relative;
        overflow: hidden;
      }
      #parallax_illustration #parallax_sign {
        position: absolute;
        top: 25px;
        left: 582px;
        z-index: 10;
      }
      #parallax_illustration #parallax_octocat {
        position: absolute;
        top: 66px;
        left: 431px;
        z-index: 8;
      }
      #parallax_illustration #parallax_error_text {
        display: block;
        width: 400px;
        height: 144px;
        position: absolute;
        top: 165px;
        left: 152px;
        font-family:Arial, Helvetica, sans-serif;
        font-weight: bold;
        font-size: 14px;
        line-height: 18px;
        background-image: url('data:image/png;base64,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');
        background-repeat: no-repeat;
        padding: 64px 0 0 106px;
        color: #183913;
        text-shadow: 1px 1px 0px rgba(0, 0, 0, 0.30);
        z-index: 5;
      }
      #parallax_field #parallax_bg {
        overflow: hidden;
        width: 105%;
        position: absolute;
        top: -20px;
        left: -20px;
        z-index: 1;
      }
      #parallax_illustration #parallax_error_text span {
        display: block;
        margin-left: 12px;
      }
    

</style>
</head>
<body>
<div id="parallax_wrapper">
      <div id="parallax_field">
        <img alt="" class="js-plaxify" data-xrange="20" data-yrange="20" height="415" id="parallax_bg" width="980" src="data:image/jpeg;base64,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

buffer, autoFlush 속성

출처: 아티스트 디벨로퍼

 

컴퓨팅에서, 버퍼는 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역이다. 버퍼링(buffering)이란 버퍼를 활용하는 방식 또는 버퍼를 채우는 동작을 말한다. 다른 말로 '큐(Queue)'라고도 표현한다. (출처 : 위키)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"  buffer="1kb" autoFlush="false"%><!-- 버퍼 설정 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page 지시어 - buffer, autoFlush 속성</title>
</head>
<body>
<%
	for(int i=0; i<=100; i++){ //버퍼 채우기
		out.println("abcde12345");  
	}
%>
</body>
</html>

 


include 지시어

includeFile

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.time.LocalDate" %>
<%@ page import="java.time.LocalDateTime" %>
 <%
 LocalDate today = LocalDate.now();
 LocalDateTime tomorrow = LocalDateTime.now().plusDays(1);
 %>

 

includeMain

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include  file="includeFile.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Include 지시어</title>
</head>
<body>
<%
	out.println("오늘 날짜 : " + today); //includeFile.jsp에서 선언한 변수 사용
	out.println("<br/>");
	out.println("내일 날짜 : "+ tomorrow);//includeFile.jsp에서 선언한 변수 사용

%>
</body>
</html>


스크립트 요소

JSP에서 자바 코드를 직접 작성할 수 있는 요소입니다. 선언부, 스크립틀릿, 표현식이 있습니다.

JSP는 클래스로 컴파일되는 과정에서 _jspService()메서드 내부 혹은 외부에 놓일 수 있는데, 선언부는 외부, 스크립틀릿, 표현식은 내부에 작성됩니다. 그래서 스크립트릿에 '메서드'를 작성하면 오류가 나는데, 메서드 안에 메서드를 선언하면 자바에서는 에러가 나기 때문입니다.

 

  • 선언부
    • 멤버 변수, 메서드를 선언
  • 스크립틀릿
    • 실행돼야 할 자바 코드를 작성하는 영역
  • 표현식
    • 실행 결과로 하나의 값이 남는 문장을 뜻하며, 값을 화면에 출력할 때 사용합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%!
 //선언부
 public int add(int left, int right){
	 return left + right;
 }
 %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>스크립트 요소</title>
</head>
<body>
<% 
	//스크립틀릿(자바 코드)
	int result = add(3,5);
%>
덧셈 결과 1 : <%=result %><br/> <!-- 표현식(변수) -->
덧셈 결과 2 : <%=add(30,40) %> <!-- 표현식(메서드 호출) -->
</body>
</html>

 

JSP는 지시어와 스크립트 요소로 이루어집니다.

페이지대한 설정은 지시어를 통해 한 후, 요청을 처리할 자바 코드는 스크립트 요소에 작성합니다.

 

지시어

page, include, taglib

스크립트 요소

선언부, 스크립틀릿, 표현식

반응형

' > 백엔드-JSP-Servlet' 카테고리의 다른 글

참고하면 좋은 사이트..  (0) 2023.05.19