본문 바로가기
Backend/JAVA_WEB

07. JSP, 자바빈즈 (JavaBeans, 액션태그)

by 개발개발빈이 2022. 7. 5.

○ 자바빈즈(JavaBeans)

    - 자바로 작성된 소프트웨어 컴포넌트

    - 빌더 형식의 개발도구에서 가시적으로 조작이 가능하고 또한 재사용이 가능한 소프트웨어 컴포넌트

    - 자바빈즈를 이용하면 JSP(뷰단)와 JAVA를 분리해서 재사용이 가능하고 코드가 복잡해지는 것을 방지함

 

○ JSP 액션태그

    - 현재 JSP 페이지에서 다른 페이지에 정보를 전달하는 태그

 

        ① 페이지 이동

<jsp:forward page=""></jsp:forward>

        ② 공통페이지 가져오기

<jsp:include page=""></jsp:include>

        ③ 자바빈 객체(object)생성

<jsp:useBean id=""></jsp:useBean>

<jsp:useBean id="객체명" 
             class="패키지명.클래스명" 
             scope="page"></jsp:useBean>

 

○ Scope 유효범위

    - page : 현재 페이지에서만 유효, 생략시 기본값
    - request : 다른 페이지에서 공유 (부모 자식 사이에서만 공유)
    - session : 다른 페이지에서 공유 (시간이 지나면 사라짐)
    - application : 다른 페이지에서 공유 (모든 사용자와 공유)

 

○ JSP메소드 vs new 연산자 vs 자바빈즈 

    1) computeForm.jsp 

        - 연산할 숫자를 입력받음

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">	
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>	
    <title>computeForm.jsp</title>
</head>
<body>
    <h3>☆ 계산기 ☆</h3>
    <form action="computeok.jsp">	
        <table class="table">
          <tr>
            <th>숫자1</th>
            <td><input type="number" name="num1" size="5"></td>
          </tr>
          <tr>
            <th>숫자2</th>
            <td><input type="number" name="num2" size="5"></td>
          </tr>
          <tr>
            <td colspan="2">
              <input type="submit" value="계산">
            </td>
          </tr>   
        </table> 	
    </form>
</body>
</html>

 

    2) Compute.java 3)②,③에서 사용

package net.testbean;

public class Compute {

    public int add(int a, int b) { return a+b; }
    public int sub(int a, int b) { return a-b; }
    public int mul(int a, int b) { return a*b; }
    public int div(int a, int b) { return a/b; }
    public int mod(int a, int b) { return a%b; }
    
    public int abs(int su) { 
    	return Math.abs(su); 
    }
    public long fact(int su) { 
    	return (su==0) ? 1 : su*fact(su-1); 
    }//팩토리얼 구하기: 재귀함수

}//class end

 

    3) computeok.jsp → 연산 결과 출력

        ① JSP 메소드 호출

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>computeok.jsp</title>
</head>
<body>
    <h3>☆ 계산 결과 ☆</h3>
    <h4>1) JSP 메소드 호출</h4>
<% 
    int num1=Integer.parseInt(request.getParameter("num1").trim());
    int num2=Integer.parseInt(request.getParameter("num2").trim());
	
    out.print(num1 + "+" + num2 + "=" + add(num1, num2));
    out.print("<br>");
    out.print(num1 + "-" + num2 + "=" + sub(num1, num2));
    out.print("<br>");
    out.print(num1 + "*" + num2 + "=" + mul(num1, num2));
    out.print("<br>");
    out.print(num1 + "/" + num2 + "=" + div(num1, num2));
    out.print("<br>");
    out.print(num1 + "%" + num2 + "=" + mod(num1, num2));
%>
<%! 
    //JSP 메소드 작성 영역
    public int add(int a, int b) { return a+b; }
    public int sub(int a, int b) { return a-b; }
    public int mul(int a, int b) { return a*b; }
    public int div(int a, int b) { return a/b; }
    public int mod(int a, int b) { return a%b; }
%>	
</body>
</html>


        ② new연산자를 이용해서 객체생성 후 메소드 호출

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ page import="net.testbean.*" %>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>computeok.jsp</title>
</head>
<body>
    <h3>☆ 계산 결과 ☆</h3>
    <h4>2) new연산자를 이용해서 객체생성 후 메소드 호출</h4>
<% 
    int num1=Integer.parseInt(request.getParameter("num1").trim());
    int num2=Integer.parseInt(request.getParameter("num2").trim());
	
    //객체생성 new Compute()
    // →RAM의 heap영역에 메모리가 할당되는 것
	
    Compute comp = new Compute();

    out.print(num1 + "+" + num2 + "=" + comp.add(num1, num2));
    out.print("<br>");
    out.print(num1 + "-" + num2 + "=" + comp.sub(num1, num2));
    out.print("<br>");
    out.print(num1 + "*" + num2 + "=" + comp.mul(num1, num2));
    out.print("<br>");
    out.print(num1 + "/" + num2 + "=" + comp.div(num1, num2));
    out.print("<br>");
    out.print(num1 + "%" + num2 + "=" + comp.mod(num1, num2));
%>
</body>
</html>


        ③ Java Bean을 이용해서 객체 생성 후 메소드 호출

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="net.testbean.*" %>

<jsp:useBean id="comp" class="net.testbean.Compute" scope="page"></jsp:useBean>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>computeok3.jsp</title>
</head>
<body>
    <h3>☆ 계산 결과 ☆</h3>
    <h4>3) Java Bean을 이용해서 객체 생성 후 메소드 호출 </h4>
<% 
    int num1=Integer.parseInt(request.getParameter("num1").trim());
    int num2=Integer.parseInt(request.getParameter("num2").trim());
	
    out.print(num1 + "+" + num2 + "=" + comp.add(num1, num2));
    out.print("<br>");
    out.print(num1 + "-" + num2 + "=" + comp.sub(num1, num2));
    out.print("<br>");
    out.print(num1 + "*" + num2 + "=" + comp.mul(num1, num2));
    out.print("<br>");
    out.print(num1 + "/" + num2 + "=" + comp.div(num1, num2));
    out.print("<br>");
    out.print(num1 + "%" + num2 + "=" + comp.mod(num1, num2));
%>
</body>
</html>





댓글