Webapplikation mit JSP und Beans - Eingaben sichern, wie?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi Leute,

ich bin (nicht ganz) Newbie bei Java, aber das was ich jetzt machen soll übersteigt meine Fähigkeiten und ich hoffe mit Eurer Hilfe meinen Kenntnisstand zu erweitern.
Folgende Situation:
- ich möchte ein Web-Frontend in Java bzw. HTML erstellen
- ich entwickle mit dem WebsphereApplicationDeveloper (falls der einem was sagt)
- das ganze möchte ich modular aufbauen, so dass man einzelne Komponenten hinzufügen oder entfernen kann
- ich arbeite mit der Oracle-DB9i und entsprechendem JDBC-Treiber
- ich benötige wegen der Vielzahl von Modulen ein dynamisches Menue (bisher habe ich ein extra Frame dafür und arbeite da mit JavaScript, auch wenn das nur ne Notlösung ist)
- mithilfe von JavaBeans möchte ich einige Werte sichern, um sie in anderen Modulen zu verwenden
- das System soll mehrsprachig geführt werden, dazu muss jeder Text und jede Buttonbezeichnung etc. in den entsprechenden Sprachen verfügbar sein
- es werden mehrere Formulare verbaut, die nach Usereingaben geprüft und ausgewertet werden sollen

und so weit bin ich:
ich habe einige JSP-Files mit dem HTML-Context erstellt, ein zentrales Bean, in dem alle Variablen instanziert werden und das alle Getter und Setter enthält, außerdem steht die Datenbankverbindung und ich komme an meine Daten ran.

