Session Bean -> Daten aus dem Servlet holen

Status
Nicht offen für weitere Antworten.

freez

Top Contributor
Hallo,

ich habe eine SessionBean für meine JSP und ein XML File, welches ich mit JDOM in der Bean auslese. Nun wiederholt sich dieser Code bei jedem Aufruf der JSP:



Code:
//		Erzeugen eines JDOM-Dokuments anhand der Datei nav.xml
		SAXBuilder builder 	= new SAXBuilder();
		Document doc 		= null;
		try {
			doc = builder.build( navFilename );
		}
		catch (JDOMException e) {e.printStackTrace();}
		catch (IOException e) {e.printStackTrace();}
		return doc;

Nun, da die XML Datei sich eigentlich nie ändert ist es meiner Meinung nach unsinnig, bei jedem Aufruf das selbe zu machen (oder meint ihr, daß das so verschwindend geringer Overhead ist, daß ich das ruhig lassen kann, auch bei erhöhtem Zugriffsaufkommen?). Ich habe mir gedacht, ich könnte diesen Part in dem Servlet einmalig erledigen, und dort direkt das "Document" ablegen. Die Frage ist nur, wie komme ich von der SessionBean an das Document ran, wenn die JSP das erste mal aufgerufen wird, und die Bean instanziiert wird? Hat da jemand ne Idee?

Oder meint ihr, daß das kompletter Blödsinn ist, und ich in die völlig verkehrte Richtung denke?
 
G

Guest

Gast
Nur so 'ne Idee. Das Dokument im Application-Scope zu halten.
Code:
<%
   ...
   Document document = sessionBean.getDocument(...);
   application.setAttribute("document", document);
%>

und dann entsprechend widerverwenden

<%
   Document document = (Document)application.getAttribute("document");
%>
 

testit1234

Mitglied
Eine vollständig andere Idee als der SessionScope wäre es
dies in einem Servlet zu schreiben. Da in den init() denn diese wird
nur genau einmal beim Server Starten aufgerufen und dann setzt du
das Document als Klassenvariable und schreibst dir eine Methode
getDocument() und fertig. So lade ich zum Beispiel meine Preferences,
die sich nicht während der Laufzeit ändern sollen.

Bsp.:

Code:
public class DocumentServlet extends HttpServlet {

Document doc = null;

public void init(javax.servlet.ServletConfig config)
      throws ServletException {

      SAXBuilder builder    = new SAXBuilder(); 
      try { 
         doc = builder.build( navFilename ); 
      } 
      catch (JDOMException e) {e.printStackTrace();} 
      catch (IOException e) {e.printStackTrace();} 


}

... doGet(), doPost() und destroy() für den Lebenszyklus des Servlets

public Document getDocument(){
    return doc;
}
}

Gruss
Testit
 

bronks

Top Contributor
freez hat gesagt.:
... ich habe eine SessionBean ... verschwindend geringer Overhead ist, daß ich das ruhig lassen kann, auch bei erhöhtem Zugriffsaufkommen?) ...
Auch ich würde EJB vollständig weglassen und es so machen, wie Gast und Testit1234 schon vorgeschlagen haben. Der ServiceLocator hat immer viel Arbeit damit Deine SessionBean zu finden und genau darin sehe ich den Overhead und Performanceverschwender, wenn man bedenkt, daß die Daten nur von einer JSP verarbeitet werden.
 

freez

Top Contributor
@gast: aber dann wäre doch das Document immer noch in der session, oder? Bei jeder neuen Session würde dann doch der Code zum einlesen des Documents ausgeführt. Besser zwar als bei mir, wo ich bei jedem Aufruf der JSP die Datei lade, aber wäre dann noch nicht perfekt.

@testit1234: ja, genauso habe ich es mir gedacht. Aber: wie kommt meine sessionBean an das Document, um die Daten in der XML Datei auszuwerten?
 

testit1234

