들어가기 전 !
java 에는 패키지, 뷰에는 폴더 !
자바빈 작성 방법
자바빈은 클래스이기 때문에 기존의 자바 클래스를 작성하는 방법과 동일 !
자바빈의 경우 데이터를 담을 프로퍼티(멤버변수)와 데이터를 가져오거나 세팅하는 기능을 하는 메서드로 구성된다
package simple;
public class Fruit {
private String sort;
public String getSort() {
return sort;
}
public void setSort(String sort) {
this.sort = sort;
}
}
1. 빈 생성 : fruit 객체 생성 <jsp:useBean>
* useBean : 생성도 되지만, 있으면 사용도 됨
* id : java bean 이름, 참조변수, 중복되지 않음
* class: java bean 클래스 이름
* scope : 범위, 자바빈 객체가 저장될 영역을 지정,
age, request, session, application 중 하나를 값 지정 (기본값은 page)
scope="page" - 자바빈 클래스를 현재 페이지 내에서만 사용 가능하고 페이지를 이동하면 유지되지 않음.
scope="request" - 리퀘스트 요청을 받고 처리가 완료될때 까지 유지.
scope="session" - 세션 영역이 유지되는 동안(브라우저 종료 전까지) 사용가능.
scope="application" - 서버 종료전까지 유지.
<jsp:useBean id="fruit" class="simple.Fruit"/>
서블릿 파일을 보면 useBean 에 대해 감을 잡을 수 있다 !
fruit 이 없으니까 빈 생성 !
2. 값 설정 (setter) : 생성된 빈 fruit 에 값 설정 <jsp:setProperty>
멤버 변수 sort 에 값 설정
* property : 값을 지정할 프로퍼티의 이름, filed
* name : 프로퍼티 값을 변경할 자바빈 객체의 이름
* value : 프로퍼티 값, 표현식 사용 가능
<jsp:setProperty value="사과" property="sort" name="fruit" />
3. 값 출력 (getter) : 생성된 빈 fruit 에 설정된 값 출력 <jsp:getProperty>
* property : 값을 가져올 프로퍼티의 이름
* name : <jsp:useBean> 액션 태그의 id 속성에서 지정한 값을 사용
<div>과일 종류 : <jsp:getProperty property="sort" name="fruit"/></div>
4. getter 호출
<% String fruitSort = fruit.getSort(); %>
<div>[getter 호출] 과일 종류 ? <%= fruitSort %> </div>
5. 페이지 이동
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>beanFruitResponse.jsp</title>
</head>
<body>
<h1>beanFruitResponse.jsp</h1>
<h2>페이지 이동했습니다.</h2>
</body>
</html>
<!-- 페이지 이동 -->
<jsp:forward page="beanFruitResponse.jsp" />
6. 생성된 빈 사용, 값 출력
<h1>beanFruitResponse.jsp</h1>
<h2>페이지 이동했습니다.</h2>
<!-- [생성된 빈 사용] fruit bean (beanFruitRequest.jsp 에서 생성된 빈) -->
<jsp:useBean id="fruit" class="simple.Fruit" scope="request" />
<!-- [값 출력] -->
<div>과일 종류 : <jsp:getProperty property="sort" name="fruit" /> </div>
여기서 주의해야할 점은 빈 생성시 scope 에 어떤 값을 설정함에 따라 달라진다
또 가져오는 빈 스코프와 현재 페이지에 있는 빈 스코프와 동일시 해줘야 한다
beanFruitRequest.jsp 과 beanFruitResponse.jsp 의 서블릿 파일
7. 페이지 이동
순수 a 태그 자체로 이동이 되고, include 로 하면 자바에서 내부적으로 넘겨주었기 때문에 빈 주소를 넘길 수 있다 아래 내용을 참고하면 되는데 !
a 태그를 쓰면 빈 주소를 넘길 수 없다 !
# beanFruitRequest.jsp
<jsp:forward page="beanFruitResponse.jsp" />
<div>
<a href="beanFruitResponse.jsp">페이지 이동</a>
</div>
8. 페이지 포함
# beanFruitRequest.jsp
<!-- 페이지 포함 -->
<jsp:include page="beanFruitResponse.jsp" />
빈이 잘 넘어온 것을 확인할 수 있음
주소를 통해 보면 !
# beanFruitRequest.jsp
<!-- [bean 주소] -->
<div>생성된 fruit bean 주소 : <%= fruit %></div>
<hr>
<!-- 페이지 포함 -->
<jsp:include page="beanFruitResponse.jsp" />
# beanFruitResponse.jsp
<h1>beanFruitResponse.jsp</h1>
<h2>페이지 이동했습니다.</h2>
<!-- [생성된 빈 사용] fruit bean (beanFruitRequest.jsp 에서 생성된 빈) -->
<jsp:useBean id="fruit" class="simple.Fruit" scope="request" />
<!-- [값 출력] -->
<div>과일 종류 : <jsp:getProperty property="sort" name="fruit" /> </div>
<!-- [bean 주소] -->
<div>생성된 fruit bean 주소 : <%= fruit %></div>
여기까지 빈 생성, 생성된 빈 사용을 할 때 스코프를 request 로 한 거고
page 로 했을 경우
scope : page
해당이 되는 페이지에서만 빈 사용 가능, 새로 고침될 때마다 빈 주소 바뀜
다른 페이지로 이동이 될 경우 사라짐
리퀘스츠 페이지에서 빈 생성된거고, 리스판스 페이지에서도 빈 생성된 것을 볼 수 있음
scope : session
사용자의 접근이 페이지 시작이 되면 기존에 만들어진 빈이 없으니 빈을 만들고,
스코프가 세션으로 된다
즉 접근이 되는 범위 라고 생각하면 된다.
주소는 같다 ! 새로 고침해도 주소 같음 ! 매번 달라지지 않고, 세션이 유지 되는 동안
즉 브라우저 종료 전까지 사용 가능하다
scope : application
새로 고침한다고 주소가 달라지지 않는데, 이름처럼 앱 실행될 때까지 유지가 된다
생존 시기가 제일 긴 범위 !
즉 애플리케이션이 종료되기 전까지 유지가 된다
근데 null 인 이유는 잘은 모르겠지만, 초기화 순서 문제인 거 같다
빈 객체가 생성되는 시점과 초기화 되는 시점 또는 호출되는 시점이 일치하지 않으면 빈 객체가 올바르게 초기화 되지 않아 null 로 주는 듯
애플리케이션이 앱 설정과 관련이 있기 때문에 setter getter 를 통해서 접근이 불가능하게 만들어놓아서 액션 태그를 통해서 접근할 수 있게 만들었다 내가 정의한 세터 게터는 안됨 !
잘 이해가 안되넴
https://all-record.tistory.com/105
JSP 자바빈(JavaBean)과 <jsp:useBean> 액션태그
JSP 페이지의 주용 기능 중 하나는 데이터를 보여주는 기능이다. 흔하게 볼 수 있는 게시판을 예로 들면 글 목록 보기, 글쓰기, 글 읽기 등의 기능이 이에 해당한다. 그런데 이런 데이터를 보여주
all-record.tistory.com
다시 정리 !
1. beanItemRequest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>beanItemRequest.jsp</title>
</head>
<body>
<h1>beanItemTwoRequest.jsp</h1>
<div>세션 : <%= request.getSession() %></div>
<form action="beanItemTwoResponseA.jsp" method="get">
<div>
<label>id : </label>
<input type="text" name="id">
</div>
<div>
<label>name : </label>
<input type="text" name="name">
</div>
<input type="submit" value="전송">
</form>
</body>
</html>
2. beanItemResponseA.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>beanItemResponseA.jsp</title>
</head>
<body>
<h1>[빈 최초 생성] beanItemTwoResponseA.jsp</h1>
<div>세션 : <%= request.getSession() %></div>
<%
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
%>
<!-- 1. scope="page" -->
<jsp:useBean id="itemPage" class="simple.Item" scope="page" />
<jsp:setProperty property="*" name="itemPage" />
<h2>1. scope="page"</h2>
<div>아이디 : <jsp:getProperty property="id" name="itemPage" /></div>
<div>상품명 : <jsp:getProperty property="name" name="itemPage" /></div>
<div>빈 주소 : <%= itemPage %></div>
<!-- ----------------------------------------------------------------- -->
<!-- 2. scope="request" -->
<!-- value : 안에 쌍따옴표가 들어올 수 있기 때문에 밖은 호따옴표 -->
<jsp:useBean id="itemRequest" class="simple.Item" scope="request" />
<jsp:setProperty value='<%= id + 1 %>' property="id" name="itemRequest" />
<jsp:setProperty value='<%= name + " [Request]" %>' property="name" name="itemRequest" />
<h2>2. scope="request"</h2>
<div>아이디 : <jsp:getProperty property="id" name="itemRequest" /></div>
<div>상품명 : <jsp:getProperty property="name" name="itemRequest" /></div>
<div>빈 주소 : <%= itemRequest %></div>
<!-- ----------------------------------------------------------------- -->
<!-- 3. scope="session" -->
<jsp:useBean id="itemSession" class="simple.Item" scope="session" />
<jsp:setProperty value='<%= id + 2 %>' property="id" name="itemSession" />
<jsp:setProperty value='<%= name + " [Session]" %>' property="name" name="itemSession" />
<h2>3. scope="session"</h2>
<div>아이디 : <jsp:getProperty property="id" name="itemSession" /></div>
<div>상품명 : <jsp:getProperty property="name" name="itemSession" /></div>
<div>빈 주소 : <%= itemSession %></div>
<!-- ----------------------------------------------------------------- -->
<!-- 4. scope="application" -->
<jsp:useBean id="itemApplication" class="simple.Item" scope="application" />
<jsp:setProperty value='<%= id + 3 %>' property="id" name="itemApplication" />
<jsp:setProperty value='<%= name + " [Application]" %>' property="name" name="itemApplication" />
<h2>4. scope="application"</h2>
<div>아이디 : <jsp:getProperty property="id" name="itemApplication" /></div>
<div>상품명 : <jsp:getProperty property="name" name="itemApplication" /></div>
<div>빈 주소 : <%= itemApplication %></div>
<!-- ----------------------------------------------------------------- -->
<!-- 버튼으로 (새) 페이지 이동 -->
<button type="button" onclick="window.open('beanItemTwoResponseB.jsp')">이동</button>
</body>
</html>
3. beanItemTwoResponseB.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>beanItemResponseB.jsp</title>
</head>
<body>
<h1>beanItemTwoResponseB.jsp</h1>
<div>세션 : <%= request.getSession() %></div>
<!-- 1. scope="page" -->
<jsp:useBean id="itemPage" class="simple.Item" scope="page" />
<h2>1. scope="page"</h2>
<div>아이디 : <jsp:getProperty property="id" name="itemPage" /></div>
<div>상품명 : <jsp:getProperty property="name" name="itemPage" /></div>
<div>빈 주소 : <%= itemPage %></div>
<!-- ----------------------------------------------------------------- -->
<!-- 2. scope="request" -->
<jsp:useBean id="itemRequest" class="simple.Item" scope="request" />
<h2>1. scope="page"</h2>
<div>아이디 : <jsp:getProperty property="id" name="itemRequest" /></div>
<div>상품명 : <jsp:getProperty property="name" name="itemRequest" /></div>
<div>빈 주소 : <%= itemRequest %></div>
<!-- ----------------------------------------------------------------- -->
<!-- 3. scope="session" -->
<jsp:useBean id="itemSession" class="simple.Item" scope="session" />
<h2>1. scope="page"</h2>
<div>아이디 : <jsp:getProperty property="id" name="itemSession" /></div>
<div>상품명 : <jsp:getProperty property="name" name="itemSession" /></div>
<div>빈 주소 : <%= itemSession %></div>
<!-- ----------------------------------------------------------------- -->
<!-- 4. scope="application" -->
<jsp:useBean id="itemApplication" class="simple.Item" scope="application" />
<h2>1. scope="page"</h2>
<div>아이디 : <jsp:getProperty property="id" name="itemApplication" /></div>
<div>상품명 : <jsp:getProperty property="name" name="itemApplication" /></div>
<div>빈 주소 : <%= itemApplication %></div>
<!-- ----------------------------------------------------------------- -->
</body>
</html>
'Language > JSP' 카테고리의 다른 글
JSP 최상위 경로 요청 jsp / html (0) | 2024.07.25 |
---|---|
Tomcat 한글 설정 필터 추가 (0) | 2024.07.24 |
JPA (0) | 2024.07.22 |