JSP - chapter07

ZiSoOm·2021년 8월 5일
0

JSP

목록 보기
11/12

🥜 자바빈

  • 속성(데이터), 변경 이벤트, 객체 직렬화를 위한 표준
  • jsp에서는 속성을 표현하기 위한 용도로 사용
  • 자바빈 규약을 따르는 클래스를 자바빈이라고 부름

🥜 jsp:useBean 액션 태그

  • jsp 페이지에서 사용할 자바빈 객체를 지정할 때 사용함
    1) id : 빈(bean) 이름. jsp 페이지에서 자바빈 객체에 접근할 때 사용할 이름
    2) scope : 자바빈 객체를 저장할 영역. page(default), request, session, application
    3) class : 자바빈 클래스의 완전한 이름 입력(패키지 이름 포함)

🥜 jsp:useBean의 class속성과 type속성의 차이

1) class 속성

  • request 기본 객체에 member 속성이 없으면 새로운 MembereInfo 클래스의 member 객체를 생성함
    2) type 속성
  • 지정한 request 기본 객체에 member 속성이 이미 존재한다고 가정함. 직접 jsp로 접근 시 해당 속성의 값이 없으므로 MemberInfo 클래스의 member 객체를 생성하지 않고 에러를 발생시킴
  • MemberInfo member = (MemberInfo)request.getAttribute("member");
    if(member == null) {
    //에러 발생
    }

MemberInfo

  • MemberInfo를 자바빈 형식으로 만듦
package chap08.member;

import java.util.Date;

public class MemberInfo {

	//1) 데이터를 저장하는 필드
	private String id;
	private String password;
	private String name;
	private String address;
	private Date registerDate;
	private String email;
	
	//2) 데이터를 읽어올 때 사용되는 getter 메서드
	public String getId() {
		return id;
	}
	//3) 값을 저장할 때 사용되는 setter 메서드
	public void setId(String id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public Date getRegisterDate() {
		return registerDate;
	}
	public void setRegisterDate(Date registerDate) {
		this.registerDate = registerDate;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	
}

makeObject.jsp

  • MemberInfo 클래스의 member 객체를 생성 후 request 기본 객체의 member 속성에 저장 후 useObject.jsp로 포워딩(요청 흐름 변경)
  • jsp:forward는 해당 페이지로 요청 흐름을 이동시키지만 주소는 변하지 않음
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!-- 
jsp:useBean 액션 태그는 JSP 페이지에서 사용할 자바빈 객체를 지정할 때 사용함
1) id : 빈 (bean)이름. JSP 페이지에서 자바빈 객체에 접근할 때 사용할 이름
2) scope : 자바빈 객체를 저장할 영역. page(default), request, session, application
3) class : 자바빈 클래스의 완전한 이름 입력(패키지 이름 포함)
 -->
<jsp:useBean id="member" scope="request" class="chap08.member.MemberInfo" />
<%
	//jsp:useBean 액션 태그의 id 속성에 지정한 이름을 변수명으로 사용함
	member.setId("ddit");
	member.setName("개똥이");
%>

<!-- useObject.jsp 페이지로 요청 흐름을 이동시킴 -->
<jsp:forward page="/chapter08/useObject.jsp"/>

useObject.jsp

  • jsp:useBean 액션태그를 사용하여 makeObject.jsp가 생성한 객체를 사용함
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="member" scope="request" class="chap08.member.MemberInfo"/>
<!DOCTYPE html>
<html>
<head>
<title>인사말</title>
</head>
<body>
 <%=member.getName()%> (<%=member.getId() %>) 회원님 <br>
 안녕하세요!
</body>
</html>
  • useObject.jsp 의 jsp:useBean을 type으로 했을경우
    1) makeObject.jsp의 포워딩을 통해 useObject.jsp로 들어간경우

    2) 경로에 검색하여 useobject.jsp로 바로 들어간 경우
  • useObject.jsp 의 jsp:useBean을 class로 했을경우
    1) makeObject.jsp의 포워딩을 통해 useObject.jsp로 들어간경우

    2) 경로에 검색하여 useobject.jsp로 바로 들어간 경우