Problem: bei Java gibt es keine globalen Variablen und ich kenne mich in Sachen Cookies nicht aus. Fakt ist, dass mehrere Benutzer gleichzeitig auf das System zugreifen müssen und ich nichtmal zwischen den einzelnen Modulen Daten sichern kann (sobald die JSP-Seite wechselt, z.B. durch nen Forward, kann ich die Werte nicht mehr auslesen).
Ich habe bzgl. "Beans" einen ähnlichen Ansatz probiert:
eine zentrale Klasse wie eben das Bean (Variablen, Getter, Setter)
Code:
public class Vars implements Serializable{
	static int 		b_help	= 0;	//ID Hilfe-Button
	static int 		b_logout	= 1;	//ID Logout-Button
	static int 		b_contact	= 2;	//ID Kontakt-Button
...
dazu in jedem Modul (JSP-Seite) eine eigene Instanz auf die "BeanKlasse"
Code:
<%@ page 
language="java"
contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"
import="programm.*"
%>
<%! Vars var2 	 = new Vars(); 	//Instanz auf die Klasse Vars (BeanKlasse) %>
<%! DbAccess db2 = new DbAccess();	//Instanz auf die Klasse DbAccess (DB-Zugriff) %>

Die sprachabhängigen Texte werden durch Variablen gesetzt.
Ich komme innerhalb eines Moduls an alle Werte, die ich brauche, aber sobald ich die Seite wechsle verschwinden alle Werte (damit kann ich auch nicht sichern, welche Sprache der User am Anfang gewählt hat, welcher User eingloggt ist um nicht immer im System abfragen zu müssen etc.).

Falls jemand Zeit und Lust hat mich bei diesem (für mich) anspruchsvollen Vorhaben zu unterstützen, der möge sich bitte melden (dann könnte ich auch den bisherigen Code versenden, momentan arbeite ich an einer Umgebung mit Mysql und Apache Tomcat, damit Oravle und Websphere nicht nötig sind...müsste bis morgen tun).

Ich vermute, dass es wahrscheinlich am ganzen Konstrukt von JSP- und Java-Files liegt, dass es so nicht funktionieren kann, aber vielleicht hat jemand ne Idee wie man das (ohne Applets) lösen kann.

Also: Java bzw. JSP als Basis (Webapplikation über InternetExplorer erreichbar)
dynamisches Menü
modulare Bausweise (ein Modul soll eine Übersicht über Maschinen ausgeben, ein weiteres die Statistiken dazu erstellen etc.)
Mehrsprachigkeit


Danke Euch vorab für Anregungen!
Grüße,
rob
 
I

Ives

Gast
Hallo rob,

das ist für den Anfang ziemlich viel.

Sieh dir mal das Struts Framework an. An einem einfachen Beispiel solltest du schon die wesentlichen Vorteile erkennen können. Dann kannst du auch den Aufruf der Klasse für den Datenbankzugriff (derzeit in deiner JSP) in eine Actionklasse verschieben. Das sollte auch unabhängig von der Struts-Verwendung erfolgen.

Die sprachabhängigen Texte kannst du in property-Files auslagern. Den Rest macht dein Applicationserver fast allein.

Mehrere Benutzer sollten auch kein Problem sein, da jeder eine eigene Session benutzt.

Bei weiteren Fragen versuche diese aufzuteilen.

Gruss

Ives
 

Bleiglanz

Gesperrter Benutzer
erstmal lernen was der sessionscope ist

der ist genau dazu da, javabeans für einen Benutzer über seitengrenzen hinweg aufzubewahren...

<%! Vars var2

lass das lieber, gute jspseiten kommen ohne Membervariablen <%! aus (die ohnehin nur für diese eine Seite existieren)
 
G

Gast

Gast
Danke Euch erstmal, ich werde mich mal weiter einlesen müssen.
@Bleiglanz: ich weiß bisher nicht genau wie ich das ohne Membervariablen machen kann..ich bräuchte hier eigentlich nur einen globalen Zugriff auf die Klasse Vars (BeanKlasse) und das habe ich bislang nicht ohne Instanzierung geschafft.
So habe ich bislang die Parameter ausgelesen:
<% java.util.Enumeration parameters = request.getParameterNames();
while(parameters.hasMoreElements()) //solange es weitere Parameter gibt
{
String parameterName = (String)parameters.nextElement(); //Parametername ermitteln
String parameterValue = request.getParameter(parameterName);//Parameterwert ermitteln
%>
<!--<TR><!-- Test-Ausgaben der ermittelten Werte >
<TD><%=parameterName%></TD>
<TD><%=parameterValue%></TD>
</TR-->
<% //Sichern der Werte
//var2.setVarsLogin(parameterName,parameterValue);
if(parameterName.equals("name"))
{ var2.setLog_iv_name(parameterValue);%>
<jsp:setProperty name="bean1" property="log_iv_name" value="<%= parameterValue %>" />
<%
System.out.println("gesetzt wurde "+parameterName+": "+parameterValue);
}
else if(parameterName.equals("pw"))
{ var2.setLog_iv_pw(parameterValue);%>
<jsp:setProperty name="bean1" property="log_iv_pw" value="<%= parameterValue %>" />
<%
System.out.println("gesetzt wurde "+parameterName+": "+parameterValue);
}
else if(parameterName.equals("lang"))
{ var2.setLog_sv_lang(parameterValue);%>
<jsp:setProperty name="bean1" property="log_sv_lang" value="<%= parameterValue %>" />
<%
System.out.println("gesetzt wurde "+parameterName+": "+parameterValue);
}
}
%>
wobei var2 die Instanz der Klasse mit den Variablen, Gettern und Settern ist und daraufhin die Variable gesetzt wird. Wie kann ich das anstatt mit "request" mit "session" machen?
 

kalaha

Mitglied
So jetzt bin ich mal eingeloggt...
Zu den Scopes:
Ich habe folgendes ausprobiert und es funktioniert :)
Setzen von Scope-Variablen:
Code:
<%
    // Check if attribute has been set
    Object o = pageContext.getAttribute("name", PageContext.PAGE_SCOPE);
    if (o == null) {
        // The attribute com.mycompany.name1 may not have a value or may have the value null
    }

    // Save data
    pageContext.setAttribute("name", "PageVariable");  // PAGE_SCOPE is the default
    pageContext.setAttribute("name", "SessionVariable", PageContext.SESSION_SCOPE);
    pageContext.setAttribute("lang", "ApplicationVariable", PageContext.APPLICATION_SCOPE);
%>
Ausgabe:
Code:
<%-- Show the values --%>
<% out.println("
Nur auf dieser Seite verfuegbar: "); %>
<%= pageContext.getAttribute("name")%><% // Defaultmaeßig: PAGE_SCOPE %>
<% out.println("
Waehrend der Session verfuegbar: "); %>
<%= pageContext.getAttribute("name", PageContext.SESSION_SCOPE) %>
<% out.println("
Applikationsweit verfuegbar: "); %>
<%= pageContext.getAttribute("lang", PageContext.APPLICATION_SCOPE) %>

Danke erstmal, sollte ich weitere Probleme haben werde ich mich bei Euch melden, sofern gestattet :)
Rob
 

Bleiglanz

Gesperrter Benutzer
UAHHH

a) verwende in deinen jsps sowenig <% %> wie möglich

b) warum pageContext? die vordefinierten Variablen session, application usw. sind da viel besser, auch wenn du sie vermeiden solltest

c) schau dir mal das jsp:useBean Element an, das würde deinen ersten FAll ("setzen") vollautomatisch OHNE Java-code erledigen...

gewöhn dir lieber gleich ein Muster an, bei dem

request an servlet
servlet macht was und legt beans in die scopes
servlet macht mit Dispatcher forward (oder include) auf jsp
jsp holt sich nur die Beans aus den scopes und zeigt was an

ist VIEL besser als das jsp <% java gestrüpp
 

kalaha

Mitglied
Kannst Du mir mal Beispielcode für Servlet, JSP-Files (ein Sender und ein Empfänger) und Bean liefern? Was ich darstellen muss sind Formulare wie in HTML, nur müssen die Eingaben vom User gesichert werden, da ich Datenbankabfragen darauf machen muss...wäre Dir sehr dankbar für ein solches Minimalkonstrukt.

Grüße,
Rob
 

kalaha

Mitglied
@Bleiglanz: mit <jsp:useBean habe ich bereits Versuche gestartet, habe aber Probleme die Eingaben vom User aus dem Formular zu setzen. normalerweise müsste ich doch damit alle Felder auslesen und setzen können:
Code:
<jsp:useBean id="vars" class="programm.Vars" scope="session"/>
	<jsp:setProperty name="vars" property="*" />
</jsp:useBean>

@all: Kann mir irgendjemand diesbezüglich weiterhelfen (ein einfaches Formular mit SprachSelect, Name und Passwort auf einer JSP-Webseite und eine weitere JSP-Seite, die die Eingaben ausgibt, dazu eben das nötige Servlet und Bean)?

Bean hätte ich hier
Code:
import java.io.Serializable;

public class myBean() implements Serializable{
private String name;
private String pw;

public setName(String n) {name=n;}
public getName() {return name}

public setPw(String p){pw=p;}
public getPw(){return pw}
}

Mein Grundgerüst vom Servlet:
Code:
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet implements Servlet {

	public void doGet(HttpServletRequest req, HttpServletResponse resp)
		throws ServletException, IOException {

	}

	public void doPost(HttpServletRequest req, HttpServletResponse resp)
		throws ServletException, IOException {

	}

	public void init() throws ServletException {

		super.init();

	}
}
 

byte

Top Contributor
kalaha hat gesagt.:
Code:
<jsp:useBean id="vars" class="programm.Vars" scope="session"/>
	<jsp:setProperty name="vars" property="*" />
</jsp:useBean>

du bringst da glaube ich was bei den tags durcheinander. schau dir mal genau an, wann man das / am ende des tags setzt und wann nicht.
 

kalaha

Mitglied
Sorry, ein Tippfehler, im Code habe ich den Tag richtig gesetzt. So schaut´s bei mir momentan aus:
Senderseite:
Code:
<jsp:useBean id="vars" class="programm.Vars" scope="session">
	<jsp:setProperty name="vars" property="*" />
</jsp:useBean>

<FORM name="form" method="post">
...
    

<INPUT type='text' name='name' width='125px' maxlength='10'></P>		
    

<INPUT type='password' name='pw' width='125px' maxlength='10'></P>
    

<SELECT name='lang' >
                <% db2.getLangs();	//erfasst aus DB wieviele und welche Sprachen angeboten werden
	String temp[] = new String[var2.getLog_dv_numb()];
	temp = var2.getLog_t_langs();//Array mit verfuegbaren Sprachen in Textform
	for(int i=0;i<var2.getLog_dv_numb();i++)
	{	out.println("<OPTION value="+temp[i]);
		out.println(" >");
		out.println(temp[i]);
		out.println("</OPTION>");
	}
	%>
<INPUT type='submit' value='Enter' onClick="MM_goToURL('parent','index2.jsp');return document.MM_returnValue" >
...
</FORM>
...
Empfängersseite:
Code:
<jsp:useBean id="vars" class="programm.Vars" scope="session">
</jsp:useBean>

<jsp:getProperty name="vars" property="log_iv_name" />
<jsp:getProperty name="vars" property="log_iv_pw" />
<jsp:getProperty name="vars" property="log_sv_lang" />
...
 

kalaha

Mitglied
Also ich hab jetzt folgende Lösung:
Meine Seite (Startseite.jsp), die das Formular enthält:

Code:
<jsp:useBean id="vars" class="programm.Vars" scope="session"/>
<jsp:setProperty name="vars" property="*"/>
<% session.setAttribute( "name", request.getParameter( "name" ) );
      session.setAttribute( "pw", 	 request.getParameter( "pw" ) );
      session.setAttribute( "lang",   request.getParameter( "lang" ) );
%>
...
<FORM action="Startseite.jsp" method="post" >
<INPUT type='text' name='name' width='125px' maxlength='10'></P>
<INPUT type='password' name='pw' width='125px' maxlength='10'></P>
<SELECT name='lang' >
    <% for(int i=0;i<var2.getLog_dv_numb();i++)
        {	out.println("<OPTION value="+temp[i]);
	out.println(" >");
	out.println(temp[i]);
	out.println("</OPTION>");
        }
	%>
</SELECT></P> 
<INPUT type='submit' value='Enter' onClick="MM_goToURL('parent','index2.jsp')" >
</FORM>
...

und die auslesende Seite (Welcome.jsp, ist ein Frame von index2.jsp):
Code:
<jsp:useBean id="vars" class="programm.Vars" scope="session"/>
...
<% 	out.println("
Name: "+session.getAttribute("name"));
	out.println("
PW:   "+session.getAttribute("pw"));
	out.println("
Lang: "+session.getAttribute("lang"));
%>
...
Die SessionVariablen muss ich innerhalb derselben Seite setzen, da ich mit Frames arbeite und sie nciht erst umständlich über Parameterauslesen setzen will, so kann ich auch gezielt einzelne SessionAttribute setzen.
Da es später sehr viele Seiten werden, möchte ich den Umweg über eine weitere JSP-Handler-Datei sparen, auch Servlet-Klassen möchte ich meiden, da die Seiten dynamisch aufgebaut werden und sowohl SessionAttribute als auch Werte aus der Datenbank usw. genutzt werden.
Vielleicht ist das keine sehr schöne Lösung den Code so zu mischen, allerdings möchte ich am Ende nicht zu viele Dateien haben und es soll nach mir jemand weiter daran arbeiten können (ich denke es hat den Vorteil, dass das wie HTML-Code aufgebaut ist, der Einfachheit der Struktur wegen...selbstverständlich wird der komplette Code kommentiert).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Webapplikation welche alternative zu gwt? Java Basics - Anfänger-Themen 2
I No Jakarta Enterprise Beans found with interface ignorieren? Java Basics - Anfänger-Themen 2
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
frager2345 Java Beans -> PropertyChangeListener Java Basics - Anfänger-Themen 3
S Was sind Java Beans? Java Basics - Anfänger-Themen 7
N Java Beans Java Basics - Anfänger-Themen 2
B BeanBuilder, Java Beans Java Basics - Anfänger-Themen 5
D Beans Erklärung Java Basics - Anfänger-Themen 11
alderwaran closed source jar, kein javadoc. was macht methode x eigentlich? ( oracle forms pjc beans ) Java Basics - Anfänger-Themen 2
Binary.Coder Java Beans - Entity erstellen Java Basics - Anfänger-Themen 6
T Java Beans JDateChooser Java Basics - Anfänger-Themen 2
M beans Java Basics - Anfänger-Themen 33
A von Java-Beans Klassen aufrufen Java Basics - Anfänger-Themen 3
N Unterschied zwischen Beans finden Java Basics - Anfänger-Themen 2
G Java Beans Java Basics - Anfänger-Themen 2
G Unterschied Observer&Observable<->java.beans.Prope Java Basics - Anfänger-Themen 4
B Java Beans Java Basics - Anfänger-Themen 5
M in Beans gibt es keinen konstruktor? Java Basics - Anfänger-Themen 4
T Bei Struts Beans updaten ohne ein Request zu verarbeiten Java Basics - Anfänger-Themen 4
G Message Driven Beans Java Basics - Anfänger-Themen 4
M API? Java Beans? Was ist das? Java Basics - Anfänger-Themen 13
S Java Beans - Bound Properties Java Basics - Anfänger-Themen 6
H Wie arbeitet man mit Beans? Java Basics - Anfänger-Themen 8
M Beans - Bohnen ??? Java Basics - Anfänger-Themen 5
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
S ArrayList Username und passwort mit JTextField eingaben abgleichen Java Basics - Anfänger-Themen 10
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
D Eingaben in String Array einlesen Java Basics - Anfänger-Themen 12
M Erste Schritte Mehrere eingaben in einer Line vergleichen (if equals...) Java Basics - Anfänger-Themen 6
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
ralli85 Programm nach einer gewissen Anzahl von Eingaben beenden Java Basics - Anfänger-Themen 15
A Ungültige Eingaben: Fehler ausgeben Java Basics - Anfänger-Themen 16
A Fehler bei der Speicherung von JOptionPane-Eingaben Java Basics - Anfänger-Themen 4
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7
F Erste Schritte Mehrere nextInt() Eingaben nebeneinander ausgeben Java Basics - Anfänger-Themen 12
K Eingaben in Array ausgeben Java Basics - Anfänger-Themen 3
R Scanner-Eingaben addieren Java Basics - Anfänger-Themen 5
H Best Practice Alternative Möglichkeit, um Eingaben vorzunehmen Java Basics - Anfänger-Themen 13
R struktogramm eingaben Java Basics - Anfänger-Themen 4
D Summe von Eingaben in einer for Schleife Java Basics - Anfänger-Themen 4
M Timer für Termial-Eingaben Java Basics - Anfänger-Themen 3
H Input/Output Console löschen und Eingaben in Echtzeit Java Basics - Anfänger-Themen 3
M Erste Schritte Eingaben in ein Array packen Java Basics - Anfänger-Themen 5
M Maskierte Eingaben in der Konsole? Java Basics - Anfänger-Themen 3
T Input/Output Scanner Eingaben auf Console farbig darstellen, wie? Java Basics - Anfänger-Themen 13
H JTable: Eingaben mit ENTER übernehmen Java Basics - Anfänger-Themen 2
B Eingaben verwerten Java Basics - Anfänger-Themen 7
Haave EAN-13-Prüfziffer: Vermeiden von Eingaben mit mehr/weniger als 12 Ziffern Java Basics - Anfänger-Themen 3
S Eingaben über die Konsole Java Basics - Anfänger-Themen 2
Obit Eingaben aus GUI auslesen Java Basics - Anfänger-Themen 10
J Regelmäßige Eingaben: Unresolved compilation problem? Java Basics - Anfänger-Themen 7
M Scanner String Eingaben ignorieren Java Basics - Anfänger-Themen 4
Antoras Durchschnitt ist nicht korrekt; Eingaben löschen Java Basics - Anfänger-Themen 7
A JTable nimmt eingaben von tastatur nicht an? Java Basics - Anfänger-Themen 2
D Klasse zum Auslesen von Eingaben Java Basics - Anfänger-Themen 2
L Gelöst: Negative Eingaben sollen verweigert werden Java Basics - Anfänger-Themen 3
M Dynamische Wertsetzung von Variablen durch Eingaben Java Basics - Anfänger-Themen 9
R Eingaben Java Basics - Anfänger-Themen 5
M Verdeckung von Eingaben Java Basics - Anfänger-Themen 3
A Was erzeugen diese Eingaben? Java Basics - Anfänger-Themen 2
M Überprüfen ob die eingaben in einem JTextField eine Zahl ist Java Basics - Anfänger-Themen 5
D Nochmal zu den dummen Eingaben über Tastatur Java Basics - Anfänger-Themen 15
P Boolean Eingaben Java Basics - Anfänger-Themen 6
G Probleme mit Eingaben Java Basics - Anfänger-Themen 10
T Kann man in einer Anwendung Eingaben simulieren? Java Basics - Anfänger-Themen 8
B Probleme mit Eingaben [System.in.read())] Java Basics - Anfänger-Themen 10
A Innerhalb eines ActionEvents Eingaben tätigen Java Basics - Anfänger-Themen 23
O Überprüfung von Eingaben auf Sinnhaftigkeit Java Basics - Anfänger-Themen 7
B Tastatur eingaben abfragen und dann in Argumente zerlegen..? Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben