반응형
01. action > include > index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1.
//요청 JSP 문서 및 스레드가 이동된 JSP 문서에 적용됨
request.setCharacterEncoding("utf-8");
//2.
//전달값을 반환받아 저장
String category=request.getParameter("category");
if(category==null) {//JSP 문서 요청시 전달된 값이 없는 경우
category="main";
}
String headFileName="header.jsp";
String masterName="";
//3.
//전달값을 비교하여 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>
// <h1>메인페이지</h1>
// <a href="index.jsp?category=main">메인</a>
// <a href="index.jsp?category=blog">블로그</a>
// <a href="index.jsp?category=cafe">카페</a>
// <hr>
1) Header 영역
방법1. <a> 태그 이용
// <h1>메인페이지</h1>
// <a href="index.jsp?category=main">메인</a>
// <a href="index.jsp?category=blog">블로그</a>
// <a href="index.jsp?category=cafe">카페</a>
// <hr>
방법2. include 지시어 이용 [소형프로그램 만들 시 많이 사용]
//include Directive : 외부파일(JSPF)을 읽어 "소스코드(CSL 및 SSL)"를 JSP 문서에 포함
// [file 속성값]으로 설정된 외부파일의 소스코드를 포함하여 실행한 후 실행결과를 전달하여 응답
// [외부파일의 내용이 변경될 경우], JSP 문서가 변경된 것과 동일하므로 JSP 문서에 대한 [재해석 필요]
//=>[재해석 필요] : JSP 문서를 서블릿으로 다시 만들어서 컴파일해야함
// [file 속성값]으로 JSP의 표현식(Expression) 사용 불가능
// [file 속성값]으로 설정된 외부파일의 소스코드만 포함(정적포함)
// <%@include file="header.jspf" %>
방법3. include 액션태그 이용 [대형프로그램 만들 시 많이 사용]
//🎩include ActionTag : 스레드가 이동된 JSP 문서의 "실행결과(CSL)"를 제공받아 JSP 문서에 포함
//형식)
//<jsp:include page="JSP"></jsp:include> 또는 <jsp:include page="JSP"/>
// [page 속성값]으로 설정된 JSP 문서가 없는 경우 에러 발생 - 500
// [page 속성값]으로 설정된 JSP 문서로 스레드를 이동하여 실행한 후 결과를 제공받아 포함하고 요청 JSP 문서의 실행결과를 클라이언트에게 전달하여 응답
// 스레드가 이동될 [JSP 문서의 내용이 변경될 경우], 해당 JSP 문서만 변경된 것이므로 요청 JSP 문서에 대한 [재해석 불필요]
// <jsp:include page="header.jsp"/>
// [page 속성값]으로 JSP의 표현식(Expression) 사용 가능
// 표현식에서 사용된 변수값에 따라 서로 다른 JSP 문서의 응답결과를 가져와 포함(동적포함)
<jsp:include page="<%=headFileName %>"/>
2) Content 영역
<p>요청에 의해 응답되는 아주 중요한 내용입니다.</p>
<p>요청에 의해 응답되는 아주 중요한 내용입니다.</p>
<p>요청에 의해 응답되는 아주 중요한 내용입니다.</p>
<p>요청에 의해 응답되는 아주 중요한 내용입니다.</p>
<p>요청에 의해 응답되는 아주 중요한 내용입니다.</p>
3) Footer 영역
방법1.
// <hr>
// <p>Copyright ©itwill Corp. All rights reserved.</p>
// <%-- <p>관리자 : 홍길동(hong@itwill.xyz)</p> --%>
// <p>관리자 : <%=masterName %></p>
방법2. include 액션태그 + param 액션태그 이용
//💕param ActionTag : 스레드가 이동된 JSP 문서로 값을 전달하는 태그
//=> 리퀘스트 메세지(request 객체)의 몸체부에 값을 저장하여 스레드가 이동된 JSP 문서로 전달
//=> [include 태그] 또는 [forward 태그]의 [자식태그로만] 사용 가능
//주의) [include 태그] 또는 [forward 태그]에 [자식태그로] param 태그를 제외한 코드가 존재 경우 에러 발생 - JSP 주석문은 예외
// <jsp:include page="footer.jsp">
// <!-- 이렇게 작성하면 에러발생함 -->
// <jsp:param value="<%=masterName %>" name="masterName"/>
// </jsp:include>
<jsp:include page="footer.jsp">
<jsp:param value="<%=masterName %>" name="masterName"/>
</jsp:include>
</body>
</html>
02. @include 지시어 이용
🖤header.jspf - @include 지시어
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
// [재해석 필요] : JSP 문서를 서블릿으로 다시 만들어서 컴파일해야함
//<%-- int su=100; --%> // (index.jsp)에서 사용 가능
<h1>메인페이지</h1>
<a href="index.jsp?category=main">메인</a>
<a href="index.jsp?category=blog">블로그</a>
<a href="index.jsp?category=cafe">카페</a>
<hr>
03. include 액션태그 이용
🖤header.jsp - include 액션태그
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<% int su=100; %> // (index.jsp)에서 사용 불가능
<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 - include 액션태그
- category=main
- <jsp:include page="<%=headFileName %>"/>
<%@ 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 - include 액션태그
- category=blog
- <jsp:include page="<%=headFileName %>"/>
<%@ 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 - include 액션태그
- category=cafe
- <jsp:include page="<%=headFileName %>"/>
<%@ 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>
💙footer.jsp - include 액션태그
<%@ 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>
반응형
'jsp' 카테고리의 다른 글
[jsp] 12. include 액션태그(템플릿페이지)를 통한 사이트 구축 (대형사이트에 최적) (0) | 2024.07.10 |
---|---|
[jsp] 11. 포워드 액션태그를 이용한 프로그램 (스레드 자체가 이동) (0) | 2024.07.09 |
[jsp] 9. JSP 모델 1 VS JSP 모델 2 (0) | 2024.07.08 |
[jsp] 8. 로그인 프로그램 (0) | 2024.07.07 |
[jsp] 7. 회원가입 프로그램 (0) | 2024.07.07 |