2009-04-21 4 views
2

Lassen Sie mich zu Beginn sagen, dass ich Java-Web-Apps völlig neu bin. Es tut mir leid, wenn das eine sehr grundlegende Frage ist.Wie schließe ich JSP-Seiten in eine Java-Webanwendung ein, ohne Code zu duplizieren?

Ich schreibe eine App, mit der Benutzer sich in ein Konto einloggen können. Der obere Teil jeder Seite eine Infoleiste enthält (eine Art, wie die oberen Leiste in GMail) mit so etwas wie:

Logged in as <userid> | Settings | Help 

Da dieser Teil auf jeder Seite sein wird, es macht Sinn für mich zu teilen, dass Funktionalität aus, damit ich meinen Code nicht vervielfältige.

Ich habe einige der Suche und fand, dass ich diese verwenden:

<jsp:include page="userInfoBar.jsp" flush="true" /> 

in der Mitte eines anderen JSP. Ich habe Probleme mit meiner Seite userSettings.jsp bekommen, die auch einige Benutzerdetails aus der Datenbank enthält. Ich kopiere nicht nur irgendeinen Code zwischen den beiden JSPs, sondern ich habe das Gefühl, dass ich die doppelte Arbeit während des Renderns der Webseite mache.

Zum Beispiel (Pseudo-Code):

userInfoBar.jsp: 
user = getCurrentUser 
if (user) { 
    print Logged in as user.userid | Settings | Help 
} 

userSettings.jsp: 
<jsp:include page="userInfoBar.jsp" flush="true" /> 
user = getCurrentUser 
Change settings for user.userid 

So in diesem kleinen Beispiel GetCurrentUser zweimal aufgerufen wird (ich glaube, es sei denn, Java irgendwie optimiert, dass).

Wie kann ich diese Doppelarbeit vermeiden, aber die userInfoBar trotzdem etwas von jeder JSP getrennt halten?

Vielen Dank im Voraus!

Brian

Antwort

3

Das Problem ist, dass Sie Java-Code in Ihren JSPs haben. Die meisten bösen Dinge passieren, wenn du das tust. Sie sollten das MVC-Muster bei Google nachschlagen.

Wie auch immer, der beste Weg, dies zu tun wäre MVC-Muster zu verwenden, und machen Sie Ihr schweres Heben in der Steuerung, nachdem das schwere Heben erfolgt ist, können Sie die Zeichenfolgen/Listen übergeben, um die Ansicht anzuzeigen, die angezeigt wird sie und nichts mehr.

Auch, wenn Sie mit MVCs mit JSTL beginnen, werden viel mehr Menschen in der Lage sein, Ihnen zu helfen, weil jeder weiß, wie das Zeug zu tun, und hoffentlich nicht viele Menschen immer noch Inline-java tun in ihrer JSPs

+0

Cool - Ich bin vertraut mit MVC wegen Ruby on Rails und Django - ich war einfach nicht sicher, wie man das in Java machen kann. Ich schaue es jetzt :) – BrianH

+0

Lesen auf JSTL - das sieht aus wie der Weg zu gehen. Sieht ganz anders aus, also werde ich das für eine Weile studieren. Vielen Dank für die Hilfe! – BrianH

2

Versuchen Sie es mit JSF. Dies ermöglicht eine einfache Implementierung von MVC.

Sie können zwei Front-Ends auf dieselbe session-scope Bean verweisen, um Benutzerinformationen zu erhalten.

2

Sie können auch jspf (JSP-Fragmentdateien) verwenden, um Teile von JSP zu speichern.

jsp: include ist eine Möglichkeit, eine JSP einzuschließen.

Eine andere Möglichkeit ist die Verwendung von c: include aus den JSTL-Bibliotheken.

Die Unterschiede werden hier behandelt: * http://sharat.wordpress.com/2006/09/08/40-what-is-the-difference-between-jspinclude-and-cimport/

Hoffnung, das hilft. Ich bin sicher, dass es rahmenspezifische Ansätze gibt, aber dies sind die beiden JSP-Ansätze, die ich kenne.

0

Nun, für ein kleines Projekt mit ein paar Seiten denke ich, es ist in Ordnung, jsp zu machen, und es ist keine schlechte Idee, sich daran zu gewöhnen.

Ich kann Ihnen versichern, dass jedes framwork viel mehr "unnötigen" Code hinzufügen wird, der immer und immer wieder genannt wird, aber Sie werden nicht bemerken, wie es hinter den Abstraktionen verborgen ist.

(Ich kann nicht wirklich ein anständiges HTML-Framework für Java empfehlen, aber vielleicht ist GWT am vielversprechendsten oder zumindest am wenigsten schmerzhaft. Zumindest kann ich echten debuggablen Code schreiben, in einem anständigen Editor ...)