|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=7714 [복사]
출처 : webclass.tistory.com
저작권 : MinjuneL
궁금하신 점은 답변을 달아주시거나,
webclass.tistory.com
에 방문하셔서 방명록을 남겨주시면 됩니다!!
감사합니다.
아래 내용은 이전에 제가 공부와 함께 같이 포스팅한 내용입니다.
전부 다는 아니지만, 꽤 많은 내용이 포스팅 되어있기 때문에, 관심있으신 분은 블로그에 접속하셔서
확인 하셔도 됩니다.
-----------------------------------------------------------------------------------------------------------------------
1. page 객체.
페이지 객체는 프로그램으로 작성한 jsp 문서를 서블릿 (*.java) 문서로 변환 했을 때, 자기 자신을 가르키는 객체이다.
다음은 자동으로 생성된 page 객체의 선언 부분이다.
Object page = this;
이전에 java 프로그램의 최상위 클래스는 Object 클래스라고 설명을 한 적이 있을 것이다.
따라서 page 객체는 Object 객체로 캐스팅이 된, 작성한 서블릿 객체이다.
그렇기 때문에 문서의 외부에서(다른 문서) page 객체를 사용하는 일은 거의 없고, 내부적인 작업을 위해서 사용되는 객체이다.
다음은 page 객체를 사용한 예제이다.
TestPage.jsp
<%@page contentType="text/html;charset=KSC5601"%>
<html>
<head><title>page 내장 객체</title>
<%! int sum(int a, int b){
return a+b;
} %>
</head>
<body>
<%
int val1 = 2000;
int val2 = 3000;
out.println("직접 연산을 통한 출력" + sum(val1,val2) +"<br>");
out.println("this 객체를 이용한 출력" + this.sum(val1,val2) + "<br>");
TestPage$jsp testPage = (TestPage$jsp)page;
out.println("page 객체를 이용한 출력" + testPage.sum(val1,val2) +"<br>");
%>
</body>
위의 <%! %>에 대해서 먼저 설명을 해야 할 것 같다.
jsp 프로그램은 서블릿으로 변형되면서 service() 메소드 안에 해당 jsp 프로그램이 입력이 된다.
그렇게 되면, 해당 클래스의 메소드를 작성할 수 없다는 것을 알 수 있을것이다.
메소드 안에 메소드를 선언할 수 없기 때문이다.
그것을 해결하기 위해서 사용하는 것이 <%! %>이다.
위에서 사용하는 것처럼 사용하면, service 메소드의 밖에 따로 메소드를 만들게 된다.
이렇게 되면, 위의 코딩은 이해하기 쉬울것이다.
아마, TestPage$~~ 여기 부터 해석이 막힐 것인데,
이 TestPage$jsp 라는 변수형은 현재 작성중인 jsp의 서블릿 클래스 이름이된다.
이렇게 해주는 이유는 page 객체 자체가 Object 형이기 때문에, sum 메소드를 사용할 수 없기 때문이다. 그래서 해당하는 객체로 다운 캐스팅을 해준다.
잘 모르겠는 분은 c++에서 다이나믹 바운딩의 상위 객체로 하위 객체 메소드 호출에 관련해서 검색해 보면 상세히 나와 있을것이다.
그냥 상위 객체형으로 하위 객체를 갖고 있을때, 하위 객체의 메소드는 불러서 쓸 수 없다는 것이다.
물론, c++에서는 상위 객체의 포인터 형으로 하위 객체에서virtual 키워드 설정을 해놓은 메소드는 사용이 가능하다.
이것은 c++의 내용이므로, 자세히 설명하지 않는다.
아무튼 여기까지 page 객체에 대한 설명이다.
* 근데,,, 왜 나는 컴파일이 안될까요? 검색해도 안되고, ㅜㅜ 걍 page 같은거 쓰지 말고, this 써버려요 젠장. |
Hit : 9854 Date : 2012/11/18 12:14
|