Mitglied
Im Zweifelsfall instanzierst du ein Objekt der Klasse DocumentServlet

Code:
DocumentServlet docserv = new DocumentSevlet()
docserv.getDocument

Eine andere Methode, die ehr elegantere ist, die Daten aus deiner SessionBean getten bzw. setzen und
dann im Servlet zuverarbeiten, das kannst du aber auch genauso gut in der SessionBean machen.
Denn eine JSP ist ja nix anderes als eine Scriptsprache für ein Servlet Servlet, die beim ersten AUfruf vom Web-Server als Servlet generiert wird.
Eigentlich kannst du das machen, wie du möchtest. Du musst nur eben die Objekte hin-und her schicken!
Wofür brauchst du eigentlich so dringend eine SessionBean? Das ist mir noch nicht so ganz klar geworden. Denn JSP bzw. Servlets verfügen doch über eine recht komfortable Möglichkeit Sessions zu verwalten!
 

freez

Top Contributor
Vielleicht habe ich mit dem Wort "SessionBean" ein etwas verkehrtes Wort verwendet. Das ist keine EJB sondern die Bean, die ich in meiner JSP einbinde ... und zwar mit scope="session" :) Deswegen "SessionBean". Ich hoffe ich habe nicht zu viel Verwirrung gestifftet.

Also anders gefragt. Wie kann ich das Dcoument im Servlet einmalig erstellen und in der JSP nutzen. Vor allem, wenn die JSP beim ersten mal direkt und zwar vor dem Servlet aufgerufen wird (also das Servlet wird erst nach der JSP aufgerufen).

Zur verdeutlichung:

Ich starte meinen Browser und gebe ein: http://www.meinserver.de/project/site.jsp ein ... die JSP wird aufgerufen. Nun weiß das Servlet ja noch gar nix von dem Aufruf und kann somit die Bean nicht aus der HttpSession holen. Erst wenn ich eine Anfrage an das Servlet mache kann ich mir die Bean aus der Session holen .... Richtig??? Wenn jetzt das Document im Servlet steckt, wie kommt meine JSP an dieses Document?
 

bronks

Top Contributor
freez hat gesagt.:
... Also anders gefragt. Wie kann ich das Dcoument im Servlet einmalig erstellen und in der JSP nutzen. Vor allem, wenn die JSP beim ersten mal direkt und zwar vor dem Servlet aufgerufen wird (also das Servlet wird erst nach der JSP aufgerufen).
Mit dieser Technik funktioniert das nicht optimal.

Schau mal hier rein: http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html

Klick auf die beiden Frontcontrollerpatterns und Du wirst die Lösung schnell finden. Schau Dir vor allem die Bedeutung des RequestDispatchers an. Ich empfehle Dir die Servlet Front Strategy (das Linke pattern im Diagramm), da besser zu debuggen.

Viel Erfolg.
 

freez

Top Contributor
ich habe mir den Link mal genauer angeschaut. die ServletFrontStrategie gefällt mir ganz gut. Eine Frage (das habe ich nämlich nicht so deutlich rauslesen können): muß ich diesen Controller immer von Hand aufrufen (also von der JSP aus) oder gehen automatisch alle Anfragen an den Controller? Wenn es automatisch geht, wie wird dieser Controller in Tomcat implementiert?

Wenn das nicht so automatisch geht, wie kann ich verhindern, daß user bestimmte Seiten einfach aufrufen, ohne z.B. eingeloggt zu sein. Oder manche Seiten benötigen evtl. erst mal eine Eigenschaft (wie z.B. mein Document) um angezeigt zu werden. Wie kann ich dann automatisch an das Servlet umleiten, wenn der User die JSP direkt anspringt (aus dem Bookmark herraus oder so)
 

bronks

Top Contributor
So wie Du es beschreibst muß man den Controller von Hand aufrufen, aber letztendlich läuft es automatisch.

