2019. 5. 2. 19:03ㆍ웹(JSP)
----------------------------------JSP의 Scope------------------------------------
JSP 내장객체의 속성과 스코프
- 속성
- 내장객체(PageContext, HttpServletRequest, HttpSession, ServletContext)에
값으로 저장되는 객체를 말한다.
- 위에서 나열한 내장객체에는 (이름:값)의 쌍으로 속성을 저장할 수 있다.
- 스코프
- 참조범위 및 생존시간을 스코프라고 한다.
- 위에서 나열한 내장객체는 각각 자신만의 참조범위와 생존시간을 가지고 있다.
* 각 내장객체 저장되는 속성도 그 내장객체가 가지는 스코프와 동일하게 참조/생존한다.
- JSP의 스코프
- PageScope
* PageContext가 가지는 스코프다.
* PageContext에 저장된 속성은 해당 JSP에서만 참조가능하다.
* PageContext에 저장된 속성은 해당 JSP의 실행이 완료되면 참조할 수 없다.
- RequestScope
* HttpServletRequest가 가지는 스코프다.
* HttpServletRequest에 저장된 속성은 요청한 클라이언트만 참조할 수 있다.
* HttpServletRequest에 저장된 속성은 응답 완료되면 참조가능하다.
- SessionScope
* HttpSession이 가지는 스코프다.
* HttpSession에 저장된 속성은 요청한 클라이언트만 참조할 수 있다.
* HttpSession에 저장된 속성은 로그아웃 후에는 참조할 수 없다.
- ApplicationScope
* ServletContext가 가지는 스코프다.
* ServletContext에 저장된 속성은 모든 클라이언트, 모든 Web객체가 참조할 수 있다.
* ServletContext에 저장된 속성은 톰캣이 종료되면 참조할 수 없다.
- 주요 메소드
- 위에서 나열한 내장객체는 아래의 메소드를 모두 가지고 있다.
- void setAttribute(String name, Object value)
- Object getAttrivute(String name)
- void removeAttribute(String name)
- 사용예
- PageScope
* 해당 JSP에서만 일시적으로 사용되는 값을 속성으로 저장할 때 사용한다.
내비게이션 표시에 사용되는 페이지 이름
페이지에서 반복적으로 사용되는 계산식의 결과 값
- RequestScope
* 가장 많이 사용되는 스코프다.
* Model2 패턴의 웹개발에서 필수적으로 사용되는 스코프다.
로직요소(java 코드)와 디자인요소(html 코드)를 분리할 수 있다.
java(값획득 + request에 저장) ---forward이동---> JSP(EL로 표현)
- SessionScope
* 클라이언트의 개인 보관함이다.
* 개인적인 정보(로그인한 사용자정보)를 저장한다.
* 페이지를 이동해도 유지되어야 하는 정보(장바구니, 최근본 상품)를 저장한다.
- ApplicationScope
* 모든 클라이언트, 모든 web객체가 공유하는 정보를 저장한다.
모든 JSP에서 사용되는 값을 저장한다.
(Connection Pool를 저장하는 용도로 사용된다.)
Spring에서는 빈 컨테이너를 저장하는 용도로 사용된다.
내장객체의 종류
- PageContext객체 (PageContext)
- 현JSP페이지에서 속성을 공유
- HttpServletRequest객체 (Request)
- 요청받은 객체에서 속성을 공유
- HttpSession객체 (Session)
- 같은 세션을 사용자만 속성을 공유
* 즉 자기 자신만
- ServletContext객체 (Application)
- 애플리케이션의 모든 사용자가 속성을 공유
내장객체의 공유 범위
ServletContext (Application) 앱 > HttpServletRequest (Request) 요청메세지 >
PageContext JSP페이지 > HttpSession (Session) 자기세션
내장 객체에 속성 저장하기
PageContectext객체에 속성 저장하기
pageContext.setAttribute("A", "PageContext의 속성이야");
HttpServletRequest객체에 속성 저장하기
request.setAttribute("B", "requset의 속성이야");
HttpSession객체에 속성 저장하기
session.setAttribute("C", "session의 속성이야");
ServletContext객체에 속성 저장하기
application.setAttribute("D", "application의 속성이야");
내장 객체에서 속성 꺼내기
PageContext에 저장된 값 조회하기
String value1 = (String)pageContext.getAttribute("A");
HttpServletRequest에 저장된 값 조회하기
String value2 = (String)request.getAttribute("B");
HttpSession에 저장된 값 조회하기
String value3 = (String)session.getAttribute("C");
ServletContext에 저장된 값 조회하기
String value4 = (String)application.getAttribute("D");
예시)
demo8.jsp
demo8_1.jsp (JSP 내장객체에 속성 저장하기 먼저 클릭)
demo8_3.jsp (demo8에서 JSP 내장객체에 저장된 속성 조회하기 클릭시)
※. PageContext와 HttpServletRequest가 null인 이유는 PageContext는 demo8_1에서 demo8_3으로 이동해서 없어진것이고
HttpServletRequest는 demo8_1에서 받은 request가 없어져서 null인것이다.
만약 demo8에서 JSP 내장객체에 속성 저장하기를 클릭 안했다면 HttpSession값도 저장이 안돼 session도 null이고
결국 ServletContext만 보였을것이다.
sendRedirect와 포워딩
- sendRedirect는 url을 바꿔가면서 다른페이지로 외부로 옮겨주는 느낌지만
포워딩은 내부에서 페이지를 옮겨주는것으로 url이 안바뀌며 PageContext는 전달이 안되지만
그 페이지에서 받은 HttpServletRequest (Request) 객체 정보는 전달된다.
※. forward 이동하기
RequestDispatcher 변수명 = request.getRequestDispatcher("보낼곳");
변수명.forward(request, response);
예시) forward 사용 예시
demo8.jsp (JSP 내장객체에 저장하고, 조회하기(forward 이동) 클릭시)
////////////////////////////////////EL 사용하기
EL이란 속성을 쉽게 사용할 수 있는 방법이다.
vo에 get메소드를 읽어오는 것이기 때문에 get이 없다면 EL을 사용할 수 없다.
예시) EL사용해서 위와 같은값 출력하기
(일반 java사용)
위와같은 것을 아래와 같이 바꿀수 있다.
(EL사용)
위와 같이 출력이 된다.
다만 차이점은 EL은 값이 null값일경우 출력이 안된다.
활용 예제) EL 여러방법으로 받아오기
demo8_2.jsp
-------------------------------------web.xml--------------------------------------
WEB-INF/web.xml 파일
welcom-file로 지정된 파일의 경우
주소창에 도메인명(호스트명)만 입력하면
아래의 file중 하나를 찾아서 시작화면으로 표시하게된다.
예시)
welcom-file
welcom-file로 지정된 파일의 경우
주소창에 도메인명(호스트명)만 입력하면
아래의 file중 하나를 찾아서 시작화면으로 표시하게된다.
위에처럼 하면 아래와 같이 열린다.
위의 처럼 localhost를 치면 /hta/main.jsp파일이 열린다
C:\Windows\System32\drivers\etc\hosts 파일을 아래처럼 수정하면
localhost를 지정한 도메인으로 열수있다.
초기화 파라미터 설정하기 context-param, context-value
* 톰캣이 시작될 때 초기화 파라미터값을 읽어간다.
* 톰캣이 ServletContext객체를 생성하고, 초기화파라미터값을 저장한다.
* Java Web의 객체들(모든 JSP, 모든 서블릿, 모든 필터, 모든 리스터)은
초기화파라미터값을 ServletContext로부터 조회할 수 있다.
위에처럼 설정하고 값을 불러올때 initParam, getInitParameter을 이용하기도 한다.
demo9.jsp
HttpSession
- 객체의 타임아웃 시간을 분단위로 설정한다, (분단위)
(예시: 은행사이트 자동 로드아웃 같은)
---------------------------------------------IBATIS----------------------------------
1. 아래 경로로 간다.
https://mvnrepository.com/artifact/org.apache.ibatis/ibatis-sqlmap
2. 2.3.4.726 버전 클릭 후 jar파일을 다운받는다.
3. 이클립스에서 WEB-INF에 복사 붙여넣기 한다.
ibatis
- SQL Mapper Framwork
- SQL과 객체를 매핑하고 해당 쿼리의 실행을 요청하면
쿼리를 실행하고, 결과를 반환하는 라이브러리다.
- 주요 구성 파일
ibatis 환경설정 파일
- Database 연결정보 설정
- SQL이 정의된 파일 설정
ibatis용 쿼리 설정 파일
- 실행할 SQL을 정의
* 테이블의 갯수만큼 작성하는 것이 원칙이다.
- 핵심 객체
- SqlMapClient
- insert, update, delete, select 쿼리를 실행하는 메소드를 제공한다.
- 주요메소드
* INSERT 쿼리
int insert(String id)
int insert(String id, Object param)
* UPDATE 쿼리
int update(String id)
int update(String id, Object param)
* DELETE 쿼리
int delete(String id)
int delete(String id, Object param)
* SELECT 쿼리
Object queryForObject(String id)
Object queryForObject(String id, Object param) // 값이 한개만 나올때 사용한다.
List queryForList(String id)
List queryForList(String id, Object param) // 값이 두개이상일경우 사용한다.
예시)
config.xml
IbatisUtils.java