Study/Back-End

[JSP/Servlet] JSP ν•„μš”μ„±κ³Ό νŠΉμ§•, κ΅¬μ„±μš”μ†Œ (2023.05.15)

Shinjio 2023. 5. 15. 17:15
λ°˜μ‘ν˜•

🎈 JSP(JavaServer Pages) κ°œμš”

πŸ“– JSPλž€?

 

HTML μ½”λ“œμ— JAVA μ½”λ“œλ₯Ό λ„£μ–΄ 동적 μ›ΉνŽ˜μ΄μ§€λ₯Ό μƒμ„±ν•˜λŠ” μ›Ήμ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 도ꡬ

Java μ–Έμ–΄λ₯Ό 기반으둜 ν•˜λŠ” Server Side 슀크립트 μ–Έμ–΄

 

μ–Έμ–΄μ˜ μ’…λ₯˜

컴파일 μ–Έμ–΄
- ex. Java
- λ²ˆμ—­μ˜ λŠλ‚Œ
- μ½”λ“œλ₯Ό ν•œλ²ˆμ— ν•΄μ„ν•΄μ„œ λ‚˜μ€‘μ—λŠ” μ‹€ν–‰λ§Œ
- 해석은 μ˜€λž˜κ±Έλ¦¬μ§€λ§Œ 싀행은 λΉ λ₯΄λ‹€

인터프리터 μ–Έμ–΄(Python)톡역 - ν•œ 쀄씩 ν•΄μ„ν•˜κ³  μ‹€ν–‰ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“œλŠ” 데 μ‚¬μš©μŠ€ν¬λ¦½νŠΈ μ–Έμ–΄(JavaScript, JSP)인터프리터 언어에 μ†ν•¨ν•œ 쀄씩 ν•΄μ„ν•˜κ³  μ‹€ν–‰λ§Œλ“€μ–΄μ§„ ν”„λ‘œκ·Έλž¨μ„ μ œμ–΄ν•  λ•Œ μ‚¬μš©

 

πŸ“– JSPκ°€ ν•„μš”ν•œ 이유

βš™ Servlet의 νŠΉμ§•

ν•œ 클래슀 내에 Business Logicκ³Ό Presentation Logic이 같이 μž‘μ„±λ¨

(Business Logic : 데이터 λ°›μ•„μ„œ 가곡 및 처리 μˆ˜ν–‰)

 

 

 

πŸ“– JSP vs Servlet

 

 

 

μ›Ήν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€λ•Œμ—λŠ” Servletκ³Ό JSPλ₯Ό μ„žμ–΄μ„œ μ‚¬μš© 

둜직 κ΅¬ν˜„ > Servlet

ν™”λ©΄ ꡬ성 > JSP 

λ‚˜λˆ μ„œ μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ 더 λ§Žλ‹€. 

 

πŸ“– JSP의 νŠΉμ§•

- .jsp의 ν™•μž₯자λ₯Ό 가짐

- λ™μ μœΌλ‘œ μž‘λ™ν•˜μ—¬ 응닡은 HTML을 μ΄μš©ν•¨

- jsp >> μ„œλΈ”λ¦Ώ(.java) >> 클래슀(.class) >> html둜 λ³€ν™˜λ˜μ–΄ 싀행됨

 

HTML에 μžλ°” μ½”λ“œκ°€ μžˆμœΌλ―€λ‘œ 무쑰건 컴파일 λ˜μ–΄μ•Ό 함
jsp 파일 μžμ²΄κ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ‘λ‹΅λ˜λŠ”κ²Œ μ•„λ‹˜. 컴파일 된 ν›„ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 응닡 
jsp 컴파일될 수 μžˆλ„λ‘ μžλ°”λ‘œ λ³€ν™˜μ΄ λ˜μ–΄μ•Ό ν•˜λŠ”λ° 이 역할을 WAS λ‚΄ Web Container (ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œμΌœμ£ΌλŠ” μ—­ν• ) κ°€ μ•Œμ•„μ„œ μ§„ν–‰ν•΄μ€Œ
μš°λ¦¬λŠ” jspλ₯Ό μ“°μ§€λ§Œ web container μ•ˆμ—μ„œ μžλ™μœΌλ‘œ μžλ°” 파일둜 λ³€ν™˜ (.java) > μ»΄νŒŒμΌν•΄μ„œ .class 파일둜 λ³€ν™˜ > μ‹€ν–‰ν•˜λ©΄ 정적 λ¦¬μ†ŒμŠ€μΈ html둜 λ³€ν™˜ > 이 정적 html을 μ‘λ‹΅ν•΄μ£ΌλŠ” ꡬ쑰

 

 

 

