-
22-09-08_jsp(2)main 2022. 9. 8. 16:44
이제 300번대를 볼거예요
흐름제어와 함께...
**피자를 인터넷에서 주문하는사람..?....
메뉴판에서 맘에드는 피자를 골러ㅏ요
주문버튼을 눌러요
주문이끝나지않아요
거쳐야되는단계가많아요
일단 로그인을 시켜요
근데 로그인이 되어있는지 여부를 판단하고 해요
로그인 성공여부에따라 이후 단계 다름
배달 가능지역여부를 확인하고
불가시 불가합니다 메세지페이지로 넘어감
가능시 또 페이지 넘어가는데
배송지역 입력하라함
그리고 또 결제한다하면 카드결제인지 뭔지 또 달라지고
또 이제 결제를 선택해서 한다함
근데 이제 결제핀번호가
성공실패....
이런 flow 구조가 반복적으로 실행되는데
그러기위한 이동방식을 여기서 할거예요,...
분류를 한다고 하면 분류기준이 있을건데요
--------------
예시그림 어떤 경우에 request, Session 쓰는지 알려면 위의 차이를 알고 있어야 함...
저장소가 request와Session 두가지인거지 일단
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>05/flowControl.jsp</title> </head> <body> <h4>흐름 제어(페이지 이동 구조)</h4> <pre> 1. Request Dispatch : 이동 과정에서 최초의 요청을 가지고 분기함 1) Forward : 요청 - > A 페이지 -> B페이지 -> 응답, model2 Architecture <!-- A에서 응답 발생 안하고 요청 가지고 B로 가고 --> 2) Include : 요청 -> A페이지 -> B페이지 -> A 페이지로 복귀(B 데이터 일부 가지고) -> 응답, 페이지 모듈화 2. Redirect : 이동 과정에서 최초의 요청에 대한 응답이 먼저 정송됨. 요청1 -> 응답1(Line(302), Header(Location)로만 구성(Body없음)) -> 클라이언트 <!-- Header(Location) : client side 절대경로 된다고? --> -> 요청2(Location) -> 응답(Body Contents) </pre> </body> </html>
하하하하
자 이제 보자
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <script type="text/javascript" src="<%=request.getContextPath() %>/resources/js/jquery-3.6.1.min.js"></script>
이런게 있다고 하자
얘가 혼자 화면을 구성할 수?? 없죠
아 지금 만드는게 위에서 말하는 B친구네 데이터를 넘겨줄..그놈
?
include가 뭐라고 ..뭐라고하셧는디
---
1. Request Dispatch : 이동 과정에서 최초의 요청을 가지고 분기함
==> 이동 과정에서 .....
1) Forward : 요청 - > A 페이지 -> B페이지 -> 응답, model2 Architecture
<!-- A에서 응답 발생 안하고 요청 가지고 B로 가고 -->
2) Include : 요청 -> A페이지 -> B페이지 -> A 페이지로 복귀(B 데이터 일부 가지고)
-> 응답, 페이지 모듈화
2. Redirect : 이동 과정에서 최초의 요청에 대한 응답이 먼저 전송됨.최초의 요청(명령)에 대한 처리가 완료되어 더이상 저장할 필요가 없음.
요청1 -> 응답1(Line(302), Header(Location)로만 구성(Body없음)) -> 클라이언트(어...요청1을 없애도 된다고. 왜냐면 요청1에대한 처리가 끝났다고)
<!-- Header(Location) : client side 절대경로 된다고? -->
-> 요청2(Location) -> 응답(Body Contents)--
로그인.... 성공하면 뭐.....어... 없애도 됨....
redirection이라는구조...
위에 1번과 2번의 차이는 딱 하나임
명령 처리가 끝났는지 안 끝났는지...
2. Redirect ==최초의 요청(명령)에 대한 처리가 완료되어 더이상 저장할 필요가 없음.
---
um........dispatch냐 redirect냐 뭘 사용할거냐에 대한 기준은... 명령 처리가 완료되었냐 아니냐.....
회원가입 완료되면 로그인 페이지로 이동하는 예시를 얘끼하셨는데 이건 뭐죠
1)의 이동방식
2)의 이동방식 차이..
2)....redirection으로 이동할떄는 instacne,.....adsfsasdfawefawhyfr3cf
절대경로는 Serverside 방식과 client side 방식이있음.
client side 방식은 ContextPath를 붙이고 서버는 안붙임
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>05/flowControl.jsp</title> </head> <body> <h4>흐름 제어(페이지 이동 구조)</h4> <pre> 1. Request Dispatch : 이동 과정에서 최초의 요청을 가지고 분기함 1) Forward : 요청 - > A 페이지 -> B페이지 -> 응답, model2 Architecture <!-- A에서 응답 발생 안하고 요청 가지고 B로 가고 --> 2) Include : 요청 -> A페이지 -> B페이지 -> A 페이지로 복귀(B 데이터 일부 가지고) -> 응답, 페이지 모듈화 <% String path ="/02/standard.jsp"; request.getRequestDispatcher(path).forward(request, response); %> 2. Redirect : 이동 과정에서 최초의 요청에 대한 응답이 먼저 정송됨. 최초의 요청(명령)에 대한 처리가 완료되어 더이상 저장할 필요가 없음. 요청1 -> 응답1(Line(302), Header(Location)로만 구성(Body없음)) -> 클라이언트 <!-- Header(Location) : client side 절대경로 된다고? --> -> 요청2(Location) -> 응답(Body Contents) </pre> </body> </html>
그래서 String Path 이거 서버쪽에서쓰는거라 안적음
그래서 이렇게 나오면 A에서 응답이 나온 줄 아는데 주소떄문에도, 사실은 B에서 응답이 나온 거임 그래서 응답 위임 구조?? 라고도 함...
Module 2...
servlet으로 요청 보내는데 jsp에서 응답 나옴 그런데 client는 jsp의 존재를 모르고, 모든 게 servleet에서 나온 거라고 생각하게 됨
요청이 한번만 발생했고..
request.getRequestDispatcher(path).include(request, response);
이거 바꾸니까
이렇게 나왔고... 이때는 A와 B의 컨텐츠가 다 포함되어이 씅ㅁ redirect 방식을 써볼거예ㅒ요
redirection할 떄는 다른거 안하고 sendRedirect메서드 하나 씀. 아까는 path달랬는데 이번에는 location 달라고 함.
그런데 우리는 같은데로 이동할거니까 path줄거임
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>05/flowControl.jsp</title> </head> <body> <h4>흐름 제어(페이지 이동 구조)</h4> <pre> 1. Request Dispatch : 이동 과정에서 최초의 요청을 가지고 분기함 1) Forward : 요청 - > A 페이지 -> B페이지 -> 응답, model2 Architecture <!-- A에서 응답 발생 안하고 요청 가지고 B로 가고 --> 2) Include : 요청 -> A페이지 -> B페이지 -> A 페이지로 복귀(B 데이터 일부 가지고) -> 응답, 페이지 모듈화 <% String path ="/02/standard.jsp"; // request.getRequestDispatcher(path).forward(request, response); // request.getRequestDispatcher(path).include(request, response); %> 2. Redirect : 이동 과정에서 최초의 요청에 대한 응답이 먼저 정송됨. 최초의 요청(명령)에 대한 처리가 완료되어 더이상 저장할 필요가 없음. 요청1 -> 응답1(Line(302), Header(Location)로만 구성(Body없음)) -> 클라이언트 <!-- Header(Location) : client side 절대경로 된다고? --> -> 요청2(Location) -> 응답(Body Contents) <% response.sendRedirect(path); %> </pre> </body> </html>
이릏게
근데 이릏게 나옴 주소가 허전함 지금 요청이 하난데 이렇게 주소창에 치고 이ㅏ동해보며ㅑㄴ 짠 요청이 두개임 이게 차이임 client side 방식...뭐.. 그 사이에 한 설명 못들음...
똑같은걸 하지만 두가지 방식으로 표현할 떄는 주소 표기가 달라야 한다는거지.
response.sendRedirect(request.getContextPath()+ path);
이렇게 바꿔 적어볼거임
멀쩡하게 나오게 됨 ----
A와 B가 같은 데이터를 공유해야 한다는 상황을 가정해보자...
- 전역변수라는 개념..... ==> 근본적으로 태동된 이유가, 데이터 공유위함.
자 일단 쟤는 지역변수임. 전역으로 만들려면 선언부 <%! %>가 필요함 // B는 standard.jsp임 이렇게 전역변수 설정 static있으면 instance는 필요없는데 class는 필요..... 그러면 이 전역변수를 쓰려면 그 servlet의 class를 알아야 함....
이걸 뭐 어쩌구 하는건 tomcat이 할일임
전역변수를 따로 선언부로 저렇게 만들어 둬도 외부에서 쓸 수 없음. public이 의미가 없어짐.
그러면 전역변수를 이용해서는 data공유가 안됨. (**** -> 나중에 다른 개념을 이해하기 위해 알아둬야 함. )
그래서 쓸수있는게 속성이라는거
그래서 우리가 setAttribute, getAttribute 등 써온거임.
Session같은거도 썼고요
--
속성 저장할 수 있는 영역이 여러갠데.. 저장소가 몇개고 어떤 객체에 접근 되고 한계점은 뭐고 그런 특성들을 알아야 함. 그게 다음주 우리 수업의 첫번째 주제가 될 거라고 함.
..
하... 남은건 다음주로 미루고, 일단 남은 시간에 500번대 코드와 exception에 대해서 할거라고 하심
'main' 카테고리의 다른 글
22-09-08_jsp(4) (0) 2022.09.08 22-09-08_jsp(3) (0) 2022.09.08 22-09-08_jsp(1) (2) 2022.09.08 22-09-07_jsp(4) (0) 2022.09.07 22-09-07_jsp(3)_과제있음 (0) 2022.09.07