[JSP] 액션태그와 자바빈즈

혜쿰·2023년 8월 22일
0
post-thumbnail

📌 액션태그

표준 액션 태그란? 미리 정해진 기능들을 JSP 스펙에 명시함으로써 모든 컨테이너가 동일하게 구현되는 태그이다. 모든 JSP 컨테이너에서 기본으로 제공하고 있어서 기본 액션 태그라고도 한다.

📍 종류

여러 가지 표준 액션 태그 중에서 자주 사용하는 태그들은 jsp:attribute, jsp:body, jsp:element, jsp:fallback, jsp:forward, jsp:getProperty, jsp:include, jsp:output, jsp:param, jsp:plugin, jsp:setProperty, jsp:useBean 등이 있다.

📌 JSP 자바빈즈

📍 개념

JSP 자바빈즈란? JSP의 표준 액션 태그로 접근할 수 있는 자바 클래스로서 값을 가지는 속성(멤버변수)과 값을 설정하는 메소드(setter), 값을 추출하는 메소드(getter)로 이루어져 있다. 자바빈즈는 하나의 JSP 페이지에 종속적으로 사용되는 것이 아니라, 여러 JSP 페이지에서 사용될 수 있다. 자바빈즈는 자바 클래스와 같은 개념이라고 할 수 있다.

📍 장점

1. 폼 데이터 처리 용이

자바 빈즈르르 쓰지 않는다면, 전달된 질의 문자열이 50개있으면 50번의 request.getParameter()을 통해 추출할 수 있다. 하지만, 자바빈즈를 사용하면 빈즈를 지원하는 액션 태그를 한 번만 사용해서 클라이언트로부터 전달된 데이터를 추출함과 동시에 값들을 저장할 수 있다.

2. 자바빈즈 활용 범위 확장 용이

여러 페이지에서 사용해야 하는 데이터는 자바빈즈를 이용하여 쉽게 유지하여 여러 범위에서 사용할 수 있다.

3. 컴포넌트 기반 구현 가능

JSP 페이지 내에서 필요한 비지니스 로직을 컴포넌트(각각의 클래스)로 만들어 활영하면 JSP 페이지의 크기난 작아지고, 각 JSP 페이지에서 필요로 하는 기능은 컴포넌트 재활용을 통해 구현하므로 웹 애플리케이션을 효과적으로 구현할 수 있다.

📍 개발 규약

  1. 패키지화
  2. 기본 생성자 존재
  3. 멤버변수의 접근자는 private으로 선언
  4. getter 메소드
  5. setter 메소드
  6. getter와 setter 접근자 publc으로 선언
  7. 직렬화 구현 (선택 사항)
  • 객체 직렬화란 ? 객체 정보를 기본햔 데이타와 같이 입출력할 수 있도록 객체의 멤버들을 바이트 형태로 변환시켜 입출력 하는 것이다.

📍 활용

다음은 브라우저로 부터 이름과 국어, 영어 점수를 입력받아 이름, 국어, 영어점수를 각각 출력하고 국어, 영어점수의 총점과 평균을 출력하는 프로그램이다. 출력창과 비지니스 로직을 따로 작성해주어야 한다.

html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
클라이언트에서 다량의 정보 전달 beans로 처리<p/>
* 성적 자료 입력 *<br/>
<form action="test11beans.jsp" method="post">
	이름 : <input type="text" name="name" /> <br>
	국어 : <input type="text" name="kor" /> <br>
	영어 : <input type="text" name="eng" /> <br>
	<input type="submit" value="전송" />
</form>
</html>

html의 input 태그를 이용해 브라우저로 부터 이름, 국어, 영어의 값을 받는다. 그리고 jsp로 연결한다.

jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="bean" class="pack.Test11formBean"></jsp:useBean>
<jsp:setProperty property="*" name="bean"  />

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
폼비에 등록된 자료를 출력<br/>
이름은 <jsp:getProperty property="name" name="bean"/><br/>
국어는 <jsp:getProperty property="kor" name="bean"/><br/>
영어는 <jsp:getProperty property="eng" name="bean"/><br/>

<jsp:useBean id="process" class="pack.Test11Process"></jsp:useBean>
<jsp:setProperty property="formBean" name="process" value="<%=bean %>"/>
총점은 <jsp:getProperty property="tot" name="process"/> <br/>
평균은 <jsp:getProperty property="avg" name="process"/> <br/>
</body>
</html>
  • request.setCharacterEncoding("utf-8"); : html에서 post 방식으로 값을 전달하기 때문에 한국어가 깨진다. 따라서 한국어가 깨지지 않도록 이 메소드를 써줘야한다.
  • <jsp:useBean id="bean or process" class="pack.Test11formBean"></jsp:useBean> : 액션태그를 이용하여 빈(클래스)를 사용한다.
  • <jsp:setProperty property="" name="bean"/> : property에 을 쓰지 않는 다면, name을 propery로 가지는 setProperty 그리고 kor, eng의 setProperty를 각각 작성해야 한다. 지금은 3개이지만 개수가 많아진다면 더욱 코드가 길어질 것이다.
  • setProperty를 통하여 setter에 값을 넣고 getter로 값을 받는다고 생각하면 된다.

frombean


package pack;

public class Test11formBean { // 클라이언트에서 전달되는 값이 여러 개인 경우 폼빈을 사용
	private String name;
	private int kor;
	private int eng;
public void setName(String name) {
	this.name = name;
}

public String getName() {
	return name;
}

public void setKor(int kor) {
	this.kor = kor;
}

public int getKor() {
	return kor;
}

public void setEng(int eng) {
	this.eng = eng;
}

public int getEng() {
	return eng;
}
}

getter와 setter를 작성한다.

process

package pack;

public class Test11Process {
	// 총점과 평균 등의 작업을 위한 Business Logic 클래스
	private Test11formBean formBean;
	
	public void setFormBean(Test11formBean formBean) {
		this.formBean = formBean;
	}
	
	public int getTot() {
		return formBean.getKor() + formBean.getEng();
	}
	
	public double getAvg() {
		return getTot() / 2.0;
	}
}

총점과 평균을 구하는 비지니스 로직이다.

참고 문헌 : 처음 해보는 Servlet&JSP 웹 프로그래밍

0개의 댓글