[ITWILL : JSP]영역객체 안에서 사용하는 속성(Attribute), 링크이동 방법별 전달가능한 영역(scope)
ITWILL학원 : 15강 JSP기초 BY 정규태강사
1. 영역객체 안에서 사용하는 속성(Attribute)
속성(Attribute)을 저장해서 사용.
사용형태 2가지
해당영역객체.setAttribute("이름", 값)
해당영역객체.getAttribute("이름")
1 | //html페이지 |
페이지객체에서 setAttribute(“이름”, 값)를 통해 생성하고 getAttribute(“이름”)를 통해 출력한다.
1 | //jsp페이지 |
2. 링크이동 방법별 전달가능한 영역(scope)
공통적으로 아래 4가지 방식들은 session,application, 파라미터를 저장/전달가능하다.
자바스크립트, JSP(sendRedirect), 액션태그 방식은 서로 같이 사용불가.
2-1. a태그로 이동시
사용가능한 영역은 4가지영역(pageContext,request,session,application) 중에 session, application영역의 값 공유가능하다.
1 | <a href="scopeProPro.jsp"> scopeProPro.jsp로 페이지이동 ... </a> |
만약 파라미터의 값도 저장하고 전달하고 싶다면 어떻게 하면될까?
표현식을 이용하면 된다.
파라미터까지 전달이 가능하다.
1 | <a href="scopeProPro.jsp?id=<%=id%>"> scopeProPro.jsp 페이지로 이동 ... </a> |
즉, a태그(링크) 이동시 session,application 영역의 값을 공유가능.
파라미터의 값도 저장/전달 가능하다(get 방식)
HTML이기에 파라미터를 가져갈때 표현식을 사용하면된다.
2-2. js에서 location.href사용하여 이동시
자바스크립트 이동시 session,application 영역의 값을 공유가능.
파라미터의 값도 저장/전달 가능하다(get 방식)
HTML이기에 파라미터를 가져갈때 표현식을 사용하면된다.
1 | <script type="text/javascript"> |
2-3. 내장객체 response 이동시
session,application 영역의 값을 공유가능.
파라미터의 값도 저장/전달 가능하다(get 방식).
파라미터를 가져갈때 표현식이 아닌
1 | <% |
아이디가 한글일때는 왜 물음표가 나타날까요?
response.sendRedirect()전까지는 한글이 안깨지다가 response.sendRedirect()명령어부터 한글이 깨진다.
데이터를 인코딩해서 보내야한다. 인코딩에는 여러 방식이 있는데 response.sendRedirect()는 한글데이터를 처리하지못하는 인코딩방식이다.
response객체안에 전달되는 콘텐츠타입을 바꿔서 해야하는데 그걸 하려면 서블릿을 이용해야해서 서블릿배우면 알수있다.
2-4. 액션태그 forward 이동시(p222)
html태그이지만 jsp동작을 할수있게 만들어진 특수한 기능을 가지고 있다.
액션태그 : jsp페이지에서 자바, 스크립트코드없이 다른 페이지로 이동하는 기능이 있다.
서블릿, 객체(자바빈)에 접근할수있는 방법이 액션태그이다.
원래 페이지에 의해 생성된 request객체와 response객체가 그대로 넘어간다.
즉, session,application 그리고 request 영역 더불어 파라미터값까지 공유가능.
1 | <jsp:forward page="scopeProPro.jsp" /> |
액션태그는 포워딩이 일어난다.
- forwarding (포워딩)이란
- 이동하는 페이지의 주소는 변경 X, 페이지의 내용만 변경.
- 중요 request객체와 response객체를 가지고 이동가능
따라서 액션태그는 이동하는 페이지의 주소는 변경되지않고 페이지의 내용만 변경되는 희안한 태그이면서 request객체와 response객체를 가지고 이동한다.
그런데 주소를 변경안하는 기능이 왜 필요할까?
MVC패턴개발방식에서 꼭 필요하다.
웹서핑중에 jsp파일명을 주소창에서 본 적이 있는가?
아마 없을 것이다. 보안을 위해서.jsp
파일을 절대 공개하지않는다.
따라서 가상주소를 사용해야하는데 그 가상주소를 사용할때 액션태그 forward가 필요하다