갑자기 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 은 브라우저를 공유하면 전달가능하다
'course 2021 > JSP' 카테고리의 다른 글
JSP10 - 09cookie (0) | 2021.11.19 |
---|---|
JSP09 - 08session (0) | 2021.11.18 |
JSP07 - 06forward (0) | 2021.11.17 |
JSP06 - 05attribute (0) | 2021.11.17 |
JSP05 - 04path (0) | 2021.11.17 |