2012. 1. 13. 15:13

request.setAttribute와 request.getAttribute에 대해서

request.setAttribute() 와 request.getAttribute()


request.setParameter() 와 getParameter()를 이용하면 String의 값 밖엔 받을 수 없다. 
List를 받기 위해서는 setAttribute()와 getAttribute()를 써야 한다. 
이때 type이 Object 이기 때문에 반드시 형변환을 해줘야 한다.

 

혹시나 해서 문법도 쓴다.

 

action에서 객체를 request에 담을 때.

request.setAttribute("객체명", 객체);

 

이렇게 해서 jsp를 호출하면 jsp에서 "객체명"을 이용해서 객체를 받을 수 있다.

< %
Object x = request.getAttribute("객체명");
% >

 

Object 형으로 받는 다는 것. 핵심 포인트.

//--------------------------------------------------------------------------- 

 게시판 스킨등 부득이한 동적 인클루딩이 발생 시,

속도를 위한 중복처리를 방지하기 위해 자신이 생성한 class 객체의 자료를 넘기고 싶을 때가 있을때,

request.getAttribute 를 그냥 사용하면 전달되지 않습니다.


그렇다고 정의된 <Object>타입으로 객체를 새로 생성하는 등 번거로운 작업을 할 필요도 없습니다.


java class파일에서 생성한 CTest 라는 클래스가 있고, 이를 a.jsp 에서

CTest a = new CTest(); 라고 정의하고 사용 후, 이 a 인스턴스를 <jsp:include page="b.jsp">로 넘기고 싶다면,


a.jsp 에는 그냥 생각한 대로 하시면 됩니다.

request.setAttribute("abc", a);


그런후, b.jsp에서는 객체를 새로 정의했겠죠? 여기선 인스턴스를 받아올 것이므로 새 인스턴스를 생성할 필요는 없습니다.(new CTest()가 불필요)

CTest b = (CTest)request.getAttribute("abc");


그냥 무심코 (CTest)란 강제타입지정을 빠뜨렸더니 안되더군요. 에러가 뜨는분들은 체크해보시길~ 물론 이는 <Object>나 벡터타입을 이용할때 꼭 주의해야 하는 사항입니다.