course 2021/JSP

JSP08 - 07redirect

코딩하는토끼 2021. 11. 17. 23:01

갑자기 session?

session 은 일단 기본객체 중 하나

타입: javax.servlet.http.httpSession

설명: http 세션 정보를 저장함

복붙설명: 세션이란 서버측의 컨테이너에 관리되는 정보로써 이 정보는 컨테이너에서 접속해서 종료되기까지 유지되며 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보는 더 이상 유지되지 않게 설정이 가능하다.

이것은 정보가 서버측에서 저장된다는 점에서 보안적으로 유리,

즉 세션은 client 와 server 간의 접속을 유지시켜주는 역할

- 서버쪽에서 웹컨테이너의 상태를 유지하기 위해서 정보를 저장하는 객체 (방법)

-웹 브라우저당 한개의 세션 정보를 생성하여 사용

- 접속시간에 제한을 두어 일정시간 응답이 없으면 유지 못하게 설정이 가능

 

--- 암튼그렇다고 한다

<session 객체 메소드>

세션 생성: session.setAttribute("name", "value");

세션 정보 가져오기: session.getAttribute("name");

세션 유지시간 설정하고 반환하기: session.setMaxInactiveInterval( 초 );

session.getMaxInactiveInterval( 초);

세션정보 삭제: session.removeAttribute("name");

세션정보 초기화: session.invalidate();

- 초기화와 삭제의 차이 - 01 게시글 참조


from 과 to 가 쌍을 이룸

01response

기본 객체임!! 교재p114 참고

타입: HttpSrevletResponse

우리가 조작하지 않지만 톰캣이 response 조작하여 client 에 응답을 줌

 

02redirect

redirect 가 방향을 다시 잡아주는 그니까 재지시?

302 상태코드는 다른곳으로 요청 보내라는 뜻이라는데 이거 실행해도 302 코드안뜨는데 왜 써준건지 모르겠다 암튼 이럴 때에 redirect 쓰라는 의미겠지 (아 소스보기? 정보 보면 status code 볼 수 있나 보다)

* status code - 200 OK, 302 Found, 404 Not Found, 500 Internal Server Error (1 게시글 참고)

<%
String location = "01response.jsp";
response.sendRedirect(location);
%>

코드는 이러한데 결국 response.sendRedirect("01response.jsp"); 와 같음

그러면 입력한 파일(01) 불러내어 띄워줌 (이동)

03from,to

from 에서 to 로 리디렉션 함

! forward 와 response 차이? - forward 는 요청은 main, 표시는 other, request 하나로 공유

-response 는 주소도 내용도 to (from 으로 실행해도) , request 는 각각 따로

04forward-from,to

아마 비교하려고 만든거일듯. from 에서 to 로 포워딩함

05redirect-from,to

뭐야 걍 from 에서 to 로 리디렉션 함

06from,to

request.setAttribute 로 attr1=java 값 전달, to 로 리디렉트함

request.getAttribute 로 attr1 값 받아서 출력

