รวมไฟล์ 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() include_once()ฉันติดอยู่ใน JSP นี้เล็กน้อย :(


1
ทำไมไม่ลองพิมพ์ชื่อเกมที่ฮาร์ดโค้ดด้วยล่ะ ยังไงก็ตามที่คุณกำลังตรวจสอบ P แล้วคุณรู้ว่าหน้าการกลั่นจะเป็น p.jsp ดังนั้นเหตุผลใดที่ทำให้ซับซ้อน?
kosa

ขอบคุณที่ตอบกลับ มันเป็นตัวอย่าง จริงๆแล้วฉันแบ่งย่อยหน้าออกเป็นหลาย ๆ ตัวอย่างเช่นถ้าฉันมีหน้าผลิตภัณฑ์ในพื้นที่ผู้ดูแลระบบเพื่อเพิ่มผลิตภัณฑ์ใหม่แก้ไขผลิตภัณฑ์ค้นหาผลิตภัณฑ์ดูผลิตภัณฑ์ ฯลฯ มันจะถูกแยกออกเป็นหน้าย่อย ดังนั้นการเข้ารหัส hardcoding แต่ละบรรทัดจะดูน่ารังเกียจ พูดเพื่อแสดงชื่อของฉันเพียง 10 ครั้งฉันสามารถเลือกที่จะพิมพ์โดยใช้ลูปหรือเขียน 10 บรรทัด แต่ฉันคิดว่าการเลือกวงจะดีกว่า ไม่ใช่เหรอ ฉันคิดว่านี่อาจเป็นทางออก: stackoverflow.com/questions/482788/…
Akhilesh B Chandran

คำตอบ:


231

สิ่งที่คุณทำคือการรวมแบบคงที่ การรวมแบบสแตติกได้รับการแก้ไขในเวลารวบรวมและอาจไม่ใช้ค่าพารามิเตอร์

สิ่งที่คุณต้องการคือไดนามิกรวมถึง:

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

โปรดทราบว่าคุณควรใช้ JSP EL มากกว่า scriptlets ดูเหมือนว่าคุณกำลังใช้งานคอนโทรลเลอร์กลางกับ index.jsp คุณควรใช้เซิร์ฟเล็ตเพื่อทำสิ่งนั้นแทนและส่งไปยัง JSP ที่เหมาะสมจากเซิร์ฟเล็ตนี้ หรือดีกว่าใช้กรอบ MVC ที่มีอยู่เช่น Stripes หรือ Spring MVC


1
ขอบคุณสำหรับคำแนะนำของคุณ :) ฉันลองใช้แท็ก jsp: include แต่ ณ รันไทม์มันทำให้ไฟล์ไม่พบข้อผิดพลาด java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jspรายละเอียดของข้อยกเว้น: ดูเหมือนว่า<%= p %>มันจะถูกใช้เหมือนในเส้นทางของไฟล์!
Akhilesh B Chandran

7
อย่าใช้ scriptlets ใช้ JSP EL: page = "/ include / $ {param.p}" หรือลองใช้หน้า = "<% =" / รวม / "+ p%>"
JB Nizet

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

คุณสามารถใช้รวมคำสั่ง

<%
 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"%>"/>

<% 
 }
%>

ความแตกต่างคือการรวมคำสั่งรวมไฟล์ในช่วงการแปล ในขณะที่ 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 servlet ไฟล์ที่รวมอาจเป็นทรัพยากรแบบคงที่หรือหน้า JSP โดยทั่วไป JSP include directive ใช้เพื่อรวมแบนเนอร์ส่วนหัวและท้ายกระดาษ

ไวยากรณ์สำหรับการรวมไฟล์ 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

org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found. นั่นทำงานในด้านของคุณหรือไม่
Akhilesh B Chandran

นี่คือการตรวจสอบปัญหาที่เกี่ยวข้องกับเส้นทางว่าไฟล์มีอยู่ในเส้นทางของคุณหรือไม่ฉันคิดว่าเส้นทางบริบทของคุณหายไป (ควรจะมี / admin.jsp) ฉันยังไม่ได้จำลองสถานการณ์ที่ด้านข้างของฉัน
Balaswamy Vaddeman

1
ฉันลองสะท้อนค่าของ "p" มันคือ: includes/add.jsp. <%@ include file="includes/add.jsp" %>จากนั้นก็ใช้วิธีนี้ในการรวมอนุพันธ์: มันแสดงให้เห็นเนื้อหาของหน้า แต่ถ้าฉันใช้บรรทัดนี้แทน: <%@ include file="<%=p%>" %>มันจะแสดงข้อยกเว้น!
Akhilesh B Chandran

สวัสดีฉันมีปัญหาเดียวกัน File "<%=p%>" not foundข้อผิดพลาดการเดินทาง ถ้าฉันจะใช้มูลค่าจริงมันทำงาน
Reddy 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.