결과

  • class일 경우, useObject.jsp를 경로에 쳐서 바로 들어가면 새로운 useBean이 생성되고, 아직 set해주기 전이므로 null이 됨
  • type일 경우, useObject.jsp를 경로에 쳐서 바로 들어가도 객체를 생성시키지 않으므로 에러를 발생시킴

🥜jsp:setProperty, jsp:getProperty

  • jsp:setProperty : 데이터의 값을 설정하기 위해 자바빈 파일의 setter 메서드를 사용함
  • jsp:getProperty : 저장된 데이터의 값을 읽어오기 위해 자바빈 파일의 getter 메서드를 사용함

membershipForm.jsp

  • [회원가입] 버튼을 누르면 입력한 데이터를 POST 방식으로 processJoining.jsp에 전달함
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 입력폼</title>
</head>
<body>
	<form action="/chapter08/processJoining.jsp" method="post">
		<table border="1" style="width: 50%;">
			<tr>
				<th>아이디</th>
				<td colspan="3">
					<input type="text" name="id" size="10" placeholder="아이디를 입력해주세요">
				</td>
			</tr>
			<tr>
				<th>이름</th>
				<td>
					<input type="text" name="name" size="10" placeholder="이름을 입력해주세요">
				</td>
				<th>이메일</th>
				<td>
					<input type="text" name="email" size="10" placeholder="이메일을 입력해주세요">
				</td>
			</tr>
			<tr>
				<td colspan="4" style="text-align: center;">
					<input type="submit" value="회원가입">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

processJoining.jsp

  • membershipForm.jsp의 [회원가입] 버튼을 누르면 파라미터로 데이터가 전송됨
  • 자바빈 클래스의 객체를 생성한 후, 전송된 파라미터 값을 자바빈 객체의 프로퍼티 값으로 저장함
  • jsp:setProperty 액션 태그를 사용하기 위해서는 전송되는 파라미터의 name(이름)과 자바빈 프로퍼티의 이름을 동일하게 해야 함
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%
	//읽어올 파라미터의 캐릭터 인코딩을 UTF-8로지정함
	request.setCharacterEncoding("UTF-8");
%>
<!-- MemberInfo 자바빈 클래스의 객체를 생성. memberInfo 이름으로 저장 -->
<jsp:useBean id="memberInfo" class="chap08.member.MemberInfo" />

<!-- 파라미터 값을 memberInfo 자바빈 객체의 프로퍼티 값으로 저장 -->
<jsp:setProperty name="memberInfo" property="*" />
<%
// memberInfo.setId(request.getParameter("id"));
// memberInfo.setName(request.getParameter("name"));
// memberInfo.setEmail(request.getParameter("email"));
%>
<!DOCTYPE html>
<html>
<head>
<title>회원 가입</title>
</head>
<body>
  <table border="1" style="width: 50%;">
      <tr>
          <th>아이디</th>
          <td colspan="3">
              <!-- setProperty한 값 가져올 수 있음 -->
              <%
                  out.print(memberInfo.getId()); //jsp액션태그와 동일한 의미
              %>
              <jsp:getProperty name="memberInfo" property="id" /> 
          </td>
      </tr>
      <tr>
          <th>이름</th>
          <td>
              <%
                  out.print(memberInfo.getName()); //jsp액션태그와 동일한 의미
              %>
              <jsp:getProperty name="memberInfo" property="name" />
          </td>
          <th>이메일</th>
          <td>
              <%
                  out.print(memberInfo.getEmail()); //jsp액션태그와 동일한 의미
              %>
              <jsp:getProperty name="memberInfo" property="email" />
          </td>
      </tr>
  </table>
</body>
</html>
  • membershipForm.jsp에서 아이디, 이름, 이메일 입력 후 회원가입 버튼 클릭
  • jsp:useBean을 통해 생성한 객체를 jsp:setProperty를 통해 전송된 파라미터 값을 자바빈 객체의 property 값으로 지정 => jsp:getProperty를 통해 저장한 값 가져옴

0개의 댓글