🎈 JSP μž‘μ„±ν•˜κΈ°

 

jsp νŒŒμΌμ€ webapp 폴더 내에 μž‘μ„±

 

 

πŸ“– JSP κ΅¬μ„±μš”μ†Œ

 

 

<%@ : μ§€μ‹œμž

JSP에 λŒ€ν•œ μ„€μ • 정보 λ˜λŠ” JSP νŽ˜μ΄μ§€μ— λ‹€λ₯Έ λ¬Έμ„œλ₯Ό ν¬ν•¨μ‹œν‚¬ λ•Œ μ‚¬μš©

footer λ“± λ§Œλ“€μ–΄μ§„ ν•˜λ‚˜μ˜ λ¬Έμ„œλ₯Ό κ°€μ Έλ‹€κ°€ μ“°κ³  싢을 λ•Œ (λ©”μ„œλ“œμ™€ μœ μ‚¬ν•˜κ²Œ)

 

<%! : μ„ μ–Έλ¬Έ

JSP νŽ˜μ΄μ§€ 내뢀에 μžλ°” λ©”μ„œλ“œ, λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° μœ„ν•΄ μ‚¬μš©

λ³€μˆ˜ μ„ μ–Έ, λ©”μ„œλ“œ μ„ μ–Έ

 

<% : 슀크립트릿

JSP νŽ˜μ΄μ§€ 내뢀에 μžλ°”(Java) μ†ŒμŠ€μ½”λ“œλ₯Ό μ‚½μž…ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

java Class 내에 μž‘μ„±λ˜λŠ” μ½”λ“œ κ·ΈλŒ€λ‘œ μž‘μ„±

(κ°€μž₯ 많이 μ‚¬μš©)

λ³€μˆ˜ μ‚¬μš©. κ°’ μš”μ²­. 응닡 λ“±

μ“°λŠ” μœ„μΉ˜λŠ” μ€‘μš”ν•˜μ§€ μ•ŠμŒ

 

<%= : ν‘œν˜„μ‹

좜λ ₯κ²°κ³Ό(HTML μš”μ†Œ λ‚΄)에 값을 λ„£κΈ° μœ„ν•΄ μ‚¬μš©

HTML μš”μ†Œ 내에 좜λ ₯ κ²°κ³Όλ₯Ό λ„£κΈ° μœ„ν•΄ μ‚¬μš©.

ν‘œν˜„μ‹ μ•ˆμ— μžˆλŠ” 값듀은 μ‚¬μš©μž λˆˆμ— λ³΄μž„. HTML λ¬Έμ„œ λ‚΄μ—μ„œ 좜λ ₯이 λœλ‹€λŠ” 말

 

 

βš™ JSP νƒœκ·Έ μ‚¬μš© μ‹€μŠ΅

<!-- μ§€μ‹œμž(Directive) : JSP μ„€μ • 정보 및 λ‹€λ₯Έ λ¬Έμ„œμ—(λ₯Ό) 포함 λ“± -->
<!-- μ§€μ‹œμžμ˜ μ’…λ₯˜ : page, include, taglib(tag library >> ex. JSTL) -->
<!-- contentType : μ‘λ‹΅λ°μ΄ν„°μ˜ ν˜•μ‹κ³Ό 인코딩 방식을 λΈŒλΌμš°μ €(ν΄λΌμ΄μ–ΈνŠΈ)μ—κ²Œ μ•Œλ €μ£ΌκΈ° μœ„ν•¨ -->
<!-- pageEncoding : JSP νŽ˜μ΄μ§€μ— λŒ€ν•œ 인코딩 μ§€μ • -->
<%@page import="java.util.Random"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<!-- charset : html λ¬Έμ„œμ— λŒ€ν•œ 인코딩 μ§€μ • -->
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- μŠ€ν¬λ¦½ν‹€λ¦Ώ(Scriptlet : JSP νŽ˜μ΄μ§€ 내뢀에 μžλ°” μ†ŒμŠ€ μ½”λ“œ μ‚½μž…) -->
<!-- μŠ€ν¬λ¦½ν‹€λ¦Ώ 내에 μž‘μ„±ν•œ μ½”λ“œλŠ” λͺ¨λ‘ service() λ©”μ„œλ“œ μ•ˆμ— μž‘μ„±λ¨ -->
<% 
	// JSP ꡬ성 μš”μ†Œ λ‚΄μ—μ„œλŠ” μžλ°” 주석 μž‘μ„±
	// μŠ€ν¬λ¦½ν‹€λ¦Ώ μ•ˆμ—μ„œλŠ” 무쑰건 ; μž‘μ„±ν•΄μ•Ό 함
	System.out.print("Hello"); //이클립슀 μ½˜μ†”μ°½μ— 좜λ ₯
	int num = 10;
	int num2 = 20;
	
	Random rd = new Random();
	int ran = rd.nextInt(10);
	// out 객체λ₯Ό μ„ μ–Έν•œ 적 μ—†μ§€λ§Œ jspμ½”λ“œκ°€ μžλ°” μ½”λ“œλ‘œ λ³€ν™˜λ˜λ©΄μ„œ WebContainerκ°€ μžλ™μœΌλ‘œ out 객체(λ‚΄μž₯객체)λ₯Ό 생성함
	out.print(ran + "<br>");
	// out.println - μ½”λ“œλ§Œ κ°œν–‰(화면상 κ°œν–‰X) >> 화면상 κ°œν–‰ν•˜λ €λ©΄ <br>
