2023. 10. 21. 01:08ㆍ웹/백엔드-JSP-Servlet
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가 탄생하게 되었습니다.
서블릿 | JSP |
자바 코드 안에서 전체 HTML 페이지를 생성 | HTML 코드 안에서 필요한 부분만 자바 코드를 스크립트 형태로 추가 |
변수 선언 및 초기화가 반드시 선생되어야 함 | 자주 쓰이는 기능을 내장 객체로 제공하여 즉시 사용할 수 있음 |
컨트롤러를 만들 떄 사용 | 처리된 결과를 보여주는 뷰를 만들 때 사용 |
JSP가 서블릿으로 변환되어 실행되고 class로 변환되어 실행 됩니다.
오늘날의 웹 사이트
변하지 않는 정보는 정적 웹 페이지가 훨씬 유리합니다. 그래서 동적, 정적 웹 페이지가 혼합된 형태로 웹 사이트는 이루어져 있습니다.
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 |
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가지
- try/catch를 사용하여 직접 에러 처리
- 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 |
---|