다른 JSP 파일 포함


161

현재 JSP를 배우려고합니다. 내 질문은 현재 다음을 사용하여 페이지의 머리글과 바닥 글을 포함하는 데 사용되었습니다.

<%@include file="includes/header.jsp" %>

<%@include file="includes/footer.jsp" %>

그러나 이제 페이지 내용도 분리했습니다. 따라서 사용자가 제품과 같은 페이지를 클릭하면 다음 위치에있는 JSP 파일을로드해야합니다. includes/pages/products.jsp 따라서 사용자 링크는 다음과 같습니다 <a href="index.jsp?p=products">Products</a>.

따라서 p 값을 가져 와서 페이지를 표시해야합니다.

다음은 내가 지금까지 한 일입니다.

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<%@include file="includes/page_name.jsp" %>

<% 
 }
%>

그렇다면 변수 "p"의 값을 "page_name"의 위치에 어떻게 배치합니까?

아니면 사용할 수있는 다른 방법이 있습니까?

PHP에서는 include()or를 사용할 수 있습니다 include_once(). 이 JSP에 조금 갇혀 있습니다. :(


1
왜 페이지 이름을 하드 코딩하지 않습니까? 어쨌든 P를 확인하고 있다면 distination page가 p.jsp가 될 것입니다. 그래서 복잡한 이유가 있습니까?
kosa

답장을 보내 주셔서 감사합니다. 예를 들었습니다. 실제로, 나는 페이지를 여러 부분으로 세분화했습니다. 예를 들어, 관리 영역에 Products 페이지가있는 경우 새 제품을 추가하거나 제품을 편집하고 제품을 검색하거나 제품을 보는 등의 작업이 하위 페이지로 분리됩니다. 따라서 각 줄의 하드 코딩은 불쾌하게 보일 것입니다. 내 이름을 10 회만 표시하려면 루프를 사용하여 인쇄하거나 10 줄을 적어 둘 수 있습니다. 그러나 루프를 선택하는 것이 좋습니다. 그렇지 않습니까? :이 해결책이 될 수도, 생각 stackoverflow.com/questions/482788/...
Akhilesh B CHANDRAN

답변:


231

당신이하고있는 일은 정적 포함입니다. 정적 포함은 컴파일 타임에 해결되므로 실행시에만 알려진 매개 변수 값을 사용하지 않을 수 있습니다.

필요한 것은 다음과 같습니다.

<jsp:include page="..." />

스크립틀릿 대신 JSP EL을 사용해야합니다. 또한 index.jsp로 중앙 컨트롤러를 구현하고있는 것 같습니다. 대신 서블릿을 사용하여이 서블릿에서 적절한 JSP로 디스패치해야합니다. 또는 Stripes 또는 Spring MVC와 같은 기존 MVC 프레임 워크를 사용하십시오.


1
제안 해 주셔서 감사합니다. :) jsp : include 태그를 사용해 보았습니다. 그러나 런타임에 파일을 찾을 수 없음 오류가 발생합니다. 예외 정보 : java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jsp. <%= p %>파일 경로에 그대로 사용 된 것 같습니다 !
Akhilesh B Chandran 10

7
스크립틀릿을 사용하지 마십시오. JSP EL을 사용하십시오 : page = "/ includes / $ {param.p}". 또는 page = "<% ="/ includes / "+ p %>"로 시도하십시오.
JB 니 제트

3
감사합니다. 나는 이것을 다음 <jsp:include page="<%= "includes/" + p + ".jsp" %>" />과 같이 사용했다 : 그리고 그것은 지금 일하고있다 :)
Akhilesh B Chandran

2
아주 좋은 답변입니다! 나는이 패턴 (index.jsp의 중앙 컨트롤러)을 너무 많이 보았고 항상 문제를 일으킨다.
Matthias Hryniszak

번역 시간이 아니어야합니까? 그리고 나는 여전히 그 매개 변수를 사용할 수 있다고 생각합니까?
Koray Tugay

26

그런 매개 변수를 사용할 수 있습니다

<jsp:include page='about.jsp'>
    <jsp:param name="articleId" value=""/>
