[ITWILL : JSP]영역객체 안에서 사용하는 속성(Attribute), 링크이동 방법별 전달가능한 영역(scope)

ITWILL학원 : 15강 JSP기초 BY 정규태강사

1. 영역객체 안에서 사용하는 속성(Attribute)

속성(Attribute)을 저장해서 사용.

사용형태 2가지

  • 해당영역객체.setAttribute("이름", 값)
  • 해당영역객체.getAttribute("이름")
1
2
3
4
5
6
7
//html페이지
<fieldset>
<form action="jsp페이지.jsp" method="get">
<label>아이디 : </label><input type="text" name="id">
<input type="submit" value="submit">
</form>
</fieldset>

페이지객체에서 setAttribute(“이름”, 값)를 통해 생성하고 getAttribute(“이름”)를 통해 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//jsp페이지
<h1>내장객체(pageContext, request, session, application)생성</h1>
<%
pageContext.setAttribute("p", "pageContext 값있음!");
request.setAttribute("req", "request 값있음!");
session.setAttribute("ses", "session 값있음!");
application.setAttribute("app", "application 값있음!");


<h1>내장객체 (pageContext, request, session, application)출력</h1>
pageContext 내장객체의 값 : <%=pageContext.getAttribute("p")%><br>
request 내장객체의 값 : <%=request.getAttribute("req")%><br>
session 내장객체의 값 : <%=session.getAttribute("ses")%><br>
application 내장객체의 값 : <%=application.getAttribute("app")%><br>
%>

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
2
3
4
<script type="text/javascript">
alert("자바스크립트로 scopeProPro.jsp 페이지로 이동")
location.href="scopeProPro.jsp?id=<%=id%>&pw=1234";
</script>

2-3. 내장객체 response 이동시

session,application 영역의 값을 공유가능.
파라미터의 값도 저장/전달 가능하다(get 방식).
파라미터를 가져갈때 표현식이 아닌

1
2
3
4
5
6
7
<%
//response.sendRedirect("이동할 페이지 주소");
response.sendRedirect("scopeProPro.jsp");

//파라메터 추가로 같이 공유하는 방법
response.sendRedirect("scopeProPro.jsp?id="+id+"&pw=1234");
%>

아이디가 한글일때는 왜 물음표가 나타날까요?
response.sendRedirect()전까지는 한글이 안깨지다가 response.sendRedirect()명령어부터 한글이 깨진다.
데이터를 인코딩해서 보내야한다. 인코딩에는 여러 방식이 있는데 response.sendRedirect()는 한글데이터를 처리하지못하는 인코딩방식이다.
response객체안에 전달되는 콘텐츠타입을 바꿔서 해야하는데 그걸 하려면 서블릿을 이용해야해서 서블릿배우면 알수있다.

2-4. 액션태그 forward 이동시(p222)

html태그이지만 jsp동작을 할수있게 만들어진 특수한 기능을 가지고 있다.
액션태그 : jsp페이지에서 자바, 스크립트코드없이 다른 페이지로 이동하는 기능이 있다.
서블릿, 객체(자바빈)에 접근할수있는 방법이 액션태그이다.
원래 페이지에 의해 생성된 request객체와 response객체가 그대로 넘어간다.

즉, session,application 그리고 request 영역 더불어 파라미터값까지 공유가능.

1
2
3
4
5
6
7
<jsp:forward page="scopeProPro.jsp" /> 

또는

<jsp:forward page="scopeProPro.jsp">
<jsp:param name="pw" value="<%=a %>" /> <!--표현식사용가능 -->
</jsp:forward>

액션태그는 포워딩이 일어난다.

  • forwarding (포워딩)이란
    • 이동하는 페이지의 주소는 변경 X, 페이지의 내용만 변경.
    • 중요 request객체와 response객체를 가지고 이동가능

따라서 액션태그는 이동하는 페이지의 주소는 변경되지않고 페이지의 내용만 변경되는 희안한 태그이면서 request객체와 response객체를 가지고 이동한다.

그런데 주소를 변경안하는 기능이 왜 필요할까?
MVC패턴개발방식에서 꼭 필요하다.
웹서핑중에 jsp파일명을 주소창에서 본 적이 있는가?
아마 없을 것이다. 보안을 위해서 .jsp파일을 절대 공개하지않는다.
따라서 가상주소를 사용해야하는데 그 가상주소를 사용할때 액션태그 forward가 필요하다