# Webseiten JSP Servlets Struktur



## Java.getSkill() (26. Jan 2010)

Hallo,

Ich befasse mich seit kurzem mit JSP/Servlets und hätte da eine Frage.

ich nehme ein simples bildhaftes Beispiel:

Stellt euch vor, es gibt von einer index.jsp einen link ins admin.jsp, wo vorher user+pw gegen eine DB gecheckt werden. Nach dem einloggen befindet man sich nun in der admin.jsp und es sollen 4 Funktionalitäten zur Verfügung gestellt werden.
Neue Personen in die DB anlegen
Neue Autos in die DB anlegen
Personen bzw. Autos updaten oder löschen

Welche .jsp bzw. Servlet Dateien gibt es nun alles neben der admin.jsp?

z.B. neue Person anlegen:
auf index.jsp klick auf einen Button "Person erstellen"->NeuePersonErstellen.jsp Seite mit Formular wird geladen; submit klicken->neue Seite HolPersonDatenInBean.jsp um die Formular daten in eine UserDataBean.java zu speichern; forward zu CreateNeuePerson.java (Servlet) welcher dann wirklich mit einem Insert Statement in die DB schreibt

1 Formularseite, 1 Beans, 1 Jsp um in Beans zu schreiben und 1 Servlet für SQL/DB

1) Sieht es für die 3 anderen Funktionalitäten auch so aus??
2) Kann ich eine Beans für 3 verschiedene Formulare hernehmen, wenn die parameter die gleichen sind?
Auto hat Name und Person hat auch Name.
3) Kann ich mir für die 4 Funktionalitäten (Insert, update,...) nicht 4 verschiedene Methoden in einem Servlet erstellen und dann 0815 mit if else oder switch case schauen, welche der 4 Methoden jetzt aufgerufen werden soll?

thx, falls sich jemand Zeit für die Fragen nimmt


----------



## Atze (26. Jan 2010)

Java.getSkill() hat gesagt.:


> Hallo,
> 
> Stellt euch vor, es gibt von einer index.jsp einen link ins admin.jsp, wo vorher user+pw gegen eine DB gecheckt werden.



Wer übernimmt denn die Autentifizierung? Machst du das selbst? Oder der Container (Tomcat)?



> Welche .jsp bzw. Servlet Dateien gibt es nun alles neben der admin.jsp?



ich würd sagen:

login.jsp

createUser.jsp
editUser.jsp (könnte man auch in die createUser einbauen, gibt aber wieder kuddelmuddel beim warten)
showUser.jsp (eine liste zum anzeigen und ggf. löschen)

createCar.jsp
editCar.jsp (könnte man auch in die createCar einbauen, gibt aber wieder kuddelmuddel beim warten)
showCars.jsp (eine liste zum anzeigen und ggf. löschen)

vielleicht eine eigene error.jsp für den ernstfall  die standard dinger sind so hässlich 

alle servlets würde ich nicht einzeln in die db schreiben lassen, falls du die db wechselst oder anpassungen vornimmst musst du das auch nur an einer stelle machen. hier sollte es funktionen geben, die args für die db entgegennehmen und wirklich nur schreiben und lesen, also deine beans füllen



> 1 Formularseite, 1 Beans, 1 Jsp um in Beans zu schreiben und 1 Servlet für SQL/DB


die formularseite wäre doch auch ne jsp, oder nicht? 



> 1) Sieht es für die 3 anderen Funktionalitäten auch so aus??


welche anderen 3?



> 2) Kann ich eine Beans für 3 verschiedene Formulare hernehmen, wenn die parameter die gleichen sind?
> Auto hat Name und Person hat auch Name.
> 3) Kann ich mir für die 4 Funktionalitäten (Insert, update,...) nicht 4 verschiedene Methoden in einem Servlet erstellen und dann 0815 mit if else oder switch case schauen, welche der 4 Methoden jetzt aufgerufen werden soll?



