본문 바로가기

JSP

JSP기본객체와 영역

속성과 영역을 가진 4개의 기본객체에 대해 알아보자.


#JSP 기본객체와 영역 
jsp는 총 9가지의 기본객체(request ,response, pageContext, application, session, out, config, page, exception  )
중 4가지의 영역(scope)을 가지고 있는데 이들 영역은 다음과 같다. 

application 영역( ex: 히트수 )  
-    톰캣이 시작되면 하나만들어지고 톰캣끄면사라짐
-    모든 사용자와 관련해서 공유할정보( 현재접속자수, 임시디렉터리경로 )
             와같은 웹어플리케이션의 설정정보를 주로저장

session 영역( ex: 로그인 )
-    회원정보같은존재
-    웹브라우저가 켜져있는동안에만 유효함( 로그인 )
-    웹브라우저가 켜져있고 다시 같은 웹브라우져를 새로 실행하면 유효함!
-    하지만 웹브라우저를 껏다가 다시 같은 웹브라우져를 새로실행하면 사라짐
-    하지만 이런것들은 같은 사람이 요청하더라도 웹브라우저 버전이 틀리거나
웹브라우저 종류가 다르면 session life cycle이 다 다름!!
-    한사용자와 관련된 정보를 jsp들이 공유하기위해 사용
-    사용자의 로그인,로그아웃 정보와같은것들을 저장

request 영역 
-    요청해서 응답하면 사라짐
-    .jsp마다 request주소값이 다름!
하지만 <jsp:forward>를통해 화면이동시 기존 request값 유효함
response.sendRedirect()로 화면이동시 사라짐
 -    한번의 요청으로 처리하는데 사용되는 모든 jsp페이지에서 공유될값을 저장
-    주로 하나의 요청을 처리하는데 사용되는 jsp페이지사이의 정보를 전달하기위해사용

pageContext 영역
-     현재페이지에서만 유효 
         -     한번의요청을 처리하는 하나의 jsp페이지내에서 공유될값저장     
               -    주로 커스텀태그에서 새로운변수를 추가할때 사용 


[ex] response.sendRedirect() vs <jsp:forward page="b.jsp" /> 차이점
     둘다 화면이동이지만 차이점을 알아야함~!

     1.  response.sendRedirect()
          -    다음화면으로가면 request값이 새로만들어짐...기존화면의 request값과다름
                이유는 redirect의 개념을 안다면 이해할수 있음!

     2. <jsp:forward page="b.jsp" /> 
          -    다음페이지로 기존 request객체값이 살아있어 전달됨
          -    또한 이동하기전의 url이 유지됨... 
          -    즉, forward로 화면이동시 url이 유지되고 request값도 유지된다
          -    하지만 로케이션, 리다이렉트와달리 네이버와같은 사이트로 이동불가능!
          -     이유는 forward는 내부자원만 호출할수있기때문이다 



[ex] Parameter VS Attribute 
getParameter...    String만
getAttribute...       키값을 통해 Object도됨!!
setAttribute...




# 4개 영역의 라이프 사이클 알아보기!
   4개 영역의 기본객체는 속성을 가지고있다( attribute )( 속성이름, 값 )( String, Object)
   속성은 각각의 기본객체가 존재하는 동안 사용 가능하며 jsp페이지 사이에서 정보를 
   주고 받거나 공유하기 위한 목적으로 사용됨!

     [ex] a.jsp 실행후 b c .jsp 실행해보기( 다른 웹브라우저에서)
             그리고 철수 , 영희 입장에서 실행해보기

          a.jsp   // 세팅하는 jsp
          ===============
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
application.setAttribute("ap","apV");
session.setAttribute("se","seV");
request.setAttribute("re","reV");
pageContext.setAttribute("pa","paV");
%>

          b.jsp
=====
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>

<%=application.getAttribute("ap")%><br>      // 유지
<%=session.getAttribute("se")%><br>          // 유지 
<%=request.getAttribute("re")%><br>          //    null
<%=pageContext.getAttribute("pa")%><br>      //    null

     c.jsp
     =====
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>

<%= session.getId() %>          // 4AFFE1266A311973F296E408F20399CE     // 세션값 유지됨 



[ex] 다른페이지로 값 전달하기  :    b 와 c.jsp 만들어서 a.jsp값을  c.jsp에 전달하시오( 2가지방법 )
a.jsp
=====
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<html>
     <body>
     <form action="b.jsp">
          <input type="text" name="id"><br>
          <input type="text" name="pw"><br>
          <input type="text" name="addr"><br>
          <input type="text" name="tel"><br>
          <input type="submit">
     </form>
     </body>
</html>

b.jsp
=====
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<a href="c.jsp">회원정보보기</a>


[an1] 일일이 계속 데이터를 request.getParameter로 전달한다 
          단점이 전달할 요소가 너무많아지면 소스가 복잡해짐
a.jsp
=====
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<html>
     <body>
     <form action="b.jsp">
          <input type="text" name="id"><br>
          <input type="text" name="pw"><br>
          <input type="text" name="addr"><br>
          <input type="text" name="tel"><br>
          <input type="submit">
     </form>
     </body>
</html>

b.jsp 
=====
<%
     String id=request.getParameter("id");
     String pw=request.getParameter("pw");
     String addr=request.getParameter("addr");
     String tel=request.getParameter("tel");

     String query="id="+id+"&pw="+pw+"&addr="+addr+"&tel="+tel;
%>
<a href="c.jsp?<%=query%>">회원정보보기</a>

c.jsp
=====
     ID : <%=request.getParameter("id")%><br>
     PW : <%=request.getParameter("pw")%><br>
     ADDR : <%=request.getParameter("addr")%><br>
     TEL : <%=request.getParameter("tel")%><br>
-    b.jsp에서 얻은 파라미터를 get방식?으로 c.jsp로 넘김


[an2] 자바빈을 이용하여 파라미터값들 넘기기
( JavaBean은 데이터를 표현하는목적의 자바클래스 )

          Java Resources -> src 밑에 패키지 com.joo만들기
          그 만든 패키지에 class 만들기 : Member
          안에 내용은
package com.joo;

public class Member {
        private String id ,pw,addr, tel;
}
그리고 소스안에 커서두고 Source -> 제너레이터 겟터 and 세터 -> allselect 하고만들면 자동으로 자바빈 만들어짐

a.jsp
======
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<html>
     <body>
     <form action="b.jsp">
          <input type="text" name="id"><br>
          <input type="text" name="pw"><br>
          <input type="text" name="addr"><br>
          <input type="text" name="tel"><br>
          <input type="submit">
     </form>
     </body>
</html>


b.jsp
=======
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>

<%@ page import="com.joo.Member"%>

<%
String id=request.getParameter("id");
String pw=request.getParameter("pw");
String addr=request.getParameter("addr");
String tel=request.getParameter("tel");

     Member member=new Member();     // 자바빈즈 세팅!
     member.setId(id);
     member.setPw(pw);
     member.setAddr(addr);
     member.setTel(tel);

     session.setAttribute("member", member); // a태그로 화면이동하기에 session으로
                                             // 저장한후 c.jsp에서받아야함
                                             // 만약 <jsp:forward...>로 할려면 request로해도됨
%>

<a href="c.jsp">회원정보보기</a>

c.jsp
=======
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="com.joo.Member"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
     Member member=(Member)session.getAttribute("member");
     // getAttribute의 반환형은 Object임!!
%>

     ID : <%=member.getId()%><br>
     PW : <%=member.getPw()%><br>
     ADDR : <%=member.getAddr()%><br>
     TEL : <%=member.getTel()%><br>
</body>
</html>