Ein hervorragendes Beispiel mit komplettem Quellcode genau zu dem Thema findest Du hier: http://www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-jspmvc.html

Der User wird nie versuchen den Controller zu umgehen, weil er niemals erfahren wird, welche JSPs sich dahinter verbergen. Er wird außer der URL für die index.jsp, immer nur die URL des Controllers und evlt. die Parameter dahinter sehen, welche nicht dafür ausreichen sich unangemeldet etwas anzeigen zu lassen, aber das wirst Du alles sehen, wenn Du den Code aus o.g. Link durchtestest.

Viel Erfolg!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Session löschen in Bean (Session Beans) Allgemeines EE 1
J Hello World mit Stateless Session Bean - Was mache ich falsch? Allgemeines EE 2
J Unterschied zwischen HttpSession und Stateful Session Bean Allgemeines EE 3
R Wie eine stateful session bean erneut "aufgreifen" Allgemeines EE 22
P Unterschied Session Scope / Stateful Session Bean Allgemeines EE 6
A Im PhaseListener auf Stateful Session Bean zugreifen Allgemeines EE 6
A Session Bean mit Local-Interface nutzen Allgemeines EE 3
RaoulDuke EJB 3.0 - Exceptions aus Methoden einer Session Bean Allgemeines EE 2
P Struts Form Bean vs. Session Variable Allgemeines EE 6
flashfactor Logging in einem Session-Bean Allgemeines EE 2
H JSP, Session und Java-Bean Allgemeines EE 4
M Session Bean vers. Entity Bean Allgemeines EE 3
C Mail von einer Session Bean aus senden Allgemeines EE 2
A (EJB)Session abhängige Parameter in POJO lesen Allgemeines EE 3
O JSF / Primefaces Session handling Allgemeines EE 1
H Shared Session in Webmodulen Allgemeines EE 2
F Session zerstören Allgemeines EE 12
G Session Allgemeines EE 6
E Session Problem Allgemeines EE 9
G Session neu!? Allgemeines EE 7
M Fehler bei Javamail Session mit Glassfish 3 Allgemeines EE 3
Java.getSkill() verbindung / connection in session speichern Allgemeines EE 4
D Frage zum Statefull Session Beans Lebenszyklus Allgemeines EE 3
MQue Session - Cookie Allgemeines EE 27
MQue Session Exception Allgemeines EE 5
M j_security_check Login und Session-ID Allgemeines EE 2
S Session in eine andere Anwendung übergeben Allgemeines EE 2
F Session abgelaufen und direkter Aufruf Allgemeines EE 10
Y myFaces und Hibernate Session Handling Allgemeines EE 7
S tomcat session timeout - und was danach? Allgemeines EE 1
Q Form Based Authentication - Session Attribute ? Allgemeines EE 2
G Session Cookies Allgemeines EE 2
Q Session Tracking - Wie macht mans richtig! Allgemeines EE 3
B Session Daten pro User merken Allgemeines EE 9
H [JSP JSF] Session Timeout und Redirekt zur Startseite Allgemeines EE 5
I Session-Attribute von Client zugänglich? Allgemeines EE 6
G session token Allgemeines EE 3
K tomcat: session-unabhängiges speichern Allgemeines EE 3
S Struts und Session Allgemeines EE 2
J Tomcat mit eigener Session-Implementierung Allgemeines EE 15
Y JSF - Session Handling Firefox Allgemeines EE 3
Y JSF - Session invalidate bei outpulink möglich? Allgemeines EE 4
R Session Tracking & Cookies Allgemeines EE 3
B Variablen ausserhalb der session ? Allgemeines EE 2
T Zugriff auf Session-Objekte in JSP Allgemeines EE 2
W Session tracking mit URL rewrite - Session weg! Allgemeines EE 4
G Neue Session bei der Verwendung von Frames Allgemeines EE 3
T Session-Problem Allgemeines EE 2
Z Session aufräumen Allgemeines EE 2
G Session Problem Allgemeines EE 5
G JBoss - Session / Entity Allgemeines EE 8
S Bild in Session Allgemeines EE 2
A JSF - Daten in Session speichern Allgemeines EE 2
R Formulareingaben gezielt aus Session löschen Allgemeines EE 4
W Session nach Browserschließung erhalten im Tomcat Allgemeines EE 4
R Vernünftige Session-Verwaltung mit Struts Allgemeines EE 4
Q Tomcat/java-Session-Problem Allgemeines EE 9
L Zwei Browserfenster mit unterschiedlicher session - geht das Allgemeines EE 3
P Session Problem Allgemeines EE 17
flashfactor Frage zu Session-Lebensdauer Allgemeines EE 3
J xdoclet session facade + value object Allgemeines EE 2
G ResultSet in Session speichern Allgemeines EE 4
P Session Attribute an Klasse übergeben Allgemeines EE 13
G Mit Session-IDs richtig umgehen Allgemeines EE 3
P Session NullPointerException Allgemeines EE 17
H daten in session speichern Allgemeines EE 8
G list in session schreiben Allgemeines EE 4
P String-Array an session Variable übergeben Allgemeines EE 3
P Session Beans importieren Allgemeines EE 2
F Problem mit Session (Weitergabe an andere JSPs) Allgemeines EE 2
R JSF Entitybean direkt in Sessionscoped Bean referenzieren Allgemeines EE 2
B [EJB] javax.inject.DefinitionException: bean not a Java type Allgemeines EE 5
T Einstieg in J2EE: Remote auf Bean zugreifen Allgemeines EE 11
H Bean läuft unter GlassFish, aber JBoss nicht Allgemeines EE 5
J geschützter Bean zugriff mit einem Rich-Client Allgemeines EE 2
2 JSTL Tags für eine Bean? Allgemeines EE 4
M Spring: Bean als Webservice freigeben Allgemeines EE 9
D Problem mit EJB: Bean soll Objekt eigener Klasse zurückgeben Allgemeines EE 2
V JSP BEAN Speichern von einer Zahl nach eingabe Allgemeines EE 2
H Bean Vergleich.gibts da schon was Feines? Allgemeines EE 13
B unterschied servlet und bean Allgemeines EE 2
F response.sendError() von Bean aus Allgemeines EE 6
J prozesse aus der application-bean threadfähig? Allgemeines EE 4
G JSF dynamsiche style zuweisung aus Backing Bean Allgemeines EE 3
G Objekt von jsp an set Methode von Bean übergeben! Allgemeines EE 2
N Lokation von Bean Klassen? Allgemeines EE 5
M JSF Bean-Property mit Parameter aufrufen Allgemeines EE 12
M JSF & EJB "Bean not bound" Problem Allgemeines EE 4
R Zugriff auf Managed Bean aus einem Filter Allgemeines EE 2
boxi JSF von einem Bean auf ein anderes Bean zugreifen Allgemeines EE 3
J Bean in der init-Methode des Servlets instanzieren Allgemeines EE 9
Y JSF - einzelne Bean zerstören/ungültig machen Allgemeines EE 2
S In einer Bean-Methode an ndere Beans kommen Allgemeines EE 7
ichbindiegute Performance von Entity Bean create vs. JDBC insert Allgemeines EE 11
A Selbstreferenzierter Entity-Bean Allgemeines EE 3
V Bean-Daten in JSF-JSP finden Allgemeines EE 3
G Entity Bean ignoriert Datenbank Allgemeines EE 16
J In einem Bean zugriff auf ein SessionBean? Allgemeines EE 2
F Package beim Cookie-setzten über BEAN nicht gefunden Allgemeines EE 4
M STRUTS/Cannot retrieve definition for form bean null on acti Allgemeines EE 4

Ähnliche Java Themen

Neue Themen


Oben