속성과 영역을 가진 4개의 기본객체에 대해 알아보자.
#JSP 기본객체와 영역
jsp는 총 9가지의 기본객체(request ,response, pageContext, application, session, out, config, page, exception )
중 4가지의 영역(scope)을 가지고 있는데 이들 영역은 다음과 같다.
application 영역( ex: 히트수 )
- 톰캣이 시작되면 하나만들어지고 톰캣끄면사라짐
- 모든 사용자와 관련해서 공유할정보( 현재접속자수, 임시디렉터리경로 )
와같은 웹어플리케이션의 설정정보를 주로저장
session 영역( ex: 로그인 )
- 회원정보같은존재
- 웹브라우저가 켜져있는동안에만 유효함( 로그인 )
- 웹브라우저가 켜져있고 다시 같은 웹브라우져를 새로 실행하면 유효함!
- 하지만 웹브라우저를 껏다가 다시 같은 웹브라우져를 새로실행하면 사라짐
- 하지만 이런것들은 같은 사람이 요청하더라도 웹브라우저 버전이 틀리거나
웹브라우저 종류가 다르면 session life cycle이 다 다름!!
- 한사용자와 관련된 정보를 jsp들이 공유하기위해 사용
- 사용자의 로그인,로그아웃 정보와같은것들을 저장
request 영역
- 요청해서 응답하면 사라짐
- .jsp마다 request주소값이 다름!
하지만 <jsp:forward>를통해 화면이동시 기존 request값 유효함
response.sendRedirect()로 화면이동시 사라짐
- 한번의 요청으로 처리하는데 사용되는 모든 jsp페이지에서 공유될값을 저장
- 주로 하나의 요청을 처리하는데 사용되는 jsp페이지사이의 정보를 전달하기위해사용
pageContext 영역
- 현재페이지에서만 유효
- 한번의요청을 처리하는 하나의 jsp페이지내에서 공유될값저장
- 주로 커스텀태그에서 새로운변수를 추가할때 사용
[ex] response.sendRedirect() vs <jsp:forward page="b.jsp" /> 차이점
둘다 화면이동이지만 차이점을 알아야함~!
1. response.sendRedirect()
- 다음화면으로가면 request값이 새로만들어짐...기존화면의 request값과다름
이유는 redirect의 개념을 안다면 이해할수 있음!
2. <jsp:forward page="b.jsp" />
- 다음페이지로 기존 request객체값이 살아있어 전달됨
- 또한 이동하기전의 url이 유지됨...
- 즉, forward로 화면이동시 url이 유지되고 request값도 유지된다
- 하지만 로케이션, 리다이렉트와달리 네이버와같은 사이트로 이동불가능!
- 이유는 forward는 내부자원만 호출할수있기때문이다
[ex] Parameter VS Attribute
getParameter... String만
getAttribute... 키값을 통해 Object도됨!!
setAttribute...
# 4개 영역의 라이프 사이클 알아보기!
4개 영역의 기본객체는 속성을 가지고있다( attribute )( 속성이름, 값 )( String, Object)
속성은 각각의 기본객체가 존재하는 동안 사용 가능하며 jsp페이지 사이에서 정보를
주고 받거나 공유하기 위한 목적으로 사용됨!
[ex] a.jsp 실행후 b c .jsp 실행해보기( 다른 웹브라우저에서)
그리고 철수 , 영희 입장에서 실행해보기
a.jsp // 세팅하는 jsp
===============
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
application.setAttribute("ap","apV");
session.setAttribute("se","seV");
request.setAttribute("re","reV");
pageContext.setAttribute("pa","paV");
%>
b.jsp
=====
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%=application.getAttribute("ap")%><br> // 유지
<%=session.getAttribute("se")%><br> // 유지
<%=request.getAttribute("re")%><br> // null
<%=pageContext.getAttribute("pa")%><br> // null
c.jsp
=====
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%= session.getId() %> // 4AFFE1266A311973F296E408F20399CE // 세션값 유지됨
[ex] 다른페이지로 값 전달하기 : b 와 c.jsp 만들어서 a.jsp값을 c.jsp에 전달하시오( 2가지방법 )
a.jsp
=====
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<html>
<body>
<form action="b.jsp">
<input type="text" name="id"><br>
<input type="text" name="pw"><br>
<input type="text" name="addr"><br>
<input type="text" name="tel"><br>
<input type="submit">
</form>
</body>
</html>
b.jsp
=====
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<a href="c.jsp">회원정보보기</a>
[an1] 일일이 계속 데이터를 request.getParameter로 전달한다
단점이 전달할 요소가 너무많아지면 소스가 복잡해짐
a.jsp
=====
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<html>
<body>
<form action="b.jsp">
<input type="text" name="id"><br>
<input type="text" name="pw"><br>
<input type="text" name="addr"><br>
<input type="text" name="tel"><br>
<input type="submit">
</form>
</body>
</html>
b.jsp
=====
<%
String id=request.getParameter("id");
String pw=request.getParameter("pw");
String addr=request.getParameter("addr");
String tel=request.getParameter("tel");
String query="id="+id+"&pw="+pw+"&addr="+addr+"&tel="+tel;
%>
<a href="c.jsp?<%=query%>">회원정보보기</a>
c.jsp
=====
ID : <%=request.getParameter("id")%><br>
PW : <%=request.getParameter("pw")%><br>
ADDR : <%=request.getParameter("addr")%><br>
TEL : <%=request.getParameter("tel")%><br>
- b.jsp에서 얻은 파라미터를 get방식?으로 c.jsp로 넘김
[an2] 자바빈을 이용하여 파라미터값들 넘기기
( JavaBean은 데이터를 표현하는목적의 자바클래스 )
Java Resources -> src 밑에 패키지 com.joo만들기
그 만든 패키지에 class 만들기 : Member
안에 내용은
package com.joo;
public class Member {
private String id ,pw,addr, tel;
}
그리고 소스안에 커서두고 Source -> 제너레이터 겟터 and 세터 -> allselect 하고만들면 자동으로 자바빈 만들어짐
a.jsp
======
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<html>
<body>
<form action="b.jsp">
<input type="text" name="id"><br>
<input type="text" name="pw"><br>
<input type="text" name="addr"><br>
<input type="text" name="tel"><br>
<input type="submit">
</form>
</body>
</html>
b.jsp
=======
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="com.joo.Member"%>
<%
String id=request.getParameter("id");
String pw=request.getParameter("pw");
String addr=request.getParameter("addr");
String tel=request.getParameter("tel");
Member member=new Member(); // 자바빈즈 세팅!
member.setId(id);
member.setPw(pw);
member.setAddr(addr);
member.setTel(tel);
session.setAttribute("member", member); // a태그로 화면이동하기에 session으로
// 저장한후 c.jsp에서받아야함
// 만약 <jsp:forward...>로 할려면 request로해도됨
%>
<a href="c.jsp">회원정보보기</a>
c.jsp
=======
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="com.joo.Member"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
Member member=(Member)session.getAttribute("member");
// getAttribute의 반환형은 Object임!!
%>
ID : <%=member.getId()%><br>
PW : <%=member.getPw()%><br>
ADDR : <%=member.getAddr()%><br>
TEL : <%=member.getTel()%><br>
</body>
</html>
'JSP' 카테고리의 다른 글
캐쉬삭제법( 삭제라기보단 캐쉬저장 안하는법 ) (0) | 2019.03.08 |
---|---|
JSP한글전송(인코딩, 디코딩) (0) | 2019.03.08 |
서블릿의 get, post방식 (0) | 2019.03.08 |
JSP페이지의 구성요소 / JSP기본태그 (0) | 2019.03.07 |
JSP 내장객체 9개 (0) | 2019.03.07 |