근데 null 뜸! → request 공유 안된단 소리. 서로 다른 객체라는 소리 (나중에 세션 이용?↓

07from,to

06이랑 똑같은데 from 에서 session.setAttribute("attr1","spring") 로 전달하고

to 에서 session.getAttribute("attr1") 로 반환받음

이번엔 null 안뜨고 잘 나옴 잘 전달받음

뭐 대충 같은 브라우저면 공유한단 소리

 

08from,to

똑같음

09login-form, main

login-form 은 그냥 로그인 창인데 (action 으로 정보 다 넘김),

main 은 로그인 정보를 받아서 정보가 일치하면 main 파일 띄우고, 일치하지 않으면 다시 login-form 으로 리디렉션 하도록 함

if-else, response.sendRedirect(""); 

10from, to

to 는 abc 값 받아서 출력할거임. 그럼 from 에서 받아와야함. 안그러면 null. (to 로 실행하면 null)

from 에서 리디렉션을 하는데, 그냥 to로 하는 게 아니고, +쿼리스트링을 함께 써줘서 같이 넘겨줌

<%
String queryString = "?abc=def";
String location = "10to.jsp" + queryString;
response.sendRedirect(location);
%>

response.sendRedirect("10to.jsp"+"?abc=def");

11login-form, main

login-form 은 그냥 로그인 창, 그 아래에 다음과 같은 코드

<%
String status = request.getParameter("status");
if (status != null && status.equals("error")) {
%>
	<p style="color:red;">아이디나 패스워드가 일치하지 않습니다.</p>
<%
}
%>

status 를 받아옴, status 가 null 이 아니고 error 이면 "아이디나 패스워드가 일치하지 않습니다" 문구를 출력

main 은 아이디를 받아서 아이디가 null 이 아니고 iamuser 이면 (정보가 일치하면) 메인컨텐츠를 출력하고,

그렇지 않으면 쿼리스트링에 status=error 추가하여 로그인창으로 리디렉션! (아까 로그인창의 status 가 이것)

12login-form, main

그냥 로그인창, 일치하면 메인컨텐츠 출력, 그렇지 않으면 ! 여기가 11과 다름 ! 여기에선 <script> alert 사용 

13querystring-encoding-from, querystring-encoding-to

from 

<%
String parama = "a=java";
String paramb = "b=hello+world";
// String paramc = "c=자바";
String paramc = "c=" + URLEncoder.encode("자+바", "utf-8");
String location = "13querystring-encoding-to.jsp";
String loc = location + "?" + parama + "&" + paramb + "&" + paramc;
response.sendRedirect(loc);
%>

문자열 parama,paramb, paramc 를 쿼리스트링으로 정의 

location 이 to 파일, loc 이 location+쿼리스트링, 리디렉션은 loc 을 넣음

1. paramb 쿼리스트링에 + 가 왜 있어? - 띄어쓰기로 인식. 즉, hello world

2. paramc URLEncoder.encode("자+바", "utf-8"); 는 무슨 의미지?

c 값이 URLEncoder.encode("자+바", "utf-8") 라는 것 같은데...

- 자바+ 로 받아짐. 그냥 자바 라고 쓰면 안되기 때문에 이렇게 한 것

3. "13querystring-encoding-to.jsp" + "?" + "a=java" + "&" + ...

아 이건 알겠다 그렇군! 쿼리스트링 여러개 넘기기~!

to 로 리디렉션 했으니까 이제 to 파일 출력함. 당연히 값 다 전달받음. request 다른데? 그래서 쿼리 같이 넘겼잖아.

14from, to

from

<%
String value = URLEncoder.encode("스프링", "utf-8");
response.sendRedirect("14to.jsp?param=" + value);
%>

아 이거 한글, 특수문자 때문에 이렇게 입력한다고 했던 것 같다!

주의. <%@ page import="java.net.URLEncoder" %> import 해야 함

URLEncoder.encode("한글data", 인코딩);

암튼 그러면 value 는 스프링, 리디렉션(쿼리스트링 param=스프링 같이 넘김)

to

param : <%= request.getParameter("param") %>

param 값 (스프링) 반환

결론: 한글 쿼리스트링 같이 넘기기

15from, to

hashmap 으로 쿼리스트링 name=value 값 쌍으로 받음

반복문 for 로 getKey,getValue 해서 쿼리스트링 이어지게 작성 (한글 받기위해 아까배운거 씀) 해서 ps 에 저장됨

리디렉션해서 to 로 같이 넘김

to 에서 출력 완료

 

16path-from,path-to

리디렉션 할 때 경로 작성하는 것 

상대경로: 아까처럼 그냥 파일명 (같은 폴더여서)

절대경로: request.getContextPath() 써주고/ 경로쓰기

와우! request.getContextPath() 쓰는 이유가 브라우저가 사용하는 경로라서 인가봐! 뭔소린진 모르겠음

- 이거 주소창 확인하면 뭘로 나타나는지 나온대

17path-from, path-to

그냥 절대경로로 리디렉션 예시

 

18from-session, to-session

from

<%
request.setAttribute("attr1", "value1");
session.setAttribute("attr2", "value2");

response.sendRedirect("18to-session.jsp");
%>

setAttribute 로 값 전달하는데, attr1 은 request 객체로, attr2 는 session 객체로

그리고 리디렉션 to 로

to

<%= request.getAttribute("attr1") %> <br>
<%= session.getAttribute("attr2") %>

attr1, attr2 반환해서 출력했는데

request 는 리디렉션 할 때 공유 안된다고 했잖아

당연히 attr1 은 전달 안되며, null 로 출력됨 

session 은 브라우저를 공유하면 전달가능하다