우리 모두는 jsp에 두 가지 형태의 include가 있다는 것을 알고 있습니다.
<%@ 포함 파일=” ”%>
<jsp:include 페이지=” ” 플러시=”true”/></P>
전자는 지시적 요소이고, 후자는 행동적 요소이다. 정확히 어디에 사용되나요? 사용 방법과 차이점은 무엇입니까? 이것은 많은 사람들이 보면 생각할 질문이 될 것입니다. 아래를 살펴보겠습니다. </P>
일반적으로 애플리케이션에 있는 모든 페이지의 특정 부분(예: 제목, 바닥글, 탐색 모음)이 동일한 경우 include 사용을 고려할 수 있습니다. 특히 <%@ include file=""%>를 사용하는 경우와 <jsp:include page="" flash="true"/>를 사용하는 경우는 다음과 같습니다. 가장 먼저 이해해야 할 것은 둘 사이의 차이점입니다. 사용법의 차이점을 이해해야만 언제 사용하고 선택하는지 이해할 수 있습니다.
<%@ include file=" ”%>, jsp include 지시문 요소는 지정된 페이지의 내용을 읽습니다. 그리고 이러한 콘텐츠를 원본 페이지와 통합합니다. (이 과정은 변환 단계, 즉 jsp가 서블릿으로 변환되는 단계에서 수행됩니다.</P>
다음은 번역 단계에 대한 설명입니다. jsp 페이지는 브라우저에 그대로 전송될 수 없으며 모든 jsp 요소는 먼저 서버에서 처리되어야 한다는 것을 알고 있습니다. 이는 jsp 페이지를 서블릿으로 변환한 다음 서블릿을 실행함으로써 수행됩니다. 서버에는 jsp 페이지를 처리하기 위한 jsp 컨테이너가 필요합니다. jsp 컨테이너는 일반적으로 서블릿 형태로 구현됩니다. 이 서블릿은 jsp 페이지에 대한 모든 요청을 처리하도록 구성됩니다. </P>
Jsp 컨테이너는 jsp 페이지를 서블릿(jsp 페이지 구현 클래스, JSP 페이지 구현 클래스라고 함)으로 변환하고 이 서블릿을 컴파일하는 역할을 담당합니다. 이 두 단계가 번역 단계를 구성합니다.</P>
이것으로부터 우리는 알 수 있습니다: jsp 페이지는 그것을 소개하는 jsp 페이지에 include 지시문 요소에 의해 지정된 페이지의 실제 컨텐츠(즉, 코드 조각)를 추가한 후 파일로 변환됩니다. jsp 컨테이너의 서블릿. 이때 임시 클래스 파일과 java 파일이 생성되는 것을 볼 수 있습니다. 여기에 예가 있습니다. </P>
서버는 Tomcat을 사용하며, 페이지에 소개되는 jsp 파일은 test.jsp라고 합니다. 가져온 페이지는 date.jsp라고 합니다. 이 jsp 파일은 시간과 관련된 jsp 코드를 저장하고 있으며 현재 컨텍스트 루트는 test로 설정되어 있습니다.
//======date.jsp 소스 파일======//
<%@ 페이지 언어="java" contentType="text/html;charset=gb2312"%>
<%
java.util.Date 날짜=새 java.util.Date();
문자열 날짜_cn = "";
문자열 dateStr = "";
스위치(date.getDay())
{
case 0:date_cn = "일 휴식";
사례 1:date_cn = "一";
사례 2:date_cn = "이";
사례 3:date_cn = "三";
사례 4:date_cn = "4";
사례 5:date_cn = "五";
사례 6:date_cn = "六";
}
dateStr = (1900+date.getYear()) + "연도" + (date.getMonth()+1) + "월" + date.getDate() + "일(요일) + date_cn + ")";
%>
document.write("<%=dateStr%>");
//======다음은 test.jsp 소스 파일입니다==============//
<%@ 페이지 언어=”java” contentType=”text/html;charset=gb2312”%>
<html>
<머리>
<title>include의 두 가지 용도</title>
<jsp:include 페이지=”date.jsp” 플러시=”true”/>
<%--@ 포함 파일=”date.jsp” %-->
//여기에서는 date.jsp 파일을 소개하기 위해 두 가지 다른 형식의 포함을 사용합니다.
<머리>
<본문>
<테이블><tr><td>
JSP에서 include의 두 가지 사용법에 주의하세요.
</td></tr></table>
</body>
</html></P>
test.jsp 파일에서는 "jsp에서 include의 두 가지 용도에 대해 주의하십시오."라는 텍스트 한 줄만 출력합니다. 이제 먼저 <%@ include file="date.jsp" %> 형식을 사용하겠습니다. date.jsp 파일. 뭔가 잘못될 수 있다고 생각하시나요? 이때 다음과 같은 오류 메시지가 나타납니다.
HTTP 상태 500?
org.apache.jasper.JasperException: /date.jsp(0,0) 페이지 지시문: contentType이 여러 번 나타날 수 없습니다.
아래에는 많은 오류가 있지만 문제가 어디에 있는지 확인하려면 이것만 보면 됩니다. 상태 코드는 http 500 서버 내부 오류입니다. 아래 팁을 다시 살펴보세요. date.jsp 페이지에서는 여러 contentType을 지정할 수 없습니다.</P>
이유는 다음과 같습니다. 번역 단계에서 test.jsp 페이지에 date.jsp 파일의 코드를 그대로 추가해 파일을 합성했기 때문이다. 합성된 파일은 동일합니다:
<%@ 페이지 언어=”java” contentType=”text/html;charset=gb2312”%>
이 코드. 해결 방법은 date.jsp 파일에서 이 문장을 삭제하는 것입니다. 새로 고침 후 test.jsp 페이지를 요청하세요</P>
test.jsp 요청은 다음과 같이 페이지에 표시됩니다.
2003년 12월 10일 13:12:40
JSP에서 include의 두 가지 사용법에 주의하세요. </P>
아직 아무것도 찾을 수 없습니다. Tomcat 아래의 임시 파일을 확인해 보겠습니다. 거기로 가서 date.jsp 파일의 내용이 test.jsp 파일에 추가되었는지 확인하세요.
<참고. 여기서 Tomcat은 E 드라이브의 루트 디렉터리에 설치됩니다.>
목차
E:tomcatworkStandalonelocalhosttest.
이 디렉토리에서 당신은 볼 수 있습니다
test_jsp.java와 test_jsp.class라는 두 개의 파일이 있습니다. </P>
여기서 java 파일은 jsp 컨테이너에 의해 jsp를 서블릿으로 변환한 test_jsp.java 파일이다. </P>
해당 test_jsp.class 파일은 test_jsp.java 서블릿 파일을 컴파일하여 생성된 클래스 파일입니다. 생성된 서블릿 파일(test_jsp.java)을 엽니다. 이때 test.jsp 파일을 서블릿 파일로 변환하면 출력 <haed> 사이에 test.jsp 페이지에 없는 일부 코드가 추가되는 것을 알 수 있습니다. 새로 추가된 내용은 날짜의 코드입니다. jsp: 어떤 새로운 콘텐츠가 추가되었는지, 실제로 새로운 콘텐츠가 추가되었는지 테스트해 보세요. 여기서는 자세히 설명하지 않겠습니다.</P>
위는 <%@ include file="date.jsp"%> 형식을 사용하여 얻은 결과입니다.
다음으로 <jsp:include page="dae.jsp" flash="true"/>를 사용합니다.
<%@ include file="date.jsp"%>를 <jsp:include page="dae.jsp" flash="true"/>로 바꾸고 test.jsp를 요청하세요.
2003?ê 12??10??
JSP에서 include의 두 가지 사용법에 주의하세요. </P>
이때, 우리가 소개한 date.jsp에 의해 출력된 날짜의 한자가 깨져 있는 것을 페이지에서 볼 수 있습니다. 이유는 무엇입니까? 요청 처리 단계에서 포함 동작 요소가 실행되기 때문입니까? 위에서 언급한 것처럼 JSP 페이지를 서블릿으로 변환하는 역할 외에도 JSP 컨테이너는 각 요청을 처리하고 응답을 생성하기 위해 JSP 페이지 구현 클래스를 호출하는 역할도 담당합니다. 요청 처리 단계. 요청 처리 단계에서는 클래스 파일만 실행합니다. </P>
그래서 페이지에 포함 작업 요소를 도입할 때 실제로는 date.jsp 파일이 변환되고 컴파일된 후에 생성된 서블릿 클래스 파일만 참조합니다. 이 경우 실행 후 별도의 파일로 date.jsp가 테스트됩니다. .jsp 파일이 실행 중일 때 호출됩니다. date.jsp 파일에 문자 인코딩이 지정되어 있지 않기 때문에 잘못된 문자가 나타납니다. 해결 방법은 date.jsp 파일에서 방금 제거한 문자를 다시 바꾸는 것입니다.
<%@ 페이지 언어=”java” contentType=”text/html;charset=gb2312”%>
이 문장을 추가한 후 새로고침하고 다시 실행하면 페이지가 올바르게 표시되며 tomcat 아래의 임시 파일을 보면 알 수 있습니다. date_jsp.java 파일과 date_jsp.class 파일이다. 이때 test_jsp.java, test_jsp.class 파일과 같은 방법으로 얻는다. 지금은 새로운 코드 줄만 추가되었음을 알 수 있습니다.
JspRuntimeLibrary.include(요청, 응답, "date.jsp", out, true);</P>
test.jsp에 date.jsp 파일의 코드를 추가하지 않습니다.</P>
단지 date.jsp 페이지가 런타임에 실행된 후에 생성된 응답을 소개합니다. 이는 응답을 생성할 수 있는 모든 웹 리소스(예: 서블릿 또는 jsp 페이지)를 지정할 수 있음을 의미합니다. 리소스는 jsp와 동일합니다. 페이지에서 생성된 콘텐츠 유형은 JSP 컨테이너가 내부 함수 호출을 통해 지정된 리소스를 실행하므로 이러한 가져온 리소스는 원래 요청을 처리하는 데 도움이 될 수 있으므로 이러한 리소스는 모든 객체에 액세스할 수 있습니다. 요청 범위 및 모든 원본 요청 매개변수에 포함됩니다.</P>
이러한 페이지는 메인 페이지가 요청될 때 아직 메인 페이지에 도입되지 않았기 때문에 페이지 속성에 대한 요청 시간 속성 값을 사용하여 런타임 상황에 따라 어떤 페이지를 도입할지 결정할 수도 있습니다. 들어오는 페이지에서 읽을 매개변수입니다.
<jsp:include 페이지="<%=pageSelectedAtRuntime%>" 플러시="true" >
<jsp:매개변수 이름=”fitstParamer” 값=”첫 번째 값”>
<jsp:매개변수 이름=”lastParamer” 값=”마지막 값”>
</jsp:포함></P>
가져온 JSP 페이지를 수정하면 최신 버전의 페이지를 즉시 사용할 수 있습니다. 이는 가져온 페이지가 브라우저에서 직접 호출한 JSP 페이지와 동일한 방식으로 처리되기 때문입니다. 즉, 페이지 변경 사항을 감지합니다. . , 자동으로 번역 단계로 들어가 페이지의 최신 버전을 가져옵니다.</P>
(include 행위 요소는 다른 jsp 요소와 동일하다는 점에 유의하세요. 행위 본문이 없으면 "/"로 끝나야 합니다. 다음과 같습니다.
<jsp:include page="<%=pageSelectedAtRuntime%>" 플러시="true" />)</P>
다음은 include의 두 가지 사용법의 차이점입니다. 두 가지 주요 차이점이 있습니다.
1: 실행 시간:
<%@ include file=”relativeURI”%>는 번역 단계에서 실행됩니다.
<jsp:include page="relativeURI" flash="true" />는 요청 처리 단계에서 실행됩니다.
2: 소개된 내용의 차이점:
<%@ 포함 파일=”relativeURI”%>
정적 텍스트(html, jsp)를 도입하고 이를 JSP 페이지와 통합한 후 서블릿으로 변환합니다.
<jsp:include page="relativeURI" flash="true" />실행 페이지 또는 서블릿에서 생성된 응답 텍스트를 소개합니다.
또한 두 가지 사용법 모두에서 파일 및 페이지 속성이 슬래시로 시작하는 경우 환경 상대 경로로 해석됩니다. 슬래시로 시작하지 않으면 해당 페이지와 관련된 경로이며, 이 파일이 소개되는 페이지의 경로에 따라 해석됩니다. URL 해석 방법에 대한 자세한 내용은 관련 자료를 참조하거나 서적.