# Design-Frage: JSP, Servlets und CSS



## miggel13 (9. Jun 2010)

Hallo und guten Abend, 
da ich mich derzeit mit Servlets und JSP beschäftige bin ich auf folgende Frage gestoßen: 

Wie "designe" ich meinen Code in Bezug auf CSS-Style-Definitionen und eben Java Server Pages? Was ich z. B. vermeiden möchte wäre, dass ich bei jedem Seiten-Reload auch die Navigationsleisten mit laden müsste! Dies erledigte ich früher mit PHP - include .... - dies jedoch nur als Beispiel: mir geht es eigentlich mehr um das generelle Design wie so etwas gemacht wird ...


Kann von euch jemand vielleicht die Frage aus aktuellen Beispiel-Projekten beantworten bzw. kennt jemand ein gutes HowTo/Artikel/..., mit dessen man sich über das grundlegende Design informieren kann?

Gruß
miggel13


----------



## Antoras (10. Jun 2010)

miggel13 hat gesagt.:


> Hallo und guten Abend, Was ich z. B. vermeiden möchte wäre, dass ich bei jedem Seiten-Reload auch die Navigationsleisten mit laden müsste! Dies erledigte ich früher mit PHP - include


Hä? Mit der include-Anweisung von PHP lädst du den Content doch auch nach. Willst du, dass nur ein bestimmter Teil einer bereits im Browser angezeigten Website nachgeladen wird oder, dass du, so wie in PHP, die einzelnen Teilseiten komfortabel miteinander verbinden kannst?
Für ersteres ist Ajax für dich interessant, für letzteres eine Template Engine wie die JSTL.


----------



## miggel13 (10. Jun 2010)

Ja zugegeben, hab mich etwas scheiße ausgedrückt ... 
Ja eigentlich möchte ich, dass nur ein bestimmter Teil nachgeladen wird (ich klick auf einen Link in der Menü-Leiste und dann lädt der Inhalts-DIV eben den neuen Inhalt) 
-> Hauptaugenmerk ist jedoch folgendes: ich möchte den Code für eine Navigationsleiste einfach nicht in 100 JSP-Seiten manuell einfügen (ändert sich was, dann ist dies ein haufen aufwand...). Deshalb würde mich das generelle "Code-Layout" interessieren!


----------



## homer65 (10. Jun 2010)

Bei JSP gibt es auch einen include Befehl


----------



## miggel13 (10. Jun 2010)

OK. Und wie sieht es in der Praxis aus? Ist es üblich mit include-Tags zu arbeiten oder gibt es da noch bessere "Design-Frameworks". 
Ich bin einfach ein Servlet-Newbie und versuche einfach von Beginn an "sauber" zu arbeiten ...


----------



## homer65 (10. Jun 2010)

Ich persönlich benutze für die Navgationsleiste den include Befehl.
Was andere tun bzw was üblich ist, kann ich dir leider nicht sagen.


----------



## miggel13 (10. Jun 2010)

Alles klar damit ist mir auf jeden Fall schon mal geholfen. DANKE
Sie kennen nicht zufällig ein kleines Dokument, wo man sich so etwas "abkucken" kann (Beispielcode oder Tutorial...)?


----------



## homer65 (10. Jun 2010)

Hier mal ein Beispiel JSP. Dort ist navigation.html Die Navigationsleiste.

```
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ page pageEncoding="ISO-8859-1"%>
<%@ page import="java.sql.*,common.*" %>
<%@ include file="connect.jsp" %>
<%@ include file="checklogin.jsp" %>
<html>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="my.css" rel="stylesheet" type="text/css" />
<body>
<%@ include file="kopf.jsp" %>
<%@ include file="navigation.html" %>
<%
 if (hlogin)
 {
  out.println("<form method=\"post\" action=\"addadrx.jsp\">");
  out.println("<table>");
  out.println("<tr><td>Vorname</td><td><input name=\"vorname\" size=\"100\"></td></tr>");
  out.println("<tr><td>Name</td><td><input name=\"name\" size=\"100\"></td></tr>");
  out.println("<tr><td>Stra&szlig;e</td><td><input name=\"strasse\" size=\"100\"></td></tr>");
  out.println("<tr><td>Hausnummer</td><td><input name=\"hausnummer\" size=\"100\"></td></tr>");
  out.println("<tr><td>Plz</td><td><input name=\"plz\" size=\"100\"></td></tr>");
  out.println("<tr><td>Ort</td><td><input name=\"ort\" size=\"100\"></td></tr>");
  out.println("<tr><td>Telefon</td><td><input name=\"telefon\" size=\"100\"></td></tr>");
  out.println("<tr><td>EMail</td><td><input name=\"email\" size=\"100\"></td></tr>");
  out.println("<tr><td>Bemerkung</td><td><input name=\"bemerkung\" size=\"100\"></td></tr>");
  out.println("<tr><td><input type=\"submit\" value=\"add\"></td></tr>");
  out.println("</table>");
  out.println("</form>");
 }
%>
</body>
</html>
```


----------



## miggel13 (10. Jun 2010)

heeeeyyy Klasse. 

vielen Dank


----------



## ARadauer (10. Jun 2010)

mhn...

```
<%
 if (hlogin)
 {
  out.println("<form method=\"post\" action=\"addadrx.jsp\">");
  usw...
  out.println("</form>");
 }
%>
```

warum nicht....

```
<%
 if (hlogin)
 {
%>
  <form method="post" action="addadrx.jsp">
  usw...
  </form>
<%
 }
%>
```

dann kanst dir die  out.println und das escapen der " sparen...


----------



## Antoras (10. Jun 2010)

> Ja eigentlich möchte ich, dass nur ein bestimmter Teil nachgeladen wird (ich klick auf einen Link in der Menü-Leiste und dann lädt der Inhalts-DIV eben den neuen Inhalt)


Das Nachladen von Inhalten auf dem Server und auf dem Client sind zwei komplett unterschiedlichen Sachen. Für den Server reichen die include-Anweisungen, für den Client benötigst du Ajax, was sehr aufwendig ist (im Verglich zu einem kompletten Neuladen der Website). Im übrigen wird eine Website beim Client ohne Ajax jedes Mal komplett neu geladen, ob du willst oder nicht. Wie das dann auf dem Server funktioniert ist dann was anderes.



> Ich bin einfach ein Servlet-Newbie und versuche einfach von Beginn an "sauber" zu arbeiten ...


Dann benutz gleich eine Template Engine wie z.B. die JSTL und nicht den Skriptlet-Müll (Java Code in HTML):

```
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<c:import url="${navigationsleiste}" />
...
<c:if test="${hlogin}">
  <form method="post" action="addadrx">
  usw...
  </form>
</c:if>
```


```
public class MyServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    if (isLoggedIn()) {
      req.setAttribute("hlogin", true);
    }
    req.setAttribute("navigationsleiste", "/navigationsleiste.jsp");
    RequestDispatcher r = req.getRequestDispatcher("/template.jsp");
    r.include(req, resp);
  }
}
```


----------



## miggel13 (10. Jun 2010)

OK - aufgrund der letzten Antwort muss ich jetzt doch meinen Beitrag ändern. 

@Antoras
Ok Stimmt! Aufgrund einer Falschinformation seitens unseres Lehrers habe ich nun auch bemerkt, dass beim PHP-Include die komplette Seite vom Server geladen wird (wobei ja eig. diverses zeug dann bereits im Cache vorliegen sollte - eben je nach Einstellung...)


----------

