Java

2024.07.03 JSP ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ณธ JSP ๊ธฐ์ดˆ ๋ฌธ๋ฒ•

์ •ํ›ˆ5 2024. 7. 3. 10:51
๐Ÿ’ก ํ•™์Šต ๋ชฉํ‘œ

- JSP ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ดˆ ๋ฌธ๋ฒ•์„ ์ตํžŒ๋‹ค.
- ๋‹ค์–‘ํ•œ JSP ํƒœ๊ทธ์™€ ํ‘œํ˜„์‹์„ ์ดํ•ดํ•œ๋‹ค.
- ๊ฐ„๋‹จํ•œ JSP ํŽ˜์ด์ง€๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋™์ ์ธ ์›น ์ฝ˜ํ…์ธ ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

JSP๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ HTML ๋ฌธ์„œ ์•ˆ์— ์ž๋ฐ” ์–ธ์–ด๋ฅผ ์‚ฝ์ž…ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๋ณ€์ˆ˜ ์„ ์–ธ, ๋ฉ”์„œ๋“œ ์„ ์–ธ, ๋กœ์ง ๋“ฑ์€ ์ž๋ฐ” ์–ธ์–ด๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ HTML ์‚ฌ์ด์— ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ๋ผ์›Œ ๋„ฃ์„ ๋•Œ ํ•„์š”ํ•œ ๋ฌธ๋ฒ•์ด ๋ช‡๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ’ก JSP ๊ธฐ์ดˆ ๋ฌธ๋ฒ•์— ์ข…๋ฅ˜

- JSP ์ง€์‹œ์–ด, Directive
- ์Šคํฌ๋ฆฝํŠธ๋ฆฟ(Scriptlet)
- ์„ ์–ธ๋ถ€(Declaration)
- ํ‘œํ˜„๋ถ€(Expession)
- JSP ์•ก์…˜ ํƒœ๊ทธ

 

JSP ์ง€์‹œ์–ด, Directive

<%@ xxxx…. %> JSP ๋””๋ ‰ํ‹ฐ๋ธŒ๋Š” JSP ํŽ˜์ด์ง€์˜ ์ „๋ฐ˜์ ์ธ ์†์„ฑ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ๋กœ ํŽ˜์ด์ง€ ์†์„ฑ, import ๋“ฑ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="java.lang.Math" %>

 

 

์Šคํฌ๋ฆฝํŠธ๋ฆฟ(Scriptlet)

Java ์ฝ”๋“œ๋ฅผ HTML ์ค‘๊ฐ„์— ์‚ฝ์ž…ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

<% ... %> ํƒœ๊ทธ ์‚ฌ์ด์— Java ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค (์ฝ”๋“œ ์‹คํ–‰ ์˜์—ญ์— ํ•ด๋‹น)

<% 
    String greeting = "Hello, JSP!";
    out.println(greeting);
%>

 

์„ ์–ธ๋ถ€(Declaration)

JSP ํŽ˜์ด์ง€์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

<%! ... %> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

<%! 
    private String greeting = "Hello, JSP!";
    
    public String getGreeting() {
        return greeting;
    }
%>

 

ํ‘œํ˜„์‹(Expression)

๊ฐ’์„ ์ถœ๋ ฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ, Java ํ‘œํ˜„์‹์„ ํ‰๊ฐ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ HTML๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

<%= ... %> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

<%
    String greeting = "Hello, ๊ธธ๋™!";
%>
<p>Greeting: <%= greeting %></p>

 

JSP ์•ก์…˜ ํƒœ๊ทธ(Action Tags)

JSP ํŽ˜์ด์ง€์—์„œ ์ž๋ฐ”๋นˆ์ฆˆ(Beans)๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ JSP ํŽ˜์ด์ง€๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

// ์ž๋ฐ”๋นˆ์ฆˆ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
<jsp:useBean id="myBean" class="com.example.MyBean" scope="session" />

// ์ž๋ฐ”๋นˆ์ฆˆ์˜ ์†์„ฑ ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
<jsp:setProperty name="myBean" property="username" value="JohnDoe" />

// ์ž๋ฐ”๋นˆ์ฆˆ์˜ ์†์„ฑ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
<p>Username: <jsp:getProperty name="myBean" property="username" /></p>

// ๋‹ค๋ฅธ JSP ํŽ˜์ด์ง€๋ฅผ ํฌํ•จ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 
<jsp:include page="header.jsp" />

// ๋‹ค๋ฅธ JSP ํŽ˜์ด์ง€๋กœ ์š”์ฒญ์„ ํฌ์›Œ๋“œํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
<jsp:forward page="nextPage.jsp" />

