sub jsp를 동일한 경로메만들어보자
왜 세션이 안사라질까?
여기서 main갓다가 다시 서브
서버재시작 후
세션이 안사라지는 이유를 모르겟다
해결 :
왜 어느떈 죽고 어느떄 살아잇느냐
톰캣의 조작떄문임
이걸 일괄적으로 서버가 재시작되면 세션이 종료되도록 하게해야게슴
서버 > context.xml 열기
이제 재시작하면 세션 없애도록
그럼 날라감
이현상은 왜 이렇게??
페이지컨텍스트와 리퀘스트는 서로다른 페이지컨텍스트와 리퀘스트를 가지고잇는거임
페이지컨텍스트는 페이지마다, 리퀘스트는 요청마다. 다르기떄문임
원래는 was가 재시작되면 세션 날라가는데 상황에따라 안그럴떄가 잇음
그래서 애시당초 톰캣이 재시작되면 세션유지되게 만든거임
우리가 처음에 메인jsp를 요청햇음 이때 리퀘스트가 발생함
그리고나서 메인jsp를 서블릿(기본서블릿)이 리퀘스트를 받아서
우리가 찾고자햇던 main.jsp에 리퀘스트를 포워딩함
main.jsp에
그 받은 리퀘스트, 페이지컨택스트, 세션 , 어플리케이션 각각에 attr을 넣어뒀는데
결론
각각 실행하게되면 페이지컨텍스트와 리퀘스트는 별도로 발생하고 세션과 어플리케이션은 같이쓴다
jsp:include
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces = "true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="attr" value="pageAttr" scope="page"/>
<c:set var="attr" value="request" scope="request"/>
<c:set var="attr" value="session" scope="session"/>
<c:set var="attr" value="application" scope="application"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:include page="./sub.jsp" ></jsp:include>
</body>
</html>
페이지는 유알엘이 아니라 페이지경로인거임
결국 저 리퀘스트는 디폴트서블렛에서 받은거임
그럼 jsp 인클루드를 할때 리퀘스트는 넘어간다는 사실.. 페이지 컨택스트는 안넘어감 왜? 실행을 따로했으니까!
인클루드는 (jsp:forward는 나중에) 포워드는 아니지만 리퀘스트를 넘겨서 실행하고 오는구나라는걸 알수있다
jsp include의 리퀘스트는 살아서가기때문에 파라미터까지 넘길수있따
계속말하지만 얘네들은 따로따로 실행하구 단지 출력버퍼에 같이 담길뿐임
그럼 어떻게함??
리퀘스트에 어트리뷰트로 하거나 파라미터로 넘김으로서 밸류만 넘겨서 데이터공유가 가능한다
변수공유는 안되지만 변수의 값은 넘길 수 있음
근데 파라미터를넘길때
즉 저게 유알엘이라는 소리임 . 물리적경로가 아니라
forward : jsp에서또다른jsp로 포워드
jsp inclue의 차이점: 얘는 ㅎ포워드니까 화면이바뀜
jsp: <<이런식으로 된걸 액션태그라고한다
인클루드디렉티브
성격이 매우 다르다
얘는 실행하기전에 먼저 하나의 파일로 합침 그다음 컴파일함
따로실행하는게아니라 하나로 합친후 컴파일하기떄문에
내변수가니변수고 니변수가 내변수고
물론 선언의 순서는 따지지만
쓸쑤잇는변수는 다 쓸수있음 (앞서서 선언되어잇다면)
인클루드지만 자바의 임포트처럼 쓿수잇는것
가져와서 컴파일하니까 변수의 공유가 가능해지는것
그래서 sub.jsp에서 선언한 변수도 main.jsp에서 사용이 가능하다
놓치지말것
페이지컨택스트도 같이쓰고잇다는점 왜?합치는거니까 니페이지컨택스트가내페이지컨택스트고 그러는거임
작성할떄는 이클립스가 이 jsp만 보기떄문에 에러가뜨지만
실행할땐 뜨지않는다
디렉티브으ㅣ 인클루드는 인클루드된 jsp끼리 모든걸 다 공유한다. 순서는 따진다
순서를 따진다는말이
이제 지금부터 모듈레이션할거임
멤버리스트에 한거임
이제 자유게시판에 이식해보자
아이프레임에서 열리는 jsp의 헤더와 푸터를 만들어보자
인덱스는 건들지않아도됨
**이거만들떄 주의 : 모든문서에 공통적으로 들어가잇는녀석을 줘야함
아이프레임에서 열리기때문에 제목태그 필요없으므로 타이틀 지우구 저장
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces = "true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- Font Awesome Icons -->
<link rel="stylesheet" href="/resources/bootstrap/plugins/fontawesome-free/css/all.min.css">
<!-- Theme style -->
<link rel="stylesheet" href="/resources/bootstrap/dist/css/adminlte.min.css">
<!-- Google Font: Source Sans Pro -->
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700" rel="stylesheet">
</head>
footer.jsp도만들자
근데 이것도 고생이야
로그인이랑 인덱스페이지 빼고는
매번 이 둘이 인클루드 되어야하니까
필터를 쓰자
사이트매쉬라는 탬플릿프레임웤을 써보자
먼저 레이아웃을 짜고 (쪼개고) 그안에 필요한것을 넣음
타일즈는
레이아웃없이 붙이면서 화면을 구성하는 방식
타일즈는 스프링에서 자세히
화면이 레이아웃이 자주바뀌지않은데 반복이잇으면 사이트메쉬가 유리하고
레이아웃이 계속바ㅜ끼명서 구성요소가 들락날락하면 타일즈를 쓴다
그래서 안드로이드는 타일즈를 쓴다.
위젯같은거 긁어서 툭 붙이니까
일반적인 웹사이트의 화면구성은 사이트메쉬가 유리함