</jsp:include>

about.jsp에서 매개 변수를 사용할 수 있습니다

<%String leftAds = request.getParameter("articleId");%>

18

Include 지시문을 사용할 수 있습니다

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<%@include file="<%="includes/" + p +".jsp"%>"%>

<% 
 }
%>

또는 JSP 포함 조치

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<jsp:include page="<%="includes/"+p+".jsp"%>"/>

<% 
 }
%>

다른 것은 include 지시문이 변환 단계 동안 파일을 포함한다는 것입니다. JSP 포함 조치에는 페이지 요청시 파일이 포함되는 반면

물건을 조작하는 컨트롤러로 Spring MVC Framework를 권장합니다. 매개 변수 대신 url 패턴을 사용하십시오.

예:

www.yourwebsite.com/products

대신에

www.yourwebsite.com/?p=products

이 비디오보기 Spring MVC Framework


1
비디오가 보호됩니다 .. 공개에게 공유하십시오
AutoMEta

첫 번째 예제가 실제로 작동하는지 확인할 수 있습니까? 작동하지 않는 것 같습니다.
Jus12

8

페이지 변환시 include 지시문에 제공된 파일의 컨텐츠는 JSP include 지시문이 사용되는 위치에있는 그대로 '붙여 넣기'됩니다. 그런 다음 소스 JSP 페이지가 Java 서블릿 클래스로 변환됩니다. 포함 된 파일은 정적 자원 또는 JSP 페이지 일 수 있습니다. 일반적으로 JSP include 지시문은 머리글 배너 및 바닥 글을 포함하는 데 사용됩니다.

jsp 파일 포함 구문 :

<%@ include file="relative url">

<%@include file="page_name.jsp" %>

6

1.<a href="index.jsp?p=products">Products</a> 사용자가 제품 링크를 클릭하면 products.jsp를 직접 호출 할 수 있습니다.

나는 매개 변수 값과 동일하게 JSP 파일의 이름을 유지할 수 있음을 의미합니다.

<%
 if(request.getParameter("p")!=null)
 { 
   String contextPath="includes/";
   String p = request.getParameter("p");
   p=p+".jsp";
   p=contextPath+p;

%>    

<%@include file="<%=p%>" %>

<% 
 }
%>

또는

2. 키, 값 쌍으로 외부 리소스 파일을 유지할 수 있습니다. 아래처럼

products : products.jsp

customer : customers.jsp

속성 파일에서 JSP 파일 이름을 프로그래밍 방식으로 검색 할 수 있습니다.

이 방법으로 JSP 파일의 이름을 쉽게 변경할 수 있습니다


감사합니다. 나는 현재 첫 번째를 사용하고 있습니다. 실제로, 나는 이것을하는 법에 문제가 있습니다!
Akhilesh B Chandran 10

org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found. 그것이 당신 편에서 효과가 있었습니까?
Akhilesh B Chandran 10

파일이 UR 경로에있는 경우이 경로 관련 문제 점검, 나는 UR없는 컨텍스트 경로 추측 .I이 시뮬레이션되지 않은 (포함 / admin.jsp해야한다) 엔터 시나리오에는 내 옆에
Balaswamy Vaddeman

1
"p"의 값을 반영하려고했습니다. 입니다 : includes/add.jsp. 그런 다음 이것을 파생 파생물에 사용했습니다 <%@ include file="includes/add.jsp" %>. 페이지 내용을 보여줍니다. 그러나이 줄을 대신 사용하면 <%@ include file="<%=p%>" %>예외가 표시됩니다!
Akhilesh B Chandran

안녕하세요, 같은 문제가 있습니다. 오류가 발생했습니다 File "<%=p%>" not found. 실제 가치를 사용하면 효과가 있습니다.
레디 SK

0

내가 사용 후 이유로 나는 아직 이해하지 못하는 <%@include file="includes/footer.jsp" %>내에서 index.jsp같은 다른 JSP 파일에 다음 register.jsp내가 사용했다 <%@ include file="footer.jsp"%>. 전체 경로를 더 이상 사용할 필요가없는 것처럼 STS는 초기 경로를 저장했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.