... ๋“ฑ

 

๐Ÿ’ก ์ž๋ฐ”๋นˆ์ฆˆ(JavaBeans)๋ž€?

  • ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด
    ์ž๋ฐ”๋นˆ์ฆˆ๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„๋œ Java ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

  • ํŠน์ • ๊ทœ์•ฝ์ด ์ ์šฉ๋œ ๊ฐ์ฒด
    ์ž๋ฐ”๋นˆ์ฆˆ๋Š” ์บก์Аํ™”, ๊ธฐ๋ณธ ์ƒ์„ฑ์ž, ์ง๋ ฌํ™” ๋“ฑ์˜ ๊ทœ์•ฝ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
    • ์บก์Аํ™”(Encapsulation)
      ํ•„๋“œ๋Š” private์œผ๋กœ ์„ ์–ธํ•˜๊ณ , ์ ‘๊ทผ์ž ๋ฉ”์„œ๋“œ(getter)์™€ ์„ค์ •์ž ๋ฉ”์„œ๋“œ(setter)๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.

    • ๊ธฐ๋ณธ ์ƒ์„ฑ์ž(Default Constructor)
      ์ž๋ฐ”๋นˆ์ฆˆ ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • ์ง๋ ฌํ™”(Serialization)
      ์ž๋ฐ”๋นˆ์ฆˆ๋Š” Serializable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ €์žฅ, ์—ฐ์‚ฐ ๋ฐ ์ „์†ก
    ์ž๋ฐ”๋นˆ์ฆˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ,
    ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋‚˜ ์‹œ์Šคํ…œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

์ •๋ฆฌ

๋™์ผํ•œ ํด๋ž˜์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์ธ์Šคํ„ด์Šคํ™” ํ•ด์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋ฉฐ ์Šค์ฝ”ํ”„(scope) ๋‚ด์—์„œ ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ์…˜ ์Šค์ฝ”ํ”„(scope)์—์„œ ์ƒ์„ฑ๋œ ์ž๋ฐ”๋นˆ์ฆˆ ๊ฐ์ฒด๋Š” ์„ธ์…˜ ๋‚ด๋‚ด ๋™์ผํ•œ ๊ฐ์ฒด๋กœ ์œ ์ง€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”๋นˆ์ฆˆ์™€ ์Šค์ฝ”ํ”„

  • page: ํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (๊ธฐ๋ณธ๊ฐ’)
  • request: ํ•˜๋‚˜์˜ ์š”์ฒญ ๋™์•ˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • session: ์„ธ์…˜ ๋™์•ˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • application: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ </aside>

์ฝ”๋“œ ์‹ค์Šต 1 - ์ธ์‚ฌ๋ง ์ƒ์„ฑ๊ธฐ

 

class_jsp_v01 ํด๋”

  views ํด๋” -- greet2.jsp ์ƒ์„ฑ

  webapp  ํด๋” -- example.jsp ์ƒ์„ฑ, greet_from_page.html ์ƒ์„ฑ, greet.jsp ์ƒ์„ฑ

 

1. HTML ํผ ๋งŒ๋“ค๊ธฐ

2. greet.jsp ์ž‘์„ฑํ•˜๊ธฐ

3. ๊ฒฐ๊ณผ ๋ฐ ํ…Œ์ŠคํŠธ

 

greet_from_page.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<h1>์ธ์‚ฌ๋ง ์ƒ์„ฑ๊ธฐ</h1>
	<!-- ์ ˆ๋Œ€ ๊ฒฝ๋กœ : / -->
	<!-- ์ƒ๋Œ€ ๊ฒฝ๋กœ : views/greet2.jsp --> <!-- ๋‚ด ๊ธฐ์ค€์—์„œ ์ฐพ์•„๊ฐ€๋Š” ๋ฐฉ๋ฒ• -->
	<form action="greet.jsp" method="POST">
		<label for="name">๋‹น์‹ ์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”: </label>
		<input type="text" id="name" name="name" required="required">
		<!-- required="required" : null ๊ฐ’ ๋ฐฉ์ง€ํ•˜๋ ค๊ณ  -->
		<!-- name="name" : ํ‚ค - ๊ฐ’ -->
		
	<button type="submit">์„œ๋ฒ„๋กœ ์ œ์ถœ</button>
	</form>
	
</body>
</html>

 

