JSP&Servlet

jsp:useBean / jsp:setProperty / jsp:getProperty jsp 유즈빈 액션태그

유혁스쿨 2020. 8. 29. 00:43
728x90
반응형

 

jsp 유즈빈 액션태그

 

1. 사용자 폼 입력박스의 네임피라미터 이름과 자바빈 클래스 멤버변수명을 같게 주는 것이 좋다. 이유는 코드라인을 줄  이는 방법이다.

 

2. jsp:useBean 액션태그를 사용하여 자바빈 클래스 객체 생성하기

<jsp:useBean id="객체명" scope="자바빈객체를 저장할 영역" class="풀패키지경로" />

 

3. <jsp:setProperty> 액션태그를 사용하여 값을 저장할 수 습니다.

<jsp:setProperty name="자바빈클래스 객체명" property="빈클래스변수명" value="저장될 값" />

 여기서 property속성값을 *로 처리하면 한꺼번에 값을 저장할수 있습니다.

이런 경우는 네임피라미터 이름과 자바빈 클래스의 변수명이 같은 경우입니다.

그리고 위의 액션태그를 자바코드로 변경하면 객체명.setter(); 메서드를 호출한 것과 같은 효과가 납니다.

 

4. <jsp:getProperty> 액션태그를 사용하여 저장된 값을 가져올 수 있습니다.

형식)

 <jsp:getProperty name="자바빈클래스 객체명“ property="빈클래스변수명” />

위의 액션태그를 자바코드로 객체명.getter(); 메서드를 사용한 것과 같은 효과가 납니다

 

 

<jsp:useBean>

id 속성

클래스 객체 별칭

빈 클래스를 객채화 해주는 태그입니다.

class 속성

빈 클래스의 패키지경로

Property

<jsp:setProperty>

property 속성

set혹은 get메서드는 관례상으로 메서드 이름뒤에 필드명 첫글자를 대문자로 세팅하여 지정하게 되는데 자비빈의 필드명 혹은 메서드에 지정된 필드명을 뜻하게 됩니다.

set메서드의 역할을 해줍니다.

<jsp:getProperty>

name 속성

usebean id로 지정한 빈 클래스의 객체 이름 입니다.

get메서드의 역할을 해줍니다.

- id : JSP 페이지에서 자바빈 객체에 접글할 때 사용할 이름을 명시합니다.

- class : 패키지이름을 포함한 자바빈 클래스의 완전한 이름을 입력합니다.

- scope : 자바빈 객체가 저장될 영역을 지정합니다. (page, request, session, application 중 하나, 기본값은 page)

- JSP 페이지에서 사용할 자바빈 객체를 생성하고 지정한 영역에 저장을 합니다.

- 지정한 영역에 이미 id 속성에서 지정한이름의 속성 값이 존재할 경우 객체를 새로 생성하지 않고 기존에 존재하는 객 체를 그대로 사용합니다.

- 각 scope의 영역별로 공유할 데이터를 쉽게 저장할 수 있습니다.



BoardVO 자바빈 클래스입니다.

package net.abc.vo;

public class Board7VO { 

	private int b_no;
	private String b_name;
	private String b_title;
	private String b_pwd;
	private String b_cont;
	private int b_hit;
	private String b_date;
	public int getB_no() {
		return b_no;
	}
	public void setB_no(int b_no) {
		this.b_no = b_no;
	}
	public String getB_name() {
		return b_name;
	}
	public void setB_name(String b_name) {
		this.b_name = b_name;
	}
	public String getB_title() {
		return b_title;
	}
	public void setB_title(String b_title) {
		this.b_title = b_title;
	}
	public String getB_pwd() {
		return b_pwd;
	}
	public void setB_pwd(String b_pwd) {
		this.b_pwd = b_pwd;
	}
	public String getB_cont() {
		return b_cont;
	}
	public void setB_cont(String b_cont) {
		this.b_cont = b_cont;
	}
	public int getB_hit() {
		return b_hit;
	}
	public void setB_hit(int b_hit) {
		this.b_hit = b_hit;
	}
	public String getB_date() {
		return b_date;
	}
	public void setB_date(String b_date) {
		this.b_date = b_date;
	}
	
	
}

 

 

 

board_write.jsp파일 입니다

<body>
	<form action="board_write_ok.jsp" method="post">
	
	<h2>게시판 연습</h2>
		
