본문 바로가기
뒤끝 (Back-End)

[JSP] 액션 태그

728x90

액션 태그 : JSP에서 기본으로 제공하는 태그들의 집합, 서버 또는 클라이언트에게 수행할 명령 지시, Java 코드 사용하지 않아도 JSP 웹페이지 개발 가능

  • JSP 웹페이지를 코딩할 때 Java 코드의 작성을 피하거나 최소화하기 위해 사용
  • JSP 웹페이지에서 Java 코드를 최소화하게 되면 소스 코드에 대한 유지/보수를 효율적으로 수행 가능
<jsp: ... />
<jsp:forward ... /> 현재 페이지의 실행을 멈추고 다른 페이지로 흐름을 제어
<jsp:include ... /> 외부 페이지의 내용을 포함하거나 페이지 모듈화를 수행
<jsp:useBean ... /> Java 인스턴스를 생성 또는 호출 및 보관소에 저장
<jsp:setProperty ... /> 자바빈즈의 프로퍼티의 값을 설정
<jsp:getProperty ... /> 자바빈즈의 프로퍼티의 값을 가져옴
<jsp:param ... /> <jsp:forward>, <jsp:include>, <jsp:plugin> 태그의 자식 태그로 사용, 단독 사용 X
<jsp:plugin ... /> 웹 브라우저에 애플릿을 실행, OBJECT 또는 EMBED HTML 태그 생성
<jsp:element ... /> 임의의 XML 태그 또는 HTML 태그 생성

forward 액션 태그 : 현재 위치한 JSP 웹페이지에서 다른 웹페이지로 이동할 때 사용, 그 전까지 출력 버퍼에 저장되어 있던 내용을 모두 삭제하고 페이지로 이동

<jsp:forward page="파일명" />

// forward.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> forward 액션 태그 </title>
</head>
<body>
	Home > forward 액션 태그로 페이지 요청
	<jsp:forward page="forward_process.jsp" />	
</body>
</html>
// forward_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> forward 액션 태그 </title>
</head>
<body>
	Home > forward.jsp로 부터 요청받음 
	<hr>
	<%
		Date nowTime = new Date();
	%>
	현재 날짜와 시각 : <%= nowTime.toLocaleString() %>
</body>
</html>


include 액션 태그 : 현재 위치한 JSP 웹페이지의 특정 영역에 외부 파일의 내용을 포함할 때 사용

<jsp:include page="파일명" />

// include.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> 현재 위치 : include.jsp 파일 </title>
</head>
<body>
	include 액션 태그 실행 전 <br>
	<jsp:include page="include_process.jsp"/> <br>	
	include 액션 태그 실행 후
</body>
</html>
// include_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> include 액션 태그 </title>
</head>
<body>
	Home > include_process.jsp 파일에서 수행한 명령  
	<hr>
	<%
		Date nowTime = new Date();
	%>
	현재 날짜와 시각 : <%= nowTime.toLocaleString() %>
</body>
</html>


param 액션 태그 : 현재 위치한 JSP 웹페이지에서 다른 웹페이지로 정보를 전달할 때 사용하는 태그, 메모장 생성 후 전달

  • 단독으로 사용할 수 없으므로 <jsp:forward> 나 <jsp:include> 태그의 내부에 선언하여 사용
  • 여러개의 파라미터를 선언하여 다른 페이지에 여러 개의 정보를 전달할 수 있음
<jsp:forward page="파일명">
	<jsp:param name="파라미터명1" value="파라미터값1"/>
    	<jsp:param name="파라미터명2" value="파라미터값2"/>
</jsp:forward>

// param.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>    
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> param 액션 태그 </title>
</head>
<body>
	<%
		Date nowTime = new Date();
		String pwd = "123456";
	%>
	<jsp:forward page="param_process.jsp">
		<jsp:param name="date" 
			value="<%= nowTime.toLocaleString() %>" />
		<jsp:param name="id" value="zen" />
		<jsp:param name="pwd" value="<%= pwd %>"/>
	</jsp:forward>	
</body>
</html>
// param_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title> 현재 위치 : param_prpcess.jsp </title>
</head>
<body>
	Home > param.jsp로 부터 정보를 전달받음 
	<hr>
	현재 날짜와 시각 : 
	<%= request.getParameter("date") %>
	<br>
	<%= request.getParameter("id") %>
	<br>
	<%= request.getParameter("pwd") %>
</body>
</html>


// includeParam.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
	<body>
	<h3>IncludeParam 예제</h3>
		<form method="post" action="includeParam_proc.jsp">
		사이트명 : <input name="siteName"><p/>
		<input type ="submit" value="보내기">
		</form>
	</body>
</html>
// includeParam_proc
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("UTF-8");
	String siteName = request.getParameter("siteName");
%>
<html>
	<body>
		<h3>>> IncludeParam_proc.jsp</h3>
		html 문서에서 전달된 siteName은 
		<b><%=siteName%></b> 입니다.
		<p>
		<hr/>
		<jsp:include page="includeTagBottom.jsp">
			<jsp:param name="siteName" value="https://zenstudy.tistory.com/" />
		</jsp:include>
	</body>
</html>
// includeTagBottom.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	   String siteName = request.getParameter("siteName");
%>
include 액션 태그와 param 액션 태그로 전달된 siteName은 
<font color="red"><%=siteName%></font> 입니다.
<hr/>

includeParam_proc.jsp?siteName=젠의 전공공부

