Index: java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/Html.java
===================================================================
--- java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/Html.java	(revision 12:1b10a6565e8c)
+++ java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/Html.java	(revision 12:1b10a6565e8c)
@@ -0,0 +1,14 @@
+package cz.frantovo.sql.vyuka;
+
+/**
+ *
+ * @author fiki
+ */
+public class Html {
+
+    /** Escapuje HTML značky v textu. */
+    public static String escapuj(String text) {
+        /** TODO: dopsat! */
+        return text;
+    }
+}
Index: java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Ajax.java
===================================================================
--- java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Ajax.java	(revision 11:267cce6b9d77)
+++ java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Ajax.java	(revision 12:1b10a6565e8c)
@@ -1,3 +1,7 @@
 package cz.frantovo.sql.vyuka.ajax;
+
+import cz.frantovo.sql.vyuka.dto.Hlaska;
+import cz.frantovo.sql.vyuka.dto.Hlaska.Typ;
+import cz.frantovo.sql.vyuka.dto.VysledekSQL;
 
 /**
@@ -11,5 +15,11 @@
      */
     public String getHistorie(String idSezeni) {
-        return "<p>historie (id=" + idSezeni + ")</p>";
+        VysledekSQL v = new VysledekSQL();
+        v.getHlasky().add(new Hlaska("Bude vypsána vaše historie", Typ.OK));
+        v.getHlasky().add(new Hlaska("idSezení: " + idSezeni, Typ.OK));
+        v.getHlasky().add(new Hlaska("Ale ještě to není hotové.", Typ.Varovani));
+        v.getHlasky().add(new Hlaska("Což je asi chyba.", Typ.Chyba));
+        v.getHlasky().add(new Hlaska("Stejně vám něco <a href=\"http://frantovo.cz/blog/\">doporučíme</a>.", Typ.Tip));
+        return v.getHtml();
     }
 
@@ -18,6 +28,13 @@
      * @return Výsledek dotazu – tabulka, hláška nebo chyba.
      */
-    public String geSQLVysledek(String sql) {
-        return "<p>SQL dotaz (čeština): " + sql + "</p>";
+    public String geSQLVysledek(String sql, String idSezeni) {
+        VysledekSQL v = new VysledekSQL();
+        v.getHlasky().add(new Hlaska("Bude vykonán SQL dotaz.", Typ.OK));
+        v.getHlasky().add(new Hlaska("idSezení: " + idSezeni, Typ.OK));
+        v.getHlasky().add(new Hlaska("SQL: " + sql, Typ.OK));
+        v.getHlasky().add(new Hlaska("Ale ještě to není hotové.", Typ.Varovani));
+        v.getHlasky().add(new Hlaska("Což je asi chyba.", Typ.Chyba));
+        v.getHlasky().add(new Hlaska("Stejně vám něco <a href=\"http://frantovo.cz/blog/\">doporučíme</a>.", Typ.Tip));
+        return v.getHtml();
     }
 }
Index: java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Servlet.java
===================================================================
--- java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Servlet.java	(revision 11:267cce6b9d77)
+++ java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Servlet.java	(revision 12:1b10a6565e8c)
@@ -36,5 +36,5 @@
      */
     protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        
+
         /** Používáme pouze UTF-8 */
         response.setContentType("text/html;charset=UTF-8");
@@ -42,5 +42,5 @@
 
         PrintWriter out = response.getWriter();
-        
+
         try {
 
@@ -52,13 +52,15 @@
             }
 
+
             Ajax a = new Ajax();
+            String idSezeni = request.getRequestedSessionId();
 
 
             switch (parametrAkce) {
                 case vykonat:
-                    out.println(a.geSQLVysledek(request.getParameter("sql")));
+                    out.println(a.geSQLVysledek(request.getParameter("sql"), idSezeni));
                     break;
                 case historie:
-                    out.println(a.geSQLVysledek(request.getRequestedSessionId()));
+                    out.println(a.getHistorie(idSezeni));
                     break;
                 case test:
Index: java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Hlaska.java
===================================================================
--- java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Hlaska.java	(revision 12:1b10a6565e8c)
+++ java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Hlaska.java	(revision 12:1b10a6565e8c)
@@ -0,0 +1,79 @@
+package cz.frantovo.sql.vyuka.dto;
+
+import cz.frantovo.sql.vyuka.Html;
+
+/**
+ * Hláška úspěšného provedení.
+ * @author fiki
+ */
+public class Hlaska implements HtmlObjekt {
+
+    private String text;
+    private Typ typ;
+    private boolean escapovat;
+
+    /**
+     * SQL hláška
+     * @param text text hlášky
+     * @param typ ovlivňuje ikonku
+     * @param escapovat zda máme escapovat text kvůli HTML značkám
+     */
+    public Hlaska(String text, Typ typ, boolean escapovat) {
+        this.text = text;
+        this.typ = typ;
+        this.escapovat = escapovat;
+    }
+
+    /**
+     * SQL hláška
+     * @param text text hlášky
+     * @param typ ovlivňuje ikonku
+     */
+    public Hlaska(String text, Typ typ) {
+        this.text = text;
+        this.typ = typ;
+        this.escapovat = true;
+    }
+
+    public String getHtml() {
+        String hodnota;
+        if (isEscapovat()) {
+            hodnota = Html.escapuj(text);
+        } else {
+            hodnota = text;
+        }
+        return "<p class=\"vysledek" + getTyp().name() + "\">" + hodnota + "</p>";
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String hodnota) {
+        this.text = hodnota;
+    }
+
+    public Typ getTyp() {
+        return typ;
+    }
+
+    public void setTyp(Typ typ) {
+        this.typ = typ;
+    }
+
+    public boolean isEscapovat() {
+        return escapovat;
+    }
+
+    public void setEscapovat(boolean escapovat) {
+        this.escapovat = escapovat;
+    }
+
+    public enum Typ {
+
+        OK,
+        Tip,
+        Varovani,
+        Chyba
+    }
+}
Index: java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/HtmlObjekt.java
===================================================================
--- java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/HtmlObjekt.java	(revision 12:1b10a6565e8c)
+++ java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/HtmlObjekt.java	(revision 12:1b10a6565e8c)
@@ -0,0 +1,10 @@
+package cz.frantovo.sql.vyuka.dto;
+
+/**
+ * HTML objekt.
+ * @author fiki
+ */
+public interface HtmlObjekt {
+
+    public String getHtml();
+}
Index: java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java
===================================================================
--- java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java	(revision 12:1b10a6565e8c)
+++ java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java	(revision 12:1b10a6565e8c)
@@ -0,0 +1,74 @@
+package cz.frantovo.sql.vyuka.dto;
+
+import cz.frantovo.sql.vyuka.Html;
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * Tabulka, která je výsledkem SQL dotazu.
+ * @author fiki
+ */
+public class Tabulka implements HtmlObjekt {
+
+    private String[] zahlavi;
+    private Collection<Object[]> hodnoty = new ArrayList<Object[]>();
+
+    public String getHtml() {
+
+        if (getZahlavi() == null || getHodnoty() == null || getZahlavi().length < 1) {
+            return "<p>Chybná tabulka</p>";
+        } else {
+
+            StringBuffer html = new StringBuffer();
+
+            html.append("<table>");
+
+
+            html.append("<thead title=\"Chceš setřídit výsledek podle nějakého sloupce? Co takhle ORDER BY sloupec.\">");
+            html.append("<tr>");
+            for (String z : getZahlavi()) {
+                html.append("<td>" + Html.escapuj(z) + "</td>");
+            }
+            html.append("</tr>");
+            html.append("</thead>");
+
+
+            html.append("<tbody>");
+            for (Object[] hh : getHodnoty()) {
+                for (Object h : hh) {
+                    html.append(formatujRadek(h));
+                }
+            }
+            html.append("</tbody>");
+
+            html.append("</table>");
+
+
+            return html.toString();
+        }
+    }
+
+    private String formatujRadek(Object o) {
+        if (o instanceof Integer) {
+            return "<td class=\"cislo\">" + Html.escapuj(String.valueOf(o)) + "</td>";
+        } else {
+            return "<td>" + Html.escapuj(String.valueOf(o)) + "</td>";
+        }
+    }
+
+    public String[] getZahlavi() {
+        return zahlavi;
+    }
+
+    public void setZahlavi(String[] zahlavi) {
+        this.zahlavi = zahlavi;
+    }
+
+    public Collection<Object[]> getHodnoty() {
+        return hodnoty;
+    }
+
+    public void setHodnoty(Collection<Object[]> hodnoty) {
+        this.hodnoty = hodnoty;
+    }
+}
Index: java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/VysledekSQL.java
===================================================================
--- java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/VysledekSQL.java	(revision 12:1b10a6565e8c)
+++ java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/VysledekSQL.java	(revision 12:1b10a6565e8c)
@@ -0,0 +1,36 @@
+package cz.frantovo.sql.vyuka.dto;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * Výsledek SQL dotazu
+ * @author fiki
+ */
+public class VysledekSQL implements HtmlObjekt {
+
+    private Collection<Tabulka> tabulky = new ArrayList<Tabulka>();
+    private Collection<Hlaska> hlasky = new ArrayList<Hlaska>();
+
+    public Collection<Tabulka> getTabulky() {
+        return tabulky;
+    }
+
+    public Collection<Hlaska> getHlasky() {
+        return hlasky;
+    }
+
+    public String getHtml() {
+        StringBuffer html = new StringBuffer();
+
+        for (Tabulka t : tabulky) {
+            html.append(t.getHtml());
+        }
+
+        for (Hlaska h : hlasky) {
+            html.append(h.getHtml());
+        }
+
+        return html.toString();
+    }
+}
Index: java/sql-vyuka/web/hlavni.js
===================================================================
--- java/sql-vyuka/web/hlavni.js	(revision 11:267cce6b9d77)
+++ java/sql-vyuka/web/hlavni.js	(revision 12:1b10a6565e8c)
@@ -87,5 +87,5 @@
 function ajaxZobrazitHistorii() {
     if (ajax.readyState == 4 || ajax.readyState == 0) {
-        ajax.open("POST", 'historie.html', true);
+        ajax.open("POST", 'ajax?akce=historie', true);
         ajax.onreadystatechange = zobrazitHistoriiVypis;
         ajax.send(null);
