※ JSP 페이지의 주요 기능 중 하나는 데이터를 보여주는 것이다.

   하나의 JSP 페이지에 데이터를 보여주기 위한 자바코드와 단순히 화면을 출력하는 HTML 코드를 함께 작성하면

   기능을 확장하거나 코드를 재사용하는 데 어려움이 있다.  

 

   따라서 프로그램의 효율을 높이기 위해 화면을 출력하는 부분과 데이터를 처리하는 로직 부분을 구분하여 작성하며, 로직 부분의 코드에 자바빈즈라는 클래스를 사용한다.

 

 


자바빈즈

자바빈즈는 동적 콘텐츠 개발을 위해 자바 코드를 사용하여 자바 클래스로 로직을 작성하는 방법이다.

 

JSP 페이지에서 화면을 표현하기 위한 계산식이나 자료의 처리를 담당하는 자바 코드를 따로 분리하여 작성하는 것이다.

 

 

 


 

useBean 액션 태그

 

useBean 액션 태그는 JSP 페이지에서 자바빈즈를 사용하기 위해 실제 자바 클래스를 선언하고 초기화하는 태그다

<jsp:useBean id="user" class="user.User" scope="page"/>
  • id : 자바빈즈를 식별하기 위한 이름
  • class : 패키지 이름을 포함한 자바빈즈 이름 (기본 생성자 있어야하고 , 추상클래스 사용 안됨)
  • scope: 자바빈즈가 저장되는 영역(page, request, session , application 중 하나 사용)

 


 

setProperty 액션 태그

 

setProperty 액션 태그는 useBean 액션 태그와 함께 자바빈즈의 Setter() 메소드에 접근하여

자바빈즈의 멤버 변수인 프로퍼티의 값을 저장하는 태그다.

 <jsp:useBean id="board" class="board.Board" scope="page" />
<jsp:setProperty property="title" name="board"/>
<jsp:setProperty property="content" name="board"/>
<jsp:setProperty property="writer" name="board"/> 
  • name : useBean 태그에 id 속성 값으로 설정된 자바빈즈를 식별하기 위한 이름
  • property : 자바빈즈 프로퍼티 이름, 만약 프로퍼티 이름에'*' 를 사용하면 모든 요청 파라미터가 자바빈즈 프로퍼티의 setter( ) 메소드에 전달됨을 의미한다.
  • value : 변경할 자바빈즈의 프로퍼티 값이다. 
  • param : 자바빈즈의 프로퍼티 값을 전달하는 요청 파라미터의 이름이다. param과 value 동시 사용 불가

위의 코드는 글 등록하는 JSP 파일에서 form 태그로 값을 가져와서 property 에 값을 담았다 = (board 클래스 setter( ))

 

 


활용 

회원 정보 수정 작업 중

 

userUpdateAction.jsp 파일에서

UserDAO dao = new UserDAO();
	int result = dao.update
       (
        userID, 
        request.getParameter("name"),
        request.getParameter("password"),
        request.getParameter("email")
        );
		if(result == -1){
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('회원 수정 실패.')");
			script.println("history.back()");
			script.println("</script>");
		}else{
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('회원 수정 성공')");
			script.println("location.href = 'index.jsp'");
			script.println("</script>");
		}

UserDao update 매개변수에

세션 값으로 설정한 아이디와 함께 form 태그에서 받은 데이터 값을 다 넘겨 주었다.

 

UserDao.java

public int update(String id , String name, String pw, String email) {
		
String sql = "update user set name = ? , password =? , email =? where id =? ";
		

	try {
		pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, name);
		pstmt.setString(2, pw);
		pstmt.setString(3, email);
		pstmt.setString(4, id);
		return pstmt.executeUpdate();
	}catch(Exception e) {
			
		e.printStackTrace();
	}finally {
		try {
		if(pstmt !=null) pstmt.close();
		if(conn !=null) conn.close();
		}catch(Exception e) {
			e.printStackTrace();
			}
		}
		
	return -1;
	}

매개변수로 아이디, 이름 , 비밀번호, 이메일을 받는다.

 

 

코드가 되게 길고 매개변수를 하나 하나 적어줘야 하는 불편함이 있다.

 


자바 빈즈를 사용하면

 

<jsp:useBean id="user" class="user.User" scope="page"/>
<jsp:setProperty property="*" name="user"/>

 

UserDAO dao = new UserDAO();
			
	int result = dao.update(user);
	if(result == -1){
		PrintWriter script = response.getWriter();
		script.println("<script>");
		script.println("alert('회원 수정 실패.')");
		script.println("history.back()");
		script.println("</script>");
	}else{
		PrintWriter script = response.getWriter();
		script.println("<script>");
		script.println("alert('회원 수정 성공')");
		script.println("location.href = 'index.jsp'");
		script.println("</script>");
}

 

매개변수에 user 객체 담아서 보내면

코드가 간결해진다.

 

 

public int update(User user) {
		
String sql = "update user set name = ? , password =? , email =? where id =? ";
		

try {
	pstmt = conn.prepareStatement(sql);
	pstmt.setString(1, user.getName());
	pstmt.setString(2, user.getPassword());
	pstmt.setString(3, user.getEmail());
	pstmt.setString(4, user.getId());
	return pstmt.executeUpdate();
}catch(Exception e) {
			
	e.printStackTrace();
}finally {
	try {
		if(pstmt !=null) pstmt.close();
		if(conn !=null) conn.close();

	}catch(Exception e) {
		e.printStackTrace();
	}
			
}
		return -1;
	}

'프로젝트 > JSP CRUD 게시판' 카테고리의 다른 글

세션(로그인,글 작성/수정/삭제)  (0) 2020.12.02
JSP 내장 객체  (0) 2020.12.01
Eclipse (Emmet 환경설정)  (0) 2020.12.01
게시판 목록 페이징 하기  (0) 2020.11.30
게시판 목록 만들기  (0) 2020.11.30

+ Recent posts