티스토리 뷰
이번 시간에는 속성과 영역에 대해서 알아보도록 하겠습니다.
JSP에서 제공을 해주는 내장겍체중
- request객체
- session객체
- application객체
들은 각각의 영역(Scpoe)와 관련된 속성(Attribute)를 가질 수 있습니다.
여기서 속성은 무엇이며 영역은 무엇인지 아주 간단~히 정리해보도록 하겠습니다.
속성(Attribute) : 공유되는 데이터
영역(Scpoe) : 속성을 공유할수 있는 유효범위
위에서 request, session, application 객체들은 영역과 속성을 가질수 있다고 언급을 하엿습니다.
그러면 어떠한 속성과 영역을 가지는지 알아보도록 하겠습니다
- Session
session내장객체는 세션이 유지되고 있는 범위안에서 즉, session scope안에서
서로 다른 페이지(자원)이라고 할지라도 객체(데이터)들을 공유할수 있는 속성을 가지고 있으며 이 속성에 내장된 객체(데이터)는 세션이 종료되는 순간에 반환된다.
(다른 브라우저 작업시 휘발)->한 브라우저 내에 1개의 session만 생성
- Request
request내장객체는 클라이언트(=사용자)의 요청(response)이 처리되는 동안에 속성을 사용할수 있다.
즉, forward(포워딩) 또는 include방식을 이용하는 경우 여러개의 페이지에서도 요청정보가 계속 유지되므로 request영역의 속성을 여러 페이지에서 공유할수가 있다.
- Application
웹 어플리케이션이 실행되고 있는 동안 속성을 사용할수가 있다.
즉, 쉽게말하자면 학원 게시판에 빗대어 이야기를 해보겠습니다.
게시판은 모든이가 볼수가 있습니다. 따라서 application은 모든이가 공유할수 있는 데이터입니다. ->가장 큰 영역
- Page
page영역은 위에 3가지 영역과는 다르게 page내장객체가 아닌 pageContext내장객체를 통해 접근할 수 있는 영역이라는 것 입니다.
pageContext는 모든 영역의 속성에 대한 접근이 가능합니다.
영역과 속성에 대한 개념을 정리해 보았습니다.
이제 예제를 통해서 직접 코딩도 해보고 해석도 해보겠습니다.
우선 파일을 만들어 줍니다.
※코드를 작성하실때 파라미터들이 어떻게 넘어가며 어떠한 구조로 작성이 되는지 잘 유의하시며 공부를 해주시기 바랍니다.
attributeTest1_Form.jsp 파일에서 사진과 같이 코딩해줍니다.
그러면 이와같이 결과창이 뜰것입니다. 물론 저기에다가 입력을 한다고 해도 아무런 결과값 없이 빈화면만 뜰것입니다.
결과창에서 이름과 아이디 입력창에다가 값을 입력하고 '전송' 버튼을 누르면
attributeTest1.jsp파일로 파라미터들이 넘어가 요청(request)이 전송됩니다.
이제 요청이 전송된 atttibuteTest1.jsp파일로 가겠습니다.
[해석]
4~13 번째 줄을 보시면
스크립트릿 (<% %>)을 사용하였습니다. 스크립트릿 영역에서는 JAVA코딩이 가능합니다.
request.setCharacterEncoding("euc-kr");
->요청한다. request객체를 통해 넘어온 파라미터중에서 한글이 있기때문에 한글처리를 위한 코딩을 한것
String name = request.getParameter("name");
String id = request.getParameter("id");
->String타입의 변수 name과 id에다가 요청받은 파라미터 name과 id를 저장한다는 뜻
if( name!=null && id!=null)
{
application.setAttribute("name", name);
application.setAttribute("id", id);
}
->만약 name변수와 id변수에 저장된 값이 있을경우
application영역에 setAttribute()메소드를 사용하므로써 어느페이지에서라도 name과 id를 사용할수 있게한다는 의미입니다. "name"값의 이름으로 name객체를 등록햇습니다.
22번째줄을 보시게되면
표현식(<%= %>)을 사용하므로써 요청한 name과 id를 이용한것입니다.
이것은 어느 페이지에서도 사용 가능합니다.Why? -> application영역이여서
form태그를 사용하므로써 attributeTest2.jsp파일로 post방식으로 파라미터들을 넘겨주는데
그 파라미터들의 내용은
table태그이면서 session영역에 저장할 데이터들을 입력받을 form을 생성한 것 입니다.
이제 attributeTest2.jsp파일로 가겠습니다.
[해석]
4~12번째줄은
스크립트릿(<% %>) 영역입니다.
5번째줄은 request객체를 통해 넘어오는 파라미터중에서 한글이 있기때문에 한글처리를 위한 코드를 작성한 것입니다.
6~7번째줄은
attributeTest1.jsp에서 넘겨준 파라미터들입니다. 그래서 그 파라미터들을 attributeTest2.jsp파일에서 사용할수 있게 가지고 오는것 입니다.
근데 그 파라미터들을 가지고 오는데
9~11번째줄을 보시면
session영역에setAttribute()메소드를 사용해서 등록한 것입니다.
이것은 같은 브라우저 내에서만 email, address, tel을 공유하겠다는 의미입니다.
쉽게 말하면 chrome에서 작업하다가 sfari로 넘어가면 chrome에서 작업한 session영역에 있는 속성들을 safari에서 사용할수가 없다는 의미입니다.
12번째줄은
이전에서 application영역에 있던 속성입니다. application는 어느브라우저든 사용이 가능한것입니다.(학원 게시판을 떠올려라)그래서 attributeTest2.jsp파일에서도 사용할수 있게 setAttribute()메소드를 이용해서 읽어드린 것 입니다.
22번째줄에서 보면
<a>태그를 사용하고 href속성을 사용하였는데요 '확인하러가기'를 클릭하시면 attributeTest3.jsp파일로 넘어가게끔 링크를 걸어둔 것 입니다.
이제 attributeTest3.jsp파일로 넘어가겠 습니다.
[해석]
26~45번째줄을 보겠습니다.
28번째줄은
colspan="2"는 2열을 합친다는 뜻 입니다.
30~36번째줄에
스크립트릿이 사용되었는데요 여기서 Enumeration이라는게 등장하였습니다. 간단하게 개념정리하고 넘어가도록 하겠습니다.
- Enumeration객체
- java.util.Enumeration 인터페이스 : 객체를 저장하는 객체
- 요청된 요소의 값들을 object 타입의 값으로 1:1로 저장
-메소드
1.boolean hasMoreElements() : 더이상의 객체존재 有/無 를 반환
2. Object nextElements(); : 다음 객체를 가지고 온다. Enumeration타입으로 받아온 객체를 작업에서 원하는 객체형태로 형변환하여 사용한다.
31번째줄을 보시면
session영역에 등록된 모든 속성(Attribute)이름을 Enumeration타입으로 읽어드린뒤 변수 e에 저장합니다.
32번째줄부터 while문장인데요
while(조건식) 에서 조건식이 e.hasMoresElements() 입니다. 이것은 변수 e에있는 개체가 존재할시 while문을 반복한다는 뜻 입니다.
그래서 String attributeName = (String)e.nextElement();
->arrtibuteName라는 변수로 각각 속성의 이름들을 받는다.
String attributeValue = (String)session.getAttribute(attributeName);
->attributeValue 라는 변수에다가 attributeName라는 이름을 가진 속석을 getAttribute()메서드를 사용하므 로서 저장한다는 뜻입니다.
브라우저를 종료하고 고 다시 실행하면 session영역을 사라지고 application은 그대로 남아있는데
application영역은 서버를 중지시키면 소멸됩니다.
'허접한 프로그래밍 > [JSP]Programming' 카테고리의 다른 글
[JSP]액션태그(include) (2) | 2013.11.07 |
---|---|
[JSP] 액션태그(forward) (4) | 2013.11.07 |
[내장객체] application 객체 (0) | 2013.11.04 |
[내장객체]pageContext 객체 (0) | 2013.11.04 |
웹 프로그램 업무 흐름도. (0) | 2013.09.08 |