1. Scope: 웹 어플리케이션의 영역(내장 객체 영역, 객체의 유효기간)
→데이터 전송범위 , 데이터 저장 유효기간과 관련
2. 내장객체
- 객체 생성: .setAttribute(name, value), 이름에 값 설정
- 객체 조회: .getAttribute(name), 설정한 값 조회
- 객체 삭제: .removeAttribute(name), 설정한 값 제거
1)Page: 한 페이지에서 객체 생성, 조회, 다른 페이지에서는 객체 조회 안 됨
-1번 페이지에서 객체를 생성하고 2번에서 1번 객체를 조회하면 null값
2)Request: 하나의 요청에 대해 데이터 유지
-1번 페이지의 request와 2번 페이지의 request는 서로 다른 request객체
-2번 페이지 실행 시 1번 페이지의 데이터 유지x
3)Session: 하나의 브라우저가 실행되는 동안 데이터 유지
-1번 페이지에서 객체 생성 후 2번 페이지에서 객체를 조회해도 데이터 유지
-다른 브라우저에서 실행했을 경우 데이터 유지x
4)Application: 서버가 유지되는 한 데이터 유지, 서버를 restart하면 데이터 유지x
-다른 브라우저에서도 데이터 유지
3. Forward vs sendRedirect 방식
- <Forward> 요청 1번, 응답 1번
- <sendRedirect>요청 2번, 응답 2번
구분 | Forword 방식(request 방식) | SendRedirect 방식(querystring 방식) |
요청&응답 횟수 | 1번(요청한내용을 그대로 다른 페이지로 이동하여 그 페이지에서 응답) | 2번(1번 요청→ 페이지 이동 응답→ 2번 이동할 페이지 다시 요청→ 페이지 응답) |
데이터 유지 | 같은 요청, 같은 request 객체이므로 데이터 유지 가능 | 서로 다른 요청, 서로 다른 request 객체이므로 데이터 유지 불가 |
데이터 전송형태 | Oject | Text만 가능 |
실행속도 | 상대적으로 빠름(네트워크 트래픽 발생x) | 상대적으로 느림(네트워크 트래픽 발생) |
페이지 이동범위 | 같은 서버의 페이지만 이동 가능 (같은 request 객체) |
다른 서버의 페이지 이동가능 (다른 request 객체) |
4. Forward
-실행과정: 1번 페이지에서 요청한 내용을 2번 페이지에 전송하여 2번 페이지가 client에 응답
-요청이 들어오면 해당 요청을 그대로 가지고 이동할 페이지로 이동
- 데이터 유지 여부: 요청 1번, 같은 request 객체이기 때문에 데이터 유지 가능
- 데이터 전송형태: request 객체에 저장하기 때문에 object 형태의 데이터 전송 가능
- 실행속도: 요청이 1번이기 때문에 네트워크 트래픽이 발생하지 않음→ 상대적으로 실행속도 빠름
- 페이지 이동범위: request 객체가 그대로 이동해야 해서 같은 서버의 페이지로만 이동 가능
-sendRedirect방식: 주소 자체로 이동하기 때문에 네이버로 이동가능
-forward 방식; request 객체에 네이버가 저장되지 않기 때문에 네이버 이동 불가
- 1번 페이지 실행: 객체가 2번 페이지로 이동하며 1번 페이지의 객체 값이 조회됨
-실행페이지:1번
-보이는 페이지:2번
- 2번 페이지 실행: 2번 페이지에 request객체에 값이 없으므로 null값
5. sendRedirect(쿼리스트링 방식):
-실행과정: 1번 요청→ 페이지 이동경로 응답→ 2번 이동할 페이지 다시 요청
-데이터 유지 여부: 요청 2번, 1번과 2번 요청의 request 객체는 서로 다름→ 데이터 유지 불가
-데이터 전송형태: 쿼리스트링 방식으로 데이터 전송할 수 있음→ text 형태만 가능(객체x)
-실행속도: 요청이 2번이기 때문에 네트워크 트래픽 발생할 수 있음→ 상대적으로 실행 속도 느림
-페이지 이동범위: 이동할 페이지를 새롭게 요청하기 때문에 다른 서버의 페이지로 이동 가능
[로그인]
1)request(forward) 방식: loginProgram에 있는 request객체에 담겨 있는 id와 pw가
loginSuccess로 넘어와서 전송된 값이 출력됨
예)request.setAttribute("name", name);
moveURL="./loginSuccess.jsp" ;
→쿼리 스트링은 URL 주소에 name을 얹어서 전송하고 forward 방식은 request
영역에 name 값이 저장되기 때문에 쿼리 스트링 값이 조회되지 않음
2)쿼리 스트링 방식: loginProgram에서URL 주소에 name을 얹어서 전송함
예)moveURL="./loginSuccess.jsp?name="+URLEncoder.encode(name, "UTF-8");
response.sendRedirect(moveURL);
-입력한 주소값으로 이동하므로 웹페이지 주소는 요청한 주소값이 됨
-loginSuccess의 request객체는 loginProgram의 request객체와 다른
새로운 객체이기 때문에 id와 pw는 전송되지 않음
6. EL 표현식
-표현식<%=%> 업그레이드 버전: ${변수명}
-JSP 내장객체에 저장된 값들을 출력할 때 사용
-연산도 가능
-JSTL과 연동 가능
'JSP&Servlet' 카테고리의 다른 글
[JSP]6. Maven&Mybatis (0) | 2023.06.28 |
---|---|
[JSP]6. Maven&Mybatis (0) | 2023.06.27 |
[JSP]4. cookie&session (0) | 2023.06.23 |
[JSP]3. MVC 패턴으로 JDBC 만들기 (0) | 2023.06.22 |
[JSP]2. 내장객체 (0) | 2023.06.21 |