greet.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <!-- JSP ํŽ˜์ด์ง€์˜ ์„ค์ •์„ ์ •์˜ํ•˜๋Š” JSP ์ง€์‹œ์ž  -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>์ธ์‚ฌ๋ง์„ ์™„์„ฑ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.</h1>
	
	<%
		// ์ž๋ฐ” ์‹คํ–‰ ์ฝ”๋“œ
		// request ๊ฐ์ฒด์—์„œ ๊ฐ’ ์ถ”์ถœํ•˜๊ธฐ
		
		String name = request.getParameter("name");
		
		if(name == null || name.trim().isEmpty()){
			out.println("<p> ์•—! ๋‹น์‹ ์— ์ด๋ฆ„์„ ๋จผ์ € ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” </p>");
		} else {
			out.println("<p> ๋ฐ˜๊ฐ€์›Œ," +name +"! ๋‚˜์˜ JSP Site ์ž˜ ์™”์–ด ํ™˜์˜~~" +"</p>");
		}
	%>
	
	<!-- ๋‹ค์‹œ ์ด์ „ํŽ˜์ด์ง€๋กœ ๋˜๋Š” (ํŠน์ • ํŽ˜์ด์ง€๋กœ ์ด๋™)์ฒ˜๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด  -->
	<a href="greet_from_page.html">Back</a>
	
</body>
</html>

 

 

 


์ฝ”๋“œ ์‹ค์Šต 2 - ๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ๊ธฐ

 

1. HTML ํผ ๋งŒ๋“ค๊ธฐ

2. calculate.jsp ์ž‘์„ฑํ•˜๊ธฐ

3. ๊ฒฐ๊ณผ ๋ฐ ํ…Œ์ŠคํŠธ

 

class_jsp_v01 ํด๋”

 

calculator_form.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
	
	<style>
        body{
            display: flex;
            height: 100vh;
            justify-content: center;
            align-items: center;
            margin: 0;
            background-color: #f0f0f0;
        }
        .container{
            width: 300px;
            background-color: #fff;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }
        form{
            display: flex;
            flex-direction: column;
        }
        label{
            margin-bottom: 10px;
        }

        input[type="number"] {
            height: 30px;
            border: 1px solid #bababa;
            border-radius: 5px;
            margin-bottom: 20px;
        }
        input[type="submit"] {
                height: 40px;
                border-radius: 5px;
                border: 0;
                background-color: #45a049;
                color: #fff;
        }
        input[type="submit"]:hover{
            background-color: #1c5a1f;
        }
    </style>

</head>
<body>

	<div class="container">
		<h1>๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ๊ธฐ</h1>
		<form action="calculate.jsp" method="POST">
		<label for="num1">์ฒซ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”</label>
		<input type="number" id="num1" name = "num1" required="required" value="10">
		
		<label for="num2">๋‘๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”</label>
		<input type="number" id="num2" name = "num2" required="required" value="20">
		
		<input type="submit" value="๊ณ„์‚ฐ ์š”์ฒญํ•˜๊ธฐ">
		
		</form>
	</div>

</body>
</html>

 

calculate.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>๊ณ„์‚ฐ ๊ฒฐ๊ณผ</title>
</head>
<body>
	
	<h1>๊ณ„์‚ฐ ๊ฒฐ๊ณผ</h1>
	<!-- HTML ์ฃผ์„ ์ž…๋‹ˆ๋‹ค.  -->
	<%-- JSP ์ฃผ์„ ์ž…๋‹ˆ๋‹ค. --%>
	<%
		// form์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
		
		String num1Str = request.getParameter("num1");
		String num2Str = request.getParameter("num2");
	
		// ๋ฐฉ์–ด์  ์ฝ”๋“œ ์ž‘์„ฑ
		
		if( num1Str != null && num2Str != null ){
			
			try{
				int num1 = Integer.parseInt(num1Str);
				int num2 = Integer.parseInt(num2Str);
				
				int result = num1+ num2;
				out.println("<p> " +num1 + "์™€" +num2 +"์˜ ํ•ฉ์€" +result +"</p>");
				
				out.println("<p> ๋‘ ์ˆ˜์˜ ํ•ฉ์€ : "+result +" </p>");
			} catch(NumberFormatException e) {
				out.print("<p>๋‹ค์‹œ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.</p>");
			}
		
			
		} else {
			out.println("๋‘ ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.");
		}
		
		
		// ๊ณ„์‚ฐ์— ๊ฒฐ๊ณผ๋ฅผ ์ŠคํŠธ๋ฆผ์„ ํ†ตํ•ด ๋‚ด๋ ค์ฃผ๊ธฐ
		
		
	%>
	<a href="calculator_form.html">๋Œ์•„๊ฐ€๊ธฐ</a>
</body>
</html>