JSP에 대해서
- JSP를 학습하기 위해 필요한 도구의 설명
① OpenJDK 11 : 자바 프로그램을 컴파일하고 실행해주는 기본 도구
② Tomcat : JSP와 서블릿을 실행하기 위한 웹 서버
③ 이클립스 : 전체 도구를 아우르는 통합 개발 환경(IDE)
④ Oracle : 데이터베이스 관리 시스템 (추후 설치할 예정)
- JSP ( JavaServer Pages )란?
· 동적인 웹 페이지를 개발하기 위한 웹 프로그래밍 기술
· 자바 언어로 서버 측에서 웹 페이지들을 생성해 웹 브라우저로 전송
→ 즉, JSP가 실행되면 자바 서블릿으로 변환되며 웹 애플리케이션 서버에서 동작되면서 필요한 기능을 수행함
그 결과 생성된 데이터를 웹 페이지와 함께 클라이언트로 응답함
· 장점
❶ 짧은 코드로 동적인 웹 페이지를 생성
❷ 기본적인 예외는 자동으로 처리
❸ 많은 확장 라이브러리를 사용
❹ 스레드 기반으로 실행되어 시스템 자원을 절약
- 기본 용어 정리
· 서버(Server)
: 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템을 의미
· 웹 서버(Web Server)
: HTTP 프로토콜을 기반으로 클라이언트가 웹 브라우저에서 어떠한 요청을 하면 그 요청을 받아 정적 컨텐츠를 제공하는 서버
( 정적 컨텐츠 : 단순 HTML 문서, CSS, 이미지, 파일 등 즉시 응답 가능한 컨텐츠 )
웹 서버가 정적 컨텐츠가 아닌 동적 컨텐츠를 요청 받을 경우, WAS에게 해당 요청을 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달하는 역할도 해줌
· WAS(Web Application Server)
: DB 조회 혹은 다양한 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application 서버
HTTP 프로토콜을 기반으로 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어로서, 동적 서버 컨텐츠를 수행하는 것으로 웹 서버와 구별이 되며 주로 데이터베이스 서버와 같이 수행됨
→ JSP, Servlet 구동환경을 제공해주기 때문에 서블릿 컨테이너 혹은 웹 컨테이너로 불림
· 웹 컨테이너(Web Container)
: 웹 서버가 보낸 JSP, PHP 등의 파일을 수행한 결과를 다시 웹 서버로 보내주는 역할을 함
· 프로토콜(protocol)
: 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계를 의미 즉, 통신 규약 및 약속을 말함
· 포트(port)
: IP 내에서 애플리케이션 상호 구분(프로세스 구분)을 위해 사용하는 번호
포트 숫자는 IP 주소가 가리키는 PC에 접속할 수 있는 통로(채널)을 의미함
· HTTP(HyperText Transfer Protocol)
: 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜
HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약으로, 80번 포트를 사용하고 있음
즉, HTTP 서버가 80번 포트에서 요청을 기다리고 있으며, 클라이언트는 80번 포트로 요청을 보내게 됨
· HTTPS(HTTP Secure)
: HTTP에 데이터 암호화가 추가된 프로토콜
HTTPS는 HTTP와 다르게 443번 포트를 사용ㅎ하며, 네트워크 상에서 중간에 제 3자가 정보를 볼 수 없도록 암호화를 지원하고 있음
[참고 자료]
https://codechasseur.tistory.com/25
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
https://mangkyu.tistory.com/98
- 정적 웹 페이지와 동적 웹 페이지
① 정적 웹 페이지
· 서버( 웹 서버 )에 미리 저장된 파일( HTML파일, 이미지 등 )이 그대로 전달되는 웹 페이지
· 서버는 사용자가 요청(Request)에 해당하는 저장된 웹 페이지를 보냄
· 사용자는 서버에 저장된 데이터가 변경되지 않는 한 고정된 웹 페이지를 보게 됨
② 동적 웹 페이지
· 서버(웹 서버)에 있는 데이터들을 스크립트에 의해 가공처리한 후 생성되어 전달되는 웹 페이지
· 서버는 사용자의 요청(Request)을 해석하여 데이터를 가공한 후 생성되는 웹 페이지를 보게 됨
· 사용자는 상황, 시간, 요청 등에 따라 달라지는 웹 페이지를 보게 됨
③ 정적 웹 페이지와 동적 웹 페이지의 비교
정적 웹 페이지 | 동적 웹 페이지 | |
장점 | · 빠르다 ( 요청에 대한 파일만 전송하면 됨 - 추가적인 작업 없음) · 비용이 적다 ( 웹 서버만 구축하면 됨 ) |
· 다양한 서비스 ( 다양한 정보를 조합해 동적으로 생성하여 제공 가능 ) · 관리가 쉽다 ( 웹 사이트 구조에 따라 추가 / 수정 / 삭제 등의 작업이 용이 ) |
단점 | · 한정적인 서비스 ( 저장된 정보만 보여줄 수 있음 ) · 관리가 힘들다 ( 추가 / 수정 / 삭제의 작업 모두 수동적 ) |
· 상대적으로 느리다 ( 사용자에게 웹 페이지를 전달하기 전에 처리하는 작업이 필요 ) · 추가 비용이 든다 ( 웹 서버 외에 추가적인 처리를 위한 애플리케이션 서버인 WAS가 필요 ) |
- 서블릿 ( Servlet ) : 웹 서버가 동적인 웹 페이지를 제공할 수 있도록 도와주는 애플리케이션
· 서블릿 : 서버 측에서 실행 ( 클라이언트의 요청을 받으면 서버에서 처리한 후, 응답으로는 결과값만 보내주는 구조 )
자바 파일(.java)을 컴파일한 클래스 파일(.class) 형태
· 서블릿 컨테이너 : 서블릿을 실행하고 관리해주는 런타임 서버로, Apache Tomcat이 대표적인 서블릿 컨테이너
▷ 서블릿의 특징
❶ 클라이언트의 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트
❷ HTML을 사용하여 요청에 응답함
❸ Java Thread를 이용하여 동작함
❹ MVC 패턴에서 Controller로 이용됨
❺ HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속 받음
❻ HTML 변경 시 Servlet을 재컴파일해야 하는 단점
▷ 서블릿 동작 방식
서블릿은 HTTP 프로토콜을 사용하는 웹 환경이나 서버환경에서 쓰이는 기술이므로, HTTP에 대한 이해가 필요함( 참고자료 )
전체적인 흐름은 쓰레드를 배운 후, 공부하기로 하고 우선 대략적인 흐름만 공부하자
① 클라이언트가 URL 입력 → HTTP Request가 Servlet Container(Apache Tomcat)로 전송
② 요청을 받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체 생성
③ web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾음
④ 해당 서블릿에서 service( ) 메서드를 호출한 후, 클라이언트의 GET, POST 여부에 다라 doGet( ) 또는 doPost( ) 메서드 호출
⑤ doGet( ) 또는 doPost( ) 메서드는 동적 페이지를 생성한 후, HttpServletResponse 객체에 응답을 보냄
⑥ 응답이 끝나면, HttpServletRequest, HttpServletResponse 객체는 소멸됨
( 요약 )
클라이언트 URL 요청 → 웹 서버가 전달 받고 컨테이너로 전달 → Servlet 객체 + 쓰레드 생성
→ 쓰레드가 service( ) 메서드 호출 → doGet( ), doPost( ) 인지 파악한 뒤, response, request 객체를 인자로 메서드 호출
→ 웹 페이지 생성 → Container, WebServer, Client로 응답 전달
[ 참고 자료 ]
https://mangkyu.tistory.com/14
https://milancode.tistory.com/19
https://milancode.tistory.com/18
- JSP : 자바 웹 기술의 최종 진화
· JSP : 기본을 HTML로 하고 필요한 부분만 자바 코드를 삽입하는 형태
· JSP : 클라이언트에게 보여지는 결과 페이지를 생성할 때 주로 사용
Servlet : UI 요소가 없는 제어나 기타 처리 용도로 사용
- 서블릿과 JSP 차이점
서블릿 | JSP |
자바 코드 안에서 전체 HTML 페이지를 생성 | HTML 코드 안에서 필요한 부분만 자바코드를 스크립트 형태로 추가 |
변수 선언 및 초기화가 반드시 선행되어야 함 | 자주 쓰이는 기능을 내장 객체로 제공하여 즉시 사용 가능 |
Controller를 만들 때 사용 | 처리된 결과를 보여주는 View로 만들 때 사용 |
STS 초기 설정(encoding)
[ Preferences ] - 왼쪽 검색창 : enc 검색
❶ [ Workspace ] - 하단의 [ Text file encoding ] Other : UTF-8로 설정 - [ Apply ]
❷ [ web ]에 있는 CSS Files, HTML Files, JSP Files 모두 Encoding을 UTF-8로 설정 - [ Apply ]
❸ [ General ] - [ Content Types ] - JSP, JSP Fragment, JSP Tag Definition, XML JSP Tag Definition 모두 Default encoding을 UTF-8로 설정 - [ Update ]
❹ [ General ] - [ Content Types ] - Gradle Build Script, CSS, HTML 모두 Default encoding을 UTF-8로 설정 - [ Update ]
→ [ Apply and Close ] 클릭하면 설정 완료!
JSP Servlet 기초(1)
▶ Dynamic Web Project 생성
: [ File ] - [ Dynamic Web Project ] 클릭 → Project name : JspStudy 입력 후, [ Next ]
Generate web.xml deployment describer : 체크 후, [ Finish ]
만약 체크하지 않고 프로젝트를 생성한 경우, 프로젝트에서 오른쪽 클릭 - [ Java EE Tools ] - [ Generate Deployment Descriptor Stub ] 클릭하면 web.xml 생성됨
Package Explorer 창에서 JspStudy 프로젝트 확인 가능
❶ web.xml : 기본 웹 설정하는 파일로, 외부에서 WEB-INF 폴더에 접근하지 못하도록 설정
❷ WEB-INF : 보안 목적 → 이 폴더는 외부에서 네트워크를 통해 접근 불가
(나중에 자세히 배울 예정)
▶ JSP File 생성
: 해당 프로젝트에서 오른쪽 클릭 - [ New ] - [ JSP File ] → File name : hello.jsp 입력 후, [ Finish ]
생성된 hello.jsp 파일을 열어보면, JSP 파일 기본 구조를 볼 수 있다
JSP의 주된 목적은 웹 브라우저에 띄울 HTML 파일을 생성하는 것!
▷ 지시어 (Directive)
- 지시어 : JSP 페이지를 자바(서블릿) 코드로 변환하는 데 필요한 정보를 JSP 엔진에 알려주며, 주로 스크립트 언어나 인코딩 방식들을 설정
<%@ 지시어종류 속성1="값1" 속성2="값2" ... %>
- 지시어 종류
① page 지시어 : JSP 페이지에 대한 정보를 설정
② include 지시어 : 외부 파일을 현재 JSP 페이지에 포함시킴
③ taglib 지시어 : 표현 언어에서 사용할 자바 클래스나 JSTL을 선언
→ 우선, page 지시어에 대해서만 정리하자
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
page 지시어를 이용 → 현재 만들고 있는 JSP 페이지에 대한 설정
❶ language : 페이지에서 사용할 스크립팅 언어를 지정 → 스크립팅 언어는 자바 사용
❷ contentType : 페이지에서 생성할 문서의 타입 설정 → 즉, MIME 타입은 text/html이고, charset은 UTF-8
+ MIME 타입 ( Multipurpose Internet Mail Extensions ) : 파일 변환을 의미
즉, 파일의 종류 / 문서 형식을 의미 → text/html : text 파일이며, 문서는 html 형식
❸ pageEncoding : 소스 코드의 인코딩 방식은 UTF-8
이제 hello.jsp 파일에서 <body> 태그 안에 <form>태그를 이용해 데이터를 보낼 준비를 해보자.
<form> : 클라이언트의 요청이나 데이터를 전송하는 기능
→ 태그 내에 입력된 정보를 한 번에 서버로 전송이 되며, 입력된 정보와 함께 나온 결과로 설정된 페이지를 보여줌
- action : 데이터를 보낼 곳을 의미
- method : 데이터 전송 방식을 지정 → get 또는 post방식 선택
<label> : <input> 태그들에 대해 의미를 설명할 때 사용
ex ) <label>이름 : </label>
→ 다음 나오는 <input> 태그는 이름을 입력하는 곳이다
<input> 태그의 입력 타입
- type="text" : 한 줄의 입력 필드 정의
- type="password" : 필드의 문자는 동그라미로 가려짐
- type="submit" : value값인 "전송"이라는 이름의 버튼을 생성
→ 생성된 버튼을 누르면 <form> 태그가 <form> 태그 안의 데이터들을 가지고 action="Study"로 보내짐
Servlet 파일을 생성해보자
다음과 같이 choongang.web.jsp 패키지 내에 Study이름으로 서블릿 파일을 생성시켰다
※ jsp파일에서 <form>의 action으로 지정한 데이터를 보낼 곳과 서블릿 파일의 이름이 같아야 함!
파일 생성 후, [ Refresh ] → Package Explorer창에서 확인 가능
Study 파일을 열어보자
@WebServlet("/Study") : 웹 서블릿 어노테이션으로 파일명과 일치시킴
- 웹 서블릿 어노테이션을 달아줘야 jsp파일에서 action을 이용해 데이터를 원하는 서블릿으로 보내줄 수 있음
jsp파일에서 method="post"방식으로 데이터를 전송시키면, 서블릿 파일의 doPost( ) 메서드가 호출됨
jsp파일에서 method="get"방식으로 데이터를 전송시키면, 서블릿 파일의 doGet( ) 메서드가 호출됨
이제 실행시켜보자
❶ 프로젝트 단위에서 실행 : JspStudy에서 오른쪽 클릭 - [ Run As ] - [ Run on Server ]
HTTP 상태 404 - 찾을 수 없음
이유 : Project 단위로 실행 시, welcome-file를 통해 접근해야 함
( welcome-file-list는 web.xml을 통해 알 수 있음 - 아래 사진 참고 )
즉, 아래 사진에 제시된 파일 중 하나만 존재하면 해결됨
∴ index.jsp를 생성시켜보자
❷ 파일에서 직접 실행 : hello.jsp에서 오른쪽 클릭 - [ Run As ] - [ Run on Server ]
'백엔드 > JSP' 카테고리의 다른 글
JSP Servlet 기초 (3) : JSP 태그 (0) | 2023.06.11 |
---|---|
내장객체 request와 response (0) | 2023.06.11 |
JSP lifestyle (0) | 2023.06.10 |
JSP Servlet 기초 (2) (0) | 2023.06.09 |
Tomcat 다운로드 및 서버 연동시키기 (0) | 2023.06.07 |