%>
<!--  ν‘œν˜„μ‹(Expression : ν™”λ©΄(μ›ΉλΈŒλΌμš°μ €μƒ)에 좜λ ₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©, ; μž‘μ„± X -->
<%=ran %><br>
<%="String" %><br>
<%="ν’€"+"μŠ€νƒ" %><br>
<!-- μ„ μ–Έλ¬Έ(Declaration) : μžλ°” λ©”μ„œλ“œ, λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° μœ„ν•΄ μ‚¬μš© -->
<!-- μ„ μ–Έλ¬Έ μ•ˆμ— μž‘μ„±ν•œ μ½”λ“œμ˜ μœ„μΉ˜λŠ” 클래슀 이름 λ°”λ‘œ λ°‘, μ „μ—­ -->
<%! int num3 = 100; %>
<%! 
	public void print(){
		System.out.println("print!");
	}	
%>
</body>
</html>

 

μ‹€μŠ΅ 2. 

 

<%@ 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>
	<table border=1>
		<tr>
			<%
			for(int i = 1; i <= 10; i++){
				out.print("<td>" + i + "</td>");
			}
			%>
		</tr>
	</table>
	
	<table border=1>
		<tr>
			<%for(int i = 1; i <= 10; i++){%>
				<td><%=i %></td>
			<%}%>
		</tr>
	</table>
	
</body>
</html>

 

μ‹€μŠ΅ 3.

<HTML μ½”λ“œ>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="Ex02Output.jsp" method="post">
		<input type="text" name="data">
		<input type="submit">
	</form>
</body>
</html>

 

<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>
	<%
	request.setCharacterEncoding("UTF-8");
	String data = request.getParameter("data");
	out.print(data);
	%>
	<%=data %>
</body>
</html>

 

μ‹€μŠ΅ 4.

 

<html μ½”λ“œ>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="Ex03Output.jsp" method="post">
		<input type="number" name="num1">
		<br>
		<input type="number" name="num2">
		<br>
		<select name="ope">
			<option>+</option>
			<option>-</option>
			<option>*</option>
			<option>/</option>
		</select>
		<input type="submit" value="계산">
	</form>
</body>
</html>

 

<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>
	<%
		request.setCharacterEncoding("UTF-8");
		int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));
		String ope = request.getParameter("ope");
		
		int result;
		if(ope.equals("+")){
			result = num1 + num2;
		}else if(ope.equals("-")){
			result = num1 - num2;
		}else if(ope.equals("*")){
			result = num1 * num2;
		}else{
			result = num1 / num2;
		}
		//좜λ ₯방법 1)
		out.print(num1 + ope + num2 + "=" + result);
	%>
	<!-- 좜λ ₯방법 2) -->
	<%= num1 %>
	<%= ope %>
	<%= num2 %>
	=
	<%= result %>
	
	<!-- 좜λ ₯방법 3) -->
	<%= num1+ope+num2+"="+result %>
	
</body>
</html>

 

JSP도 url mapping κ°€λŠ₯

λ°˜μ‘ν˜•