includeTabBottom.jsp?siteName=https://zenstudy.tistory.com/


자바빈즈 : 복잡하게 구성된 JSP 웹페이지에서 Java 소스 코드만 따로 뽑아 별도 작성으로 JSP 웹페이지가 복잡해지는 것을 방지

  1. 웹 브라우저에서 서블릿으로 서비스 요청
  2. 서블릿은 자바빈즈와 통신 수행
  3. 자바빈즈는 데이터베이스와 연결하여 데이터 관리
  4. 서블릿은 JSP 웹페이지에게 정보 전달
  5. JSP 웹페이지는 요청한 웹 브라우저에서 전달된 정보로 전달

<jsp:useBean id="객체명" scope="page | request | session | application" class="클래스명" type="타입명" />
// id와 class는 필수
// page = JspContext(기본값) | request = ServletRequest 
// session = HttpSession | application = ServletContext

 

id 속성 : 객체의 참조 변수명으로 사용, getAttribute()로 값을 꺼낼 때 사용하는 이름으로 객체를 생성할 경우 보관소에 저장하는 key 값의 이름으로 사용함

scope 속성 : 보관소를 지정

class 속성 : Java 객체를 생성하기 위해 사용할 클래스 이름을 지정할 때 선언, new 연산자를 사용하므로 인터페이스는 올 수 없고 반드시 패키지 이름을 포함해야 함

type 속성 :  참조 변수에서 사용할 타입을 지정할 때 선언, 반드시 패키지 이름을 포함해야 하며 type 속성을 지정하지 않으면 class 속성의 값이 사용됨

 

// Persion.java
package ch08;

public class Person {
   private String id;
   private String name;

   public String getId() {   return id;   }
   public void setId(String id) {  this.id = id;  }

   public String getName() {  return name;  }
   public void setName(String name) {  this.name = name;  }  
}
// inputInfo.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaBeans__Person</title>
</head>
<body>
<h3>자바빈즈로 아이디와 이름 처리하기</h3>
<form action="inputProc.jsp" method="post">
	<p> 아 이 디 : <input type="text" name="id">
	<p> 이름 : <input type="text" name="name">
	<p> <input type="submit" value="전송">
</form>
</body>
</html>
//inputProc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html><head><meta charset="UTF-8">
<title>JavaBeans</title>
</head>
<body>
<jsp:useBean id="p1" class="ch08.Person" />

<% request.setCharacterEncoding("UTF-8");

   String id = request.getParameter("id");
   String name = request.getParameter("name");
%>

<jsp:setProperty property="id" name="p1" value='<%=id%>'/>
<jsp:setProperty property="name" name="p1" value='<%=name%>'/>

<h3>입력하신 아이디와 이름을 확인합니다.</h3>
<table border="1" style="width:300px; border-collapse:collapse; ">
	<tr><th>아이디</th>
			<td><jsp:getProperty property="id" name="p1"/></td>
	</tr>
	<tr><th>이름</th>
			<td><jsp:getProperty property="name" name="p1"/></td>
	</tr>
</table>
</body>
</html>


// Calculator.java
package ch08;

public class Calculator {
	private int n1;
	private int n2;
	private String op;
	
	public int getN1() {
		return n1;
	}
	public void setN1(int n1) {
		this.n1 = n1;
	}
	public int getN2() {
		return n2;
	}
	public void setN2(int n2) {
		this.n2 = n2;
	}
	public String getOp() {
		return op;
	}
	public void setOp(String op) {
		this.op = op;
	}
	
	public long calc() {		
		long result = 0;
		switch(op) {
			case "+": result = n1+n2;break;
			case "-": result = n1-n2;break;
			case "/": result = n1/n2;break;
			case "*": result = n1*n2;break;
		}
		return result;
	}
}
// calcForm.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>useBean 액션 태그 - 계산기</title>
</head>
<body>
	<h2>useBean 액션 태그로 계산기 만들기</h2>
	<hr>
	<form method="post" action="calc.jsp">
		<input type="text" name="n1" size="10"> <select name="op">
			<option>+</option>
			<option>-</option>
			<option>*</option>
			<option>/</option>
		</select> <input type="text" name="n2" size="10"> 
		<input type="submit" value="실행">
	</form>
</body>
</html>
// calc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<jsp:useBean id="calc" class="ch08.Calculator" />
<jsp:setProperty property="n1" name="calc"/>
<jsp:setProperty property="op" name="calc"/>
<jsp:setProperty property="n2" name="calc"/>
// <jsp:setProperty property="*" name="calc"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>useBean 액션 태그 - 계산기 결과</title>
</head>
<body>

<h2>>> 계산 결과</h2>
<hr>
<jsp:getProperty property="n1" name="calc"/>
<jsp:getProperty property="op" name="calc"/>
<jsp:getProperty property="n2" name="calc"/>
 = <%=calc.calc() %>
 // <%=calc.getN1() + calc.getOp() + calc.getNw() + "=" + calc.calc() %>
</body>
</html>

calc.jsp?n1=3&op=+&n2=5

728x90

'뒤끝 (Back-End)' 카테고리의 다른 글

[JSP] JDBC  (0) 2024.12.04
[JSP] 데이터베이스  (2) 2024.12.04
[JSP] request 내장 객체  (5) 2024.10.16
[JSP] 폼 태그  (3) 2024.10.14
[JSP] JSP의 동작 구조  (1) 2024.10.14