Obecnie próbuję się nauczyć JSP. Moje pytanie brzmi, że w tej chwili nagłówek i stopkę strony umieszczałem za pomocą:
<%@include file="includes/header.jsp" %>
i
<%@include file="includes/footer.jsp" %>
Ale teraz oddzieliłem również zawartość strony. Tak więc, jeśli użytkownik kliknie na stronie produkty powiedzieć, że ma do załadowania pliku JSP, który znajduje się w: includes/pages/products.jsp
Tak, link do użytkownika jest podobny: <a href="index.jsp?p=products">Products</a>
.
Muszę więc uzyskać wartość p i wyświetlić na jej podstawie stronę.
Oto, co zrobiłem do tej pory.
<%
if(request.getParameter("p")!=null)
{
String p = request.getParameter("p");
%>
<%@include file="includes/page_name.jsp" %>
<%
}
%>
Jak więc umieścić wartość zmiennej „p” na pozycji „nazwa_strony”?
A może jest jakaś inna metoda, której mógłbym użyć?
W PHP moglibyśmy użyć include()
lub include_once()
. Trochę utknąłem w tym JSP. :(
Odpowiedzi:
To, co robisz, to statyczne dołączanie. Statyczne dołączenie jest rozwiązywane w czasie kompilacji i dlatego może nie używać wartości parametru, która jest znana tylko w czasie wykonywania.
Potrzebujesz dynamiki, w tym:
Zauważ, że powinieneś używać JSP EL zamiast skryptletów. Wygląda również na to, że implementujesz centralny kontroler z index.jsp. Zamiast tego należy użyć serwletu i wysłać do odpowiedniego JSP z tego serwletu. Lub lepiej, użyj istniejącej struktury MVC, takiej jak Stripes lub Spring MVC.
źródło
java.io.FileNotFoundException: /includes/<%= p %>.jsp
. Wygląda na<%= p %>
to, że jest używany w takiej postaci, w jakiej znajduje się w ścieżce pliku!<jsp:include page="<%= "includes/" + p + ".jsp" %>" />
i teraz działa :)Możesz użyć takich parametrów
i
w about.jsp możesz wziąć parametr
źródło
Możesz użyć dyrektyw włączania
lub JSP Include Action
inna dyrektywa is include zawiera plik w fazie tłumaczenia. podczas gdy akcja JSP Include zawiera plik w momencie żądania strony
Polecam Spring MVC Framework jako kontroler do manipulowania rzeczami. użyj wzorca adresu URL zamiast parametru.
przykład:
zamiast
Obejrzyj ten film Spring MVC Framework
źródło
W czasie tłumaczenia strony zawartość pliku podanego w dyrektywie include jest „wklejana” w takiej postaci, w jakiej jest, w miejscu, w którym używana jest dyrektywa JSP include. Następnie źródłowa strona JSP jest konwertowana na klasę serwletu Java. Dołączony plik może być zasobem statycznym lub stroną JSP. Ogólnie rzecz biorąc, dyrektywa JSP obejmuje banery nagłówkowe i stopki.
Składnia dołączania pliku jsp:
Przykład
źródło
1.
<a href="index.jsp?p=products">Products</a>
kiedy użytkownik kliknie link Produkty, możesz bezpośrednio wywołać products.jsp.Mam na myśli, że możesz zachować nazwę pliku JSP taką samą jak wartość parametru.
lub
2. możesz utrzymywać zewnętrzny plik zasobów z parami klucz, wartość. jak poniżej
products : products.jsp
customer : customers.jsp
możesz programowo pobrać nazwę pliku JSP z pliku właściwości.
w ten sposób możesz łatwo zmienić nazwę pliku JSP
źródło
org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found
. Czy to zadziałało po twojej stronie?includes/add.jsp
. Następnie stosuje się to w to pochodne:<%@ include file="includes/add.jsp" %>
. Pokazuje zawartość strony. Ale jeśli zamiast tego użyję tej linii:,<%@ include file="<%=p%>" %>
pokazuje wyjątek!File "<%=p%>" not found
. Jeśli użyję prawdziwej wartości, to działa.Z jakiegoś powodu, którego jeszcze nie rozumiem, po tym, jak użyłem
<%@include file="includes/footer.jsp" %>
w moim,index.jsp
a następnie w innych plikach jsp, tak jakregister.jsp
musiałem użyć<%@ include file="footer.jsp"%>
. Jak widać, nie było już potrzeby używania pełnej ścieżki, STS przechował moją początkową ścieżkę.źródło