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>나 벡터타입을 이용할때 꼭 주의해야 하는 사항입니다.