Ich versuche gerade, JSP zu lernen. Meine Frage ist, zur Zeit habe ich die Kopf- und Fußzeile der Seite mit folgenden Angaben eingefügt:
<%@include file="includes/header.jsp" %>
und
<%@include file="includes/footer.jsp" %>
Aber jetzt habe ich auch den Seiteninhalt getrennt. Wenn der Benutzer auf eine Seite klickt, z. B. Produkte, muss er die JSP-Datei laden, die sich in Folgendem befindet: includes/pages/products.jsp
Der Link zum Benutzer lautet also wie folgt : <a href="index.jsp?p=products">Products</a>
.
Also muss ich den p-Wert erhalten und die darauf basierende Seite anzeigen.
Folgendes habe ich bisher getan.
<%
if(request.getParameter("p")!=null)
{
String p = request.getParameter("p");
%>
<%@include file="includes/page_name.jsp" %>
<%
}
%>
Wie platziere ich den Wert der Variablen "p" an der Stelle von "Seitenname"?
Oder gibt es eine andere Methode, die ich verwenden könnte?
In PHP könnten wir das include()
oder verwenden include_once()
. Ich stecke ein bisschen in dieser JSP fest. :((
Antworten:
Was Sie tun, ist ein statisches Include. Ein statisches Include wird zur Kompilierungszeit aufgelöst und verwendet daher möglicherweise keinen Parameterwert, der nur zur Ausführungszeit bekannt ist.
Was Sie brauchen, ist ein dynamisches Include:
Beachten Sie, dass Sie die JSP-EL anstelle von Scriptlets verwenden sollten. Es scheint auch, dass Sie einen zentralen Controller mit index.jsp implementieren. Verwenden Sie dazu stattdessen ein Servlet und senden Sie es von diesem Servlet an die entsprechende JSP. Oder verwenden Sie besser ein vorhandenes MVC-Framework wie Stripes oder Spring MVC.
quelle
java.io.FileNotFoundException: /includes/<%= p %>.jsp
. Sieht so aus, als würde das<%= p %>
so verwendet, wie es im Dateipfad ist!<jsp:include page="<%= "includes/" + p + ".jsp" %>" />
und es funktioniert jetzt :)Sie können solche Parameter verwenden
und
in about.jsp können Sie den Parameter nehmen
quelle
Sie können Include-Anweisungen verwenden
oder JSP-Aktion einschließen
Die andere Include-Direktive enthält eine Datei während der Übersetzungsphase. Während JSP Include Action zum Zeitpunkt der Anforderung der Seite eine Datei enthält
Ich empfehle Spring MVC Framework als Controller, um Dinge zu manipulieren. Verwenden Sie das URL-Muster anstelle des Parameters.
Beispiel:
anstatt
Sehen Sie sich dieses Video Spring MVC Framework an
quelle
Zur Zeit der Seitenübersetzung wird der Inhalt der in der Include-Direktive angegebenen Datei an der Stelle, an der die JSP-Include-Direktive verwendet wird, so wie sie ist eingefügt. Anschließend wird die Quell-JSP-Seite in eine Java-Servlet-Klasse konvertiert. Die enthaltene Datei kann eine statische Ressource oder eine JSP-Seite sein. Im Allgemeinen wird die JSP-Include-Direktive verwendet, um Header-Banner und -Fußzeilen einzuschließen.
Syntax für das Einschließen einer JSP-Datei:
Beispiel
quelle
1.
<a href="index.jsp?p=products">Products</a>
Wenn der Benutzer auf den Link Produkte klickt, können Sie products.jsp direkt aufrufen.Ich meine, Sie können den Namen der JSP-Datei genauso wie den Parameter Value beibehalten.
oder
2.Sie können eine externe Ressourcendatei mit Schlüssel-Wert-Paaren verwalten. Wie unten
products : products.jsp
customer : customers.jsp
Sie können den Namen der JSP-Datei programmgesteuert aus der Eigenschaftendatei abrufen.
Auf diese Weise können Sie den Namen der JSP-Datei einfach ändern
quelle
org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found
. Hat das bei dir funktioniert?includes/add.jsp
. Dann verwendet dies in Include-Derivat :<%@ include file="includes/add.jsp" %>
. Es zeigt den Seiteninhalt. Aber wenn ich stattdessen diese Zeile verwende :<%@ include file="<%=p%>" %>
, zeigt es Ausnahme!File "<%=p%>" not found
. Wenn ich echten Wert verwenden werde, funktioniert es.Aus einem Grund verstehe ich noch nicht, nachdem ich
<%@include file="includes/footer.jsp" %>
in meinenindex.jsp
dann in den anderen JSP-Dateien verwendet habe, wieregister.jsp
ich sie verwenden musste<%@ include file="footer.jsp"%>
. Wie Sie sehen, musste der vollständige Pfad nicht mehr verwendet werden. STS hatte meinen ursprünglichen Pfad gespeichert.quelle