◈ action 폴더에 include 폴더 생성
🎨Header 영역
📌 include Directive : 외부파일(JSPF)을 읽어 소스코드(CSL 및 SSL)를 JSP 문서에 포함
→ file 속성값으로 설정된 외부파일의 소스코드를 포함하여 실행한 후 실행결과를 전달하여 응답
→ 외부파일의 내용이 변경될 경우 JSP 문서가 변경된 것과 동일하므로 JSP 문서에 대한 재해석 필요
→ file 속성값으로 JSP의 표현식(Expression) 사용 불가 - 속성값으로 설정된 외부파일의 소스코드만 포함(정적포함)
ex) 아래처럼 코드 사용시 에러 발생String fileName="header.jspf"; %> <%@include file="fileName" %>--%> <%@include file="header.jspf" %>
↑대신 action 태그 사용
📌 include ActionTag : 스레드가 이동된 JSP 문서의 실행결과(CSL)를 제공받아 JSP 문서에 포함
형식) <jsp:include path="JSP"></jsp:include> 또는 <jsp:include path="JSP"/>
→ page 속성값으로 설정된 JSP 문서가 없는 경우 에러 발생 - 500
→ page 속성값으로 설정된 JSP 문서로 스레드를 이동하여 실행한 후 결과를 제공받아 포함하고 요청 JSP 문서의 실행결과를 클라이언트에게 전달하여 응답
→ 스레드가 이동될 JSP 문서의 내용이 변경될 경우 해당 JSP 문서만 변경된 것이므로 요청 JSP 문서에 대한 재해석 불필요
→ page 속성값으로 JSP의 표현식(Expression) 사용 가능 - 표현식에서 사용된 변수값에 따라 다른 JSP 문서의 결과를 포함(동적포함)<%--<jsp:include page="header.jsp"/>--%> <jsp:include page="<%=headFileName %>"/>
🎨Footer 영역
📌 param ActionTag : 스레드가 이동된 JSP 문서로 값을 전달하는 태그
→ 리퀘스트 메세지(request 객체)의 몸체부에 값을 저장하여 스레드가 이동된 JSP 문서로 전달 --%>
→ include 태그 또는 forward 태그의 자식태그로만 사영 가능
주의) include 태그 또는 forward 태그에 자식태그로 param 태그를 제외한 코드가 존재할 경우 에러 발생
→ JSP 주석문은 예외<jsp:include page="footer.jsp"> <jsp:param value="<%=masterName %>" name="masterName"/> </jsp:include>
📃index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% //요청 JSP 문서 및 스레드가 이동된 JSP 문서에 적용 request.setCharacterEncoding("utf-8"); // //전달값을 반환받아 저장 String category=request.getParameter("category"); if(category==null) {//JSP 문서 요청시 전달된 값이 없는 경우 category="main"; } // String headFileName="header.jsp"; String masterName=""; // //전달값을 비교하여 Header 영역에 포함될 JSP 문서의 파일명 저장 및 관리자명 저장 if(category.equals("main")) { headFileName="header_main.jsp"; masterName="홍길동(hong@itwill.xyz)"; } else if(category.equals("blog")) { headFileName="header_blog.jsp"; masterName="임꺽정(lim@itwill.xyz)"; } else if(category.equals("cafe")) { headFileName="header_cafe.jsp"; masterName="전우치(cheon@itwill.xyz)"; } else { response.sendError(HttpServletResponse.SC_BAD_REQUEST); return; } %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JSP</title> </head> <body> <%-- Header 영역 --%> <%-- <h1>메인페이지</h1> <a href="index.jsp?category=main">메인</a> <a href="index.jsp?category=blog">블로그</a> <a href="index.jsp?category=cafe">카페</a> <hr> --%> <%-- include Directive : 외부파일(JSPF)을 읽어 소스코드(CSL 및 SSL)를 JSP 문서에 포함 --%> <%-- → file 속성값으로 설정된 외부파일의 소스코드를 포함하여 실행한 후 실행결과를 전달하여 응답 --%> <%-- → 외부파일의 내용이 변경될 경우 JSP 문서가 변경된 것과 동일하므로 JSP 문서에 대한 재해석 필요 --%> <%-- → file 속성값으로 JSP의 표현식(Expression) 사용 불가 - 속성값으로 설정된 외부파일의 소스코드만 포함(정적포함) --%> <%-- ex) 아래처럼 코드 사용시 에러 발생 <% String fileName="header.jspf"; %> <%@include file="fileName" %>--%> <%--<%@include file="header.jspf" %>--%> <%-- ↑대신 action 태그 사용 --%> <%-- include ActionTag : 스레드가 이동된 JSP 문서의 실행결과(CSL)를 제공받아 JSP 문서에 포함 --%> <%-- 형식) <jsp:include path="JSP"></jsp:include> 또는 <jsp:include path="JSP"/> --%> <%-- → page 속성값으로 설정된 JSP 문서가 없는 경우 에러 발생 - 500 --%> <%-- → page 속성값으로 설정된 JSP 문서로 스레드를 이동하여 실행한 후 결과를 제공받아 포함하고 요청 JSP 문서의 실행결과를 클라이언트에게 전달하여 응답 --%> <%-- → 스레드가 이동될 JSP 문서의 내용이 변경될 경우 해당 JSP 문서만 변경된 것이므로 요청 JSP 문서에 대한 재해석 불필요 --%> <%-- → page 속성값으로 JSP의 표현식(Expression) 사용 가능 - 표현식에서 사용된 변수값에 따라 다른 JSP 문서의 결과를 포함(동적포함) --%> <%--<jsp:include page="header.jsp"/>--%> <jsp:include page="<%=headFileName %>"/> <%-- //////////////////////////////////////////////////////// --%> <%-- Content 영역 --%> <p>요청에 의해 응답되는 아주 중요한 내용입니다.</p> <p>요청에 의해 응답되는 아주 중요한 내용입니다.</p> <p>요청에 의해 응답되는 아주 중요한 내용입니다.</p> <p>요청에 의해 응답되는 아주 중요한 내용입니다.</p> <p>요청에 의해 응답되는 아주 중요한 내용입니다.</p> <%-- //////////////////////////////////////////////////////// --%> <%-- Footer 영역 --%> <%-- <hr> <p>Copyright ©itwill Corp. All rights reserved.</p> <!-- <p>관리자 : 홍길동(hong@itwill.xyz)</p> --> <p>관리자 : <%=masterName %></p> --%> <%-- param ActionTag : 스레드가 이동된 JSP 문서로 값을 전달하는 태그 --%> <%-- → 리퀘스트 메세지(request 객체)의 몸체부에 값을 저장하여 스레드가 이동된 JSP 문서로 전달 --%> <%-- → include 태그 또는 forward 태그의 자식태그로만 사영 가능 --%> <%-- 주의)include 태그 또는 forward 태그에 자식태그로 param 태그를 제외한 코드가 존재할 경우 에러 발생 - JSP 주석문은 예외 --%> <jsp:include page="footer.jsp"> <jsp:param value="<%=masterName %>" name="masterName"/> </jsp:include> </body> </html>
📃header.jspf
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%-- int su=100; --%> <h1>메인페이지</h1> <a href="index.jsp?category=main">메인</a> <a href="index.jsp?category=blog">블로그</a> <a href="index.jsp?category=cafe">카페</a> <hr>
📃header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%-- int su=100; --%> <h1>메인페이지</h1> <a href="index.jsp?category=main">메인</a> <a href="index.jsp?category=blog">블로그</a> <a href="index.jsp?category=cafe">카페</a> <hr>
📃header_main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <h1>메인페이지</h1> 메인 <a href="index.jsp?category=blog">블로그</a> <a href="index.jsp?category=cafe">카페</a> <hr>
📃header_blog.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <h1>블로그페이지</h1> <a href="index.jsp?category=main">메인</a> 블로그 <a href="index.jsp?category=cafe">카페</a> <hr>
📃header_cafe.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <h1>카페페이지</h1> <a href="index.jsp?category=main">메인</a> <a href="index.jsp?category=blog">블로그</a> 카페 <hr>
📍 스레드가 이동된 JSP 문서(footer.jsp)는 클라이언트의 요청 JSP 문서(index.jsp)의 request 객체와 response 객체를 제공받아 사용
→ 스레드가 이동된 JSP 문서에서는 request 객체와 response 객체의 사용 제한 발생
문제점)스레드가 이동된 JSP 문서에서는 request 객체에 대한 리퀘스트 메세지 관련 정보 변경 불가능
→ request.setCharacterEncoding() 메소드를 호출하여 리퀘스트 몸체부에 저장되어 전달되는 값에 대한 캐릭터셋 변경 불가능
해결법)클라이언트의 요청 JSP 문서에서 리퀘스트 몸체부에 저장되어 전달되는 값에 대한 캐릭터셋 변경//request.setCharacterEncoding("utf-8"); String masterName=request.getParameter("masterName");
if(masterName==null) {
문제점)스레드가 이동된 JSP 문서에서는 response 객체를 이용하여 클라이언트에게 에러코드나 URL 주소를 전달 불가능
→ 스레드가 이동된 JSP 문서는 결과를 클라이언트가 아닌 요청 JSP 문서에 전달하므로 에러코드 또는 URL 주소 전달은 무의미
해결법)자바스크립트로 응답 처리하여 페이지 이동 가능response.sendError(HttpServletResponse.SC_BAD_REQUEST); return;
📃footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% //스레드가 이동된 JSP 문서(footer.jsp)는 클라이언트의 요청 JSP 문서(index.jsp)의 request 객체와 response 객체를 제공받아 사용 //→ 스레드가 이동된 JSP 문서에서는 request 객체와 response 객체의 사용 제한 발생 // //문제점)스레드가 이동된 JSP 문서에서는 request 객체에 대한 리퀘스트 메세지 관련 정보 변경 불가능 //→ request.setCharacterEncoding() 메소드를 호출하여 리퀘스트 몸체부에 저장되어 전달되는 값에 대한 캐릭터셋 변경 불가능 //해결법)클라이언트의 요청 JSP 문서에서 리퀘스트 몸체부에 저장되어 전달되는 값에 대한 캐릭터셋 변경 //request.setCharacterEncoding("utf-8"); String masterName=request.getParameter("masterName"); // if(masterName==null) { //문제점)스레드가 이동된 JSP 문서에서는 response 객체를 이용하여 클라이언트에게 에러코드나 URL 주소를 전달 불가능 //→ 스레드가 이동된 JSP 문서는 결과를 클라이언트가 아닌 요청 JSP 문서에 전달하므로 에러코드 또는 URL 주소 전달은 무의미 //해결법)자바스크립트로 응답 처리하여 페이지 이동 가능 response.sendError(HttpServletResponse.SC_BAD_REQUEST); return; } %> <hr> <p>Copyright ©itwill Corp. All rights reserved.</p> <%-- <p>관리자 : 홍길동(hong@itwill.xyz)</p> --%> <p>관리자 : <%=masterName %></p>