190712_Day65
왜 굳이 JSP로 페이지 이동을 하는 걸까?
- html로 이동해도 되는거 아냐?
- JSP페이지 이동 = Servlet페이지 이동
- 포워드 이동
- 리다이렉트 이동
- MVC에서 JSP페이지 이동을 사용함
- View
- .jsp
- Model
- .java
- Controller(Servlet)
- 요청분석
- 데이터얻기
- 모델호출
페이지 이동
- View
- 포워드 이동
- 리다이렉트 이동
- 영역(Scope)객체 - 영역내에 데이터를 저장하고 공유
- page < request < session < application
영역에 데이터 저장(수정)하기
- 영역객체.setAttribute(String key, Object value);
영역데이터 조회하기
- 영역객체.getAttribute(String key);
영역데이터 삭제하기
- 영역객체. removeAttribute(String key);
참고
동일한 영역에 동일 key를 두 번 이상 정의하면 마지막 정의된 key로 덮어쓰기
다른 영역에 같은 key를 정의하면 각각의 key가 존재
request.setAttribute(“k1”, “동에번쩍”);
session.setAttribute(“k1”, “홍길동”);
request.setAttribute(“k1”, “서에번쩍”);
out.print(request.getAttribute(“k1”));
**‘서에번쩍’ 출력**
out.print(session.getAttribute(“k1”));
**‘홍길동’ 출력
page영역
a.jsp
<% pageContext.setAttribute(“mykey”,”동에번쩍”); %>
<%= pageContext.getAttribute(“mykey”,); %>
‘동에번쩍’ 출력
b.jsp
<%= pageContext.getAttribute(“mykey”); %>
null 출력
request영역
a.jsp
<% request.setAttribute(“mykey”,”동에번쩍”); %>
forward이동
b.jsp
<%= request.getAttribute(“mykey”); %>
‘동에번쩍’ 출력
- redirect이동
b.jsp
<%= request.getAttribute(“mykey”); %>
null 출력
**session영역
a.jsp
session데이터 출력
‘동에번쩍’ 출력
->foward
b.jsp
session데이터 출력
‘동에번쩍’
->redirect
c.jsp
session데이터 출력
‘동에번쩍’
<JSP영역객체>
pageContext (page) : 현재페이지
request : 요청페이지와 응답페이지 (forward이동했을때의 호출한페이지와 호출된페이지)
session : 동일 브라우저
application : 동일 서버 (정확히는 같은 서버의 동일 Context)
(ServletContext)구분:
- ServletContext application
- Web Application(웹응용프로그램, 프로젝트), 전체서블릿
- ServletConfig config
- 한개의 서블릿을 의미
※ JSP기본객체(내장객체)
JSP내에서 자료형을 선언하지 않고 사용하는 객체.
<% %>, <%= %> 에서 사용
종류)
request(javax.servlet.http.HttpServletRequest)
- HTML폼요소의 선택값 등 사용자 입력 정보를 읽어 올 때 사용.
response(java.servlet.http.HttpServletResponse)
- 사용자 요청에 대한 응답을 처리하기 위해 사용.
pageContext(javax.servlet.jsp.PageContext) - 페이지개념, 영역객체
- 현재 JSP실행에 대한 context정보를 참조하기 위해 사용.
- 서블릿 클래스에서는 사용하지 못함.
- pageContext.getOut();
pageContext.getRequest();
pageContext.getSession();
pageContext.getServletContext();
session(javax.servlet.http.HttpSession) ★★
브라우저를 통해 URL요청을 했을때 서버에서는 각브라우저를 식별할수 있는 번호를 부여!!
서버측 메모리에 기억하고 있다가 브라우저가 또다른 (URL)요청을 할 때 같은 Client인지 비교.
클라이언트에 대한 세션정보를 처리하기 위해 사용.
비연결형 프로토콜 HTTP
- (한 페이지가 출력된 다음에 서버와 클라이언트 연결은 끊어짐.)에 대해 마치 계속 연결되어있는 것처럼 해주는 메커니즘.
쿠키는 사용자PC에 세션은 서버에 사용자와 관련된 정보를 보관.
세션의 사용용도)
- 사용자 로그인
- 쇼핑몰에서 장바구니 기능 구현
- 사용자가 어떤 페이지를 다녀갔는지 웹 페이지 트래킹 기능을 구현
- 주요메소드)
- getId()
- 각 접속에 대한 세션 고유의 ID를 문자열형태로 리턴
- getCreatingTime()
- 현재 세션으로 마지막 작업한 시간을 long형 밀리세컨드 값으로 리턴
- getMaxInactiveInterval()
- 세션의 유지시간을 초로 반환
- setMaxInactiveInterval(t)
- 세션의 유효시간을 t에 설정된 초 값으로 설정
- invalidate() ★
- 현재 세션을 종료
- 로그아웃에서 사용
- setAttribute(key, value)
- value에는 String, int, list vo 등이 들어감
- 문자열 key으로 Object value을 설정.
- getAttribute(key)
- 문자열 Key로 설정된 세션 값을 Object 형태로 반환
- removeAttribute(key)
- 문자열 key로 설정된 Object 삭제.
- getId()
session_test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h3>세션테스트</h3> <hr> <% //세션(연결)의 기본 유지 시간 1800초 (30분) //session.setMaxInactiveInterval(5); //5초로 세션 유지시간 변경 if(session.isNew()) //브라우저를 통해 서버에 최초 URL 요청을 했다면 { out.print("<script>alert('처음접속하셨네요')</script>"); } // %> 1. 세션 ID (서버가 브라우저에게 부여하는 식별번호) : <%= session.getId() %> <br> 2. 세션 유지시간 : <%= session.getMaxInactiveInterval() %> 초 </body> </html>
- 페이지마다 세션 시간 넣어주기... 귀찮고 지저분하잖아 그럼?
- WEB-INF/web.xml 수정
<session-config> <session-timeout>5</session-timeout> </session-config>
- 수정하고 서버 다시 켜야한다!
<세션 장바구니>
login.jsp ----> 로그인 화면 (사용자 이름만 입력)
selProduct.jsp ----> 상품을 선택하는 화면 (추가버튼 클릭)
add.jsp ----> 선택한 상품에 대해 세션(장바구니역할)에 추가 : 장바구니에 상품추가!!
checkOut.jsp ----> 선택한 상품들에 대한 상품목록 보이기
<미션>
selProduct.jsp ---> 로그인폼(login.jsp)에 입력된 이름을 출력
add.jsp ---> alert(선택된 과일이름 출력), ArrayList에 과일추가
checkOut.jsp ---> 선택된 상품들을 브라우저에 출력, ArrayList에 저장된 과일 출력
[HINT]
getParameter();
setAttribute();
getAttribute();
ArrayList
<%@page import="java.util.ArrayList"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>상품목록</title> </head> <%-- selProduct.jsp --%> <body> <h3>상품목록</h3> <hr> <% request.setCharacterEncoding("UTF-8"); String userName = request.getParameter("username"); //userName을 세션에 저장하자!! //왜? 로그인폼에서 (입력)전달된 값을 같은 브라우저에서 유지하기 위해!! if(userName != null)//로그인폼을 통해 username을 전달 받았을때 session.setAttribute("loginName", userName);
//checkOut.jsp ==> location.href='selProduct.jsp?action=remove'
String action = request.getParameter("action");//"remove"
ArrayList<String> cartList =
(ArrayList<String>)session.getAttribute("fruitsName");
if(action != null && cartList != null
&& action.equals("remove")){
//장바구니 비우기
cartList.clear();
}
%>
<%-- [<%= request.getParameter("username") %>]님이 로그인한 상태입니다.
--%>
[<%= session.getAttribute("loginName") %>]님이 로그인한 상태입니다.
장바구니 보기