작성자	<input type="text" name="b_name" id="b_name" size="14" /><br />
제목		<input type="text" name="b_title" id="b_title" size="36" /><br />
비밀번호	<input type="password" name="b_pwd" id="b_pwd" size="14" /><br />
	글내용<br />
	<textarea name="b_cont" id="b_cont" cols="36" rows="10"></textarea><br />
	<input type="submit" value="저장" /> <input type="reset" value="취소" />
	</form>
</body>

 

 

<jsp:useBean id="b" class="net.abc.vo.BoardVO" />
<jsp:setProperty name="b" property="*" />
<jsp:getProperty property="b_name" name="b" />

 

 

넘겨받는 jsp파일에서 이렇게 선언하면 BoardVO클래스를 b객체로 만들고 setter()메서드기능과 getter()메서드 기능을 구현할수 있습니다.

<%@ page import="net.abc.vo.BoardVO"%>
BoardVO b = new BoardVO();
b.setB_no();b.setb_ame();b.setB_title();b.setB_pwd();b.setB_cont();b.setB_hit();b.setB_date();
b.get();

 

* 은 b객체의 모든 set()메서드를 지칭하는것으로 각 필드 별 set메서드에 지정된 멤버변수명(필드명)과 board_write.jsp파일의 네임파라미터명과 일치하면 b객체로 접근하여 에 필드값을 초기화(저장) 해줍니다. 이것을 자바코드로 설명하면 넘겨받는 모든 파라미터를 해당 객체에 일일히 set()작업을 해주는 것입니다.

<jsp:useBean id="b" class="net.abc.vo.BoardVO" />

 

 

JSP유즈빈 액션태그, 자바코드로 변경하면

BoardVO b = new BoardVO();

 

와 같은 기능입니다.

id명 b가Board7VO 빈클래스의 객체명이 됩니다.

 

 

<jsp:setProperty name="b" property="*" />

 

jsp:setProperty값 저장 액션태그입니다. name속성값 "b" 는 BoardVO 빈 클래스 객체명입니다.

property속성값을 *로 처리한 이유는 board_write.jsp 의 네임 파라미터 이름과 Board7O 빈 클래스의 변수명이 같기 때문에 property속성값을 * 로만 처리해도 b객체에 작성자, 제목, 비번, 내용이 함께 저장되어 있다.

자바코드로는

b.setter();

와 같습니다.

 

 

jsp:getProperty값 반환 액션태그 입니다.

<jsp:getProperty property="b_name" name="b" />

 

name 속성 "b" 는 BoardVO빈클래스 객체명이고

property 속성값 b_name은 Board7VO 빈클래스 멤버변수명 입니다.

자바 코드로 표현하면

g.getB_name();

과 같습니다.

 

 

다음은 board_write_ok.jsp입니다.

게시글 수정폼인 board_write.jsp로부터 넘겨받은 JDBC를 구현해주는 로직이 들어있습니다.

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*"%>
<% request.setCharacterEncoding("UTF-8"); %>

<jsp:useBean id="b" class="net.abc.vo.Board7VO" />
<jsp:setProperty name="b" property="*" />
작성자 : <jsp:getProperty property="b_name" name="b" />

<%
String driver = "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String user = "week";
String pwd = "week";
Connection con = null; 
Statement st = null; 
String sql = null; 

try {
	Class.forName(driver);
	con = DriverManager.getConnection(url, user, pwd);
	st = con.createStatement();
	sql = "insert into board7 (b_no, b_name, b_title, b_pwd, b_cont, b_date)'"
     + values(bno7_seq.nextval, b.getB_name() + "','" + b.getB_title() + "','" 
     + b.getB_pwd() + "','" + b.getB_cont() + "',"	+ "sysdate)";
		int re = st.executeUpdate(sql);
		if (re == 1) {
			response.sendRedirect("board7_list.jsp");			
		}
	} catch (Exception e) {e.printStackTrace();} 
      finally {
		      try {
			      if (st != null)	st.close();
			      if (con != null) con.close();
		    } catch (Exception e) {e.printStackTrace();}
	 }
%>

위에서 받은 값들을 usebean태그 setProperty로 모든 변수를 초기화하였기때문에

아래 JDBC코드에서 b.getB_필드명(); 즉, b객체에 접근 getB_필드명(); 메서드 호출로 하나하나 값을 얻어올수 있게됩니다.

 

이상입니다.

 

728x90
반응형