JSP
Java Server Pages
서블릿이라는 자바 웹 프로그래밍 기술에 기반
따라서 JSP로 프로그램을 개발하려면 자바 웹 개발환경을 먼저 구축해야 함
HTML 안에 Java 코드를 삽입하여 동적인 웹 페이지를 생성하는 기술
클라이언트의 요청에 따라 HTML, XML 등의 웹 문서를 생성함
서블릿에서 HTML과 데이터 결합을 손쉽게 처리하기 위해 만들어짐
<html>
...
<h2> <%= username %> </h2>
...
</html>
장점
- HTPL 파일에 자바 기술을 거의 무한대로 사용가능, 비교적 쉽게 프로그래밍 가능
- 커스텀 태그 라이브러리 등 JSP 개발에 도움이 되는 확장 태그 구조를 사용할 수 있음
- 서블릿으로 변환되어 실행되므로 서브릿의 장점을 모두 가짐
- MVC 패턴, 스프링 프레임워크 등 잘 설계된 구조를 적용할 수 있어 체계가 잡히면 개발 생산성 향상, 성능 보장
- 모든 개발이 서버에서 이루어지므로 개발의 집중화를 통한 효울이 있을 수 있음
단점
- 화면 구성요소를 변경하면 JSP → 자바 → 클래스 → 서블릿 실행 과정을 거침
개발과정에서 사소한 UI 변경일지라도 매번 확인하는데 시간이 소요됨 - 개발자와 디자이너 간 역할부담 제약
- JSP 파일의 화면 디자인 확인에도 반드시 서블릿 컨테이너의 실행 필요
동적 웹 컨턴츠 생성
JSP는 사용자의 요청에 따라 실시간으로 변하는 웹 페이지를 만드는데 사용됨
프레젠테이션 로직 구현
비즈니스 로직과 프레젠테이션 로직(사용자 인터페이스를 처리하는데 사용되는)을 분리 개발 가능
JSP 페이지에서 HTML 태그와 Java 코드를 함께 작성하여 로직을 쉽게 구현할 수 있음
HTML은 정적인 웹페이지만 개발 가능하지만, JSP에서 Java를 사용하여 모든 기능을 활용할 수 있음
MVC (Model-Veiw-Controller) Pattern
JSP는 주로 View의 역할을 함
세션 관리
JSP는 세션을 관리하는 기능을 제공함
차이점 | Servlet | JSP |
코드 | 순수한 자바 코드로 구성 (HTML태그는 문자열 형태로 출력) |
HTML 안에 자바 코드를 추가하여 웹페이지 생성 가능 |
로직 | 비즈니스 로직을 처리하는데에 주로 사용 | 프레젠테이션 로직, 클라이언트에게 보여지는 View에 초점을 맞추어 사용 |
변환 · 실행 | 클라이언트의 요청마다 해당 메서드(doGet(), doPost() 등) 이 호출됨 |
처음 요청 시 내부적으로 서블릿으로 변환 후에 컴파일되어 실행 >> 동일한 요청이 들어올 때, 이미 컴파일된 서블릿코드가 실행됨 |
작업 단위 |
작은 단위 작업 | 큰 단위 작업 |
JSP 구성요소
지시어, 액션, 템플릿 데이터, 스크립트 요소, 커스텀태그와 EL
JSP 작동 방식
클라이어트가 JSP를 요청하면 웹 컨테이너(Tomcat)는 해당 JSP 파일을 서블릿 클래스로 변환하고 컴파일 함
→ 컴파일된 서블릿은 클라이언트의 요청 처리 후 응답을 반환함
▶ 자세한 흐름
과 정 | |
1 | 클라이언트의 요청 |
2 | JSP 파일 확인 >> 은 웹 컨테이너가 함 |
3 | 처음 요청인지 확인 후 서블릿 변환 (맨첨에한번) 및 (변환한 코드)컴파일 |
4 | 서블릿 실행 >> 클라이언트의 요청을 처리하기 위해서 실행됨 (데이터베이스조회, 비즈니스로직어쩌구) |
5 | 응답 생성 및 반환 >> 서블릿이 다 돌았으면 동적 HTML을 생성해서 클라이언트에 HTTP 응답으로 전송 |
6 | 재요청 처리 >> 만약에 이미 컴파일된 서블릿에대한 요청이면 서블릿 변환 및 컴파일은 건너뛰고 실행함 |
Directive Tag 디렉티브 태그 : JSP 지시어
<%@ 지시어 속성="값" %>
page
페이지 전체에 적용되는 속성
>> import, error page, 세션사용여부, 버퍼크기 등
<%@ page language="java" contentType="text/html; charset=urf-8" pageEncoding="UTF-8" %>
java.lang 빼고는 다 import 해줘야함 >> String Math System
contentType="application/msword" >> 지금 그 파일을 다운로드 해버림오타나도 걍 저장해버림 >> 난 모르겠으니까 해석 못하겠으니까 사용자가 알아서 해석하라고 저장해버리는거임
include
다른 파일을 현재 JSP에 포함시킴
<%@ include file="header.jsp" %>
taglib
태그 라이브러리를 현재 JSP에서 사용할 수 있도록 함
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="태그 라이브러리 경로" prefix="태그접두어" %>
<%@ taglib tagdir="태그 파일 경로" prefix="태그접두어" %>
Scripting Elements 스크립트 요소
JSP 내에 자바 코드를 삽입하는데 사용됨
Expression 표현식태그
<%= %> 사이에 위치한 코드는 자바에서의 결과값을 반환하고 최종적으로 HTML에 포함됨
세미콜론(;)을 붙이지 않음
<%= "Hello World" %>
- 웹 브라우저를 통해 클라이언트에 전달될(HTML 응답에 포함될) 자바 표현식을 포함
- out.println()의 인자로 적합한 모든 자바 코드가 가능
- 사칙연산, 메서드 호출, 변숫값을 문자열 형태로 출력 등에 사용
- EL로 대체 가능
<h2> <%= member.getUserName() %> </h2>
현재 날짜 시간:
<%= java.time.LocalDateTime.now() %>
Scriptlet 스크립트릿태그
<% %> 사이에 작성된 자바 코드는 서블릿 _jspService() 메서드에서 실행
여기서 로컬변수를 선언하거나 로직을 수행할 수 있음
>> 반복문 같은 것도
<!-- 변수 선언과 반복문의 예시 -->
<% String name = "Hello"; %>
<% for(int i=0; i<10; i++) { %>
<p><%= i %></p>
<% } %>
- 모든 자바 코드에의 사용 가능
- 서블릿 코드로 변환될 때 모든 HTML은 out.write() 형태로 변경됨
- HTML과 스트립트릿을 중간에 섞어 사용하는 것도 가능
- MVC 패턴 적용과 JSTL + EL 로 대체 가능
Declaration 선언태그
<%! %> 사이에 작성된 자바 코드는 서블릿 클래스 멤버 변수, 멤버 메서드로 선언됨 (객체변수 클래스변수)
<%! int count = 0; %>
JSP가 서블릿 코드로 변환될 때 _jspService() 메서드 안에 들어가게 되므로
JSP에서는 일반 자바 코드와 달리 멤버 변수나 메서드 선언은 기본적으로 불가능
멤버 변수나 메서드 선언이 필요하다면 사용할 수 있으나 권장하지는 않음
예제
example.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
String[] members = {"쪼랭", "부추"};
int num = 10;
int sum(int num2) {
return num + num2;
}
%>
<h3>
sum 실행결과 : <%= sum(20) %>
</h3>
<hr>
<h3> 배열 출력 </h3>
<ul>
<% for(String name : members) { %>
<li> <%=name %> </li>
<% } %>
</ul>
<h3>
<!-- HTML주석 : 화면에서는 안보이고 소스에서는 보임 -->
<%-- JSP주석 : 둘 다 안보임 --%>
</h3>
</body>
</html>
▼ 이렇게 나옴
'BackEnd > Servlet' 카테고리의 다른 글
DAO · DTO · Entity (+ ect) (0) | 2023.10.06 |
---|---|
MVC 패턴 · Dispatcher (0) | 2023.10.05 |
[Servlet] JSP 02 (0) | 2023.10.05 |
[Servlet] 02 (0) | 2023.10.04 |
[Servlet] 01 (0) | 2023.09.27 |