본문 바로가기
  • hello world
BackEnd/Servlet

[Servlet] JSP 01

by JJoajjoa 2023. 10. 4.

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