kann man schon, wenn es nur eine kleine anwendung ist / bleibt und da nichts geändert wird, was aber eher unwahrscheinlich ist. falls du jedoch an den autos was hinzufügst oder irgendwo anders was änderst, vermatscht du dir alles andere auch. also besser wäre es gleich für verschiedene aufgaben auch separate servlets zu nehmen, macht das warten und erweitern einfacher, auch wenns zuerst mehr arbeit bedeutet


----------



## Java.getSkill() (26. Jan 2010)

Die Identifizierung des Users(admins in dem Fall) übernehme ich, indem ich username+pw aus formular mit username+pw aus db vergleiche.

Bezüglich der Anzahl der Dateien, gibt also doch keinen einfachen anderen Weg. Für jede Aktion eine neue Seite.

Mit den 3 anderen Funktionalitäten meinte ich einfach update, create, delete, insert, etc  weil ich zur Zeit für jede dieser Aktionen eine ganz neue JSP bzw. Servlet habe.

Wie würde ich denn das machen, dass ich nur an einer Stelle den Treiber "lade" bzw Logindaten speichere und all die anderen JSPs und Servlets sich das immer von da holen?
Zur Zeit lade ich den Treiber, hole connection Objekt in jeder aufgerufenen jsp und servlet.

Wenn ich jetzt Formular A habe mit inputfields:
* Name
* Adresse
* email
* Ort

Formular B mit:
* Name
* Farbe
* Reifen
* Ort

und diese beiden Formulare werden vom User z.b. innerhalb von 1 Minute hintereinander ausgefüllt, kann ich da eine JavaBean mit

public class DataBean{
String name,adresse,farbe,email,reifen,ort;
}
erstellen?

Überschreibt nicht der Name von FormularB den Namen von FormularA?

Oder wirklich für 10 Formulare einfach 10 Beans ertellen?


----------



## Atze (26. Jan 2010)

Java.getSkill() hat gesagt.:


> Die Identifizierung des Users(admins in dem Fall) übernehme ich, indem ich username+pw aus formular mit username+pw aus db vergleiche.



ok, überprüfst du das auf jeder seite? bzw hast du die jsp im/unterhalb des web-inf ordners, damit sie von aussen nicht sind?
sonst kann ein böser user die seite einfach durch die url erreichen, bspw anwendung/deleteUser.jsp
das sollte nicht möglich sein!!!



> Bezüglich der Anzahl der Dateien, gibt also doch keinen einfachen anderen Weg. Für jede Aktion eine neue Seite.
> Mit den 3 anderen Funktionalitäten meinte ich einfach update, create, delete, insert, etc  weil ich zur Zeit für jede dieser Aktionen eine ganz neue JSP bzw. Servlet habe.



würd ich so machen, ja. sehe da auch keine andere möglichkeit außer rumgefrikel mit unterschiedlichen labels für die werte und fehlerträchtigen unterscheidungskrücken durch parameterübergaben und switch/case gefummel. ist nicht unbedingt schön



> Wie würde ich denn das machen, dass ich nur an einer Stelle den Treiber "lade" bzw Logindaten speichere und all die anderen JSPs und Servlets sich das immer von da holen?
> Zur Zeit lade ich den Treiber, hole connection Objekt in jeder aufgerufenen jsp und servlet.


den treiber könntest du auch beim start der anwendung laden und dann verfügbar machen, den musst du nicht immer neu laden. damit könntest du dir einen connectionpool anlegen und die bei bedarf eine der "globalen" connetions holen und in der session speichern, solaneg du sie brauchst



> Wenn ich jetzt Formular A habe mit inputfields:
> * Name
> * Adresse
> * email
> ...



du kannst ja nicht garantieren, dass der user nicht zwischen beiden formularen kacken geht, oder? außerdem hast du dafür doch eh unterschiedliche tabellen, oder? würd ich nochmal drüber nachdenken


----------

