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 11:267cce6b9d77)
@@ -0,0 +1,23 @@
+package cz.frantovo.sql.vyuka.ajax;
+
+/**
+ * Pomocník servletu. Vrací HTML části stránek.
+ * @author fiki
+ */
+public class Ajax {
+
+    /**
+     * @return Historie SQL příkazů daného uživatele.
+     */
+    public String getHistorie(String idSezeni) {
+        return "<p>historie (id=" + idSezeni + ")</p>";
+    }
+
+    /**
+     * Vykoná zadaný SQL příkaz v databázi.
+     * @return Výsledek dotazu – tabulka, hláška nebo chyba.
+     */
+    public String geSQLVysledek(String sql) {
+        return "<p>SQL dotaz (čeština): " + sql + "</p>";
+    }
+}
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 11:267cce6b9d77)
@@ -0,0 +1,120 @@
+package cz.frantovo.sql.vyuka.ajax;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Servlet pro vyřizování AJAXových požadavků.
+ * @author fiki
+ */
+public class Servlet extends HttpServlet {
+
+    private static final long serialVersionUID = 9102108273105288056L;
+
+    private enum akce {
+
+        /** Provede SQL dotaz. */
+        vykonat,
+        /** Vypíše historii SQL příkazů daného uživatele. */
+        historie,
+        /** Vypíše nějaké nepotřebné informace. */
+        test,
+        /** Pokud je požadovaná akce nesmysl. */
+        chyba
+    }
+
+    /** 
+     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
+     * @param request servlet request
+     * @param response servlet response
+     * @throws ServletException if a servlet-specific error occurs
+     * @throws IOException if an I/O error occurs
+     */
+    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        
+        /** Používáme pouze UTF-8 */
+        response.setContentType("text/html;charset=UTF-8");
+        request.setCharacterEncoding("UTF-8");
+
+        PrintWriter out = response.getWriter();
+        
+        try {
+
+            akce parametrAkce = akce.chyba;
+            try {
+                parametrAkce = akce.valueOf(request.getParameter("akce"));
+            } catch (Exception e) {
+                /** Chyba nebo podvržený AJAXový požadavek → zobrazíme chybovou hlášku */
+            }
+
+            Ajax a = new Ajax();
+
+
+            switch (parametrAkce) {
+                case vykonat:
+                    out.println(a.geSQLVysledek(request.getParameter("sql")));
+                    break;
+                case historie:
+                    out.println(a.geSQLVysledek(request.getRequestedSessionId()));
+                    break;
+                case test:
+                    out.println("<p>AJAX jede!</p>");
+                    out.println("<ol>");
+                    out.println("<li>Metoda: " + request.getMethod() + "</li>");
+                    out.println("<li>Host: " + request.getRemoteHost() + "</li>");
+                    out.println("<li>Adresa: " + request.getRemoteAddr() + "</li>");
+                    out.println("<li>Akce: " + request.getParameter("akce") + "</li>");
+                    out.println("<li>SQL: " + request.getParameter("sql") + "</li>");
+                    out.println("<li>Sezení: " + request.getRequestedSessionId() + "</li>");
+                    out.println("<li>URL: " + request.getRequestURL().toString() + "</li>");
+                    out.println("</ol>");
+                    break;
+                case chyba:
+                    out.println("<p>chyba</p>");
+                    break;
+            }
+        } finally {
+            out.close();
+        }
+    }
+
+    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
+    /** 
+     * Handles the HTTP <code>GET</code> method.
+     * @param request servlet request
+     * @param response servlet response
+     * @throws ServletException if a servlet-specific error occurs
+     * @throws IOException if an I/O error occurs
+     */
+    @Override
+    protected void doGet(HttpServletRequest request, HttpServletResponse response)
+            throws ServletException, IOException {
+        processRequest(request, response);
+    }
+
+    /** 
+     * Handles the HTTP <code>POST</code> method.
+     * @param request servlet request
+     * @param response servlet response
+     * @throws ServletException if a servlet-specific error occurs
+     * @throws IOException if an I/O error occurs
+     */
+    @Override
+    protected void doPost(HttpServletRequest request, HttpServletResponse response)
+            throws ServletException, IOException {
+        processRequest(request, response);
+    }
+
+    /** 
+     * Returns a short description of the servlet.
+     * @return a String containing servlet description
+     */
+    @Override
+    public String getServletInfo() {
+        return "Servlet pro zpracování AJAXových požadavků.";
+    }// </editor-fold>
+}
Index: java/sql-vyuka/web/WEB-INF/casti/aplikace.jspx
===================================================================
--- java/sql-vyuka/web/WEB-INF/casti/aplikace.jspx	(revision 10:5d6592e753c0)
+++ java/sql-vyuka/web/WEB-INF/casti/aplikace.jspx	(revision 11:267cce6b9d77)
@@ -22,7 +22,7 @@
                 <h2><fmt:message key="blok.zadavani"/></h2>
                 <div class="vnitrekBloku">
-                    <form action="#">
+                    <form action="#" name="aplikace">
                         <fieldset>
-                            <textarea id="vstupniPole" rows="100" cols="1000"><fmt:message key="vychozi.sql"/></textarea>
+                            <textarea id="vstupniPole" name="vstupniPole" rows="100" cols="1000"><fmt:message key="vychozi.sql"/></textarea>
                             <button class="zobrazitHistorii"
                                     name="zobrazitHistorii"
Index: java/sql-vyuka/web/WEB-INF/web.xml
===================================================================
--- java/sql-vyuka/web/WEB-INF/web.xml	(revision 8:4795d9bf6827)
+++ java/sql-vyuka/web/WEB-INF/web.xml	(revision 11:267cce6b9d77)
@@ -1,4 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+    <servlet>
+        <servlet-name>Servlet</servlet-name>
+        <servlet-class>cz.frantovo.sql.vyuka.ajax.Servlet</servlet-class>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>Servlet</servlet-name>
+        <url-pattern>/ajax</url-pattern>
+    </servlet-mapping>
     <session-config>
         <session-timeout>
@@ -8,4 +16,4 @@
     <welcome-file-list>
         <welcome-file>index.jsp</welcome-file>
-        </welcome-file-list>
-    </web-app>
+    </welcome-file-list>
+</web-app>
Index: java/sql-vyuka/web/hlavni.js
===================================================================
--- java/sql-vyuka/web/hlavni.js	(revision 10:5d6592e753c0)
+++ java/sql-vyuka/web/hlavni.js	(revision 11:267cce6b9d77)
@@ -28,5 +28,5 @@
  **/
 function getSQL() {
-    return document.getElementById(vstupniPole).innerHTML;
+    return document.aplikace.vstupniPole.value;
 }
 
@@ -68,5 +68,5 @@
 function ajaxVykonatSQL() {
     if (ajax.readyState == 4 || ajax.readyState == 0) {
-        ajax.open("GET", 'vysledek.html', true);
+        ajax.open("POST", 'ajax?akce=vykonat&sql=' + encodeURIComponent(getSQL()), true);
         ajax.onreadystatechange = vykonatSQLVypis;
         ajax.send(null);
@@ -87,5 +87,5 @@
 function ajaxZobrazitHistorii() {
     if (ajax.readyState == 4 || ajax.readyState == 0) {
-        ajax.open("GET", 'historie.html', true);
+        ajax.open("POST", 'historie.html', true);
         ajax.onreadystatechange = zobrazitHistoriiVypis;
         ajax.send(null);
