Propojení javascriptu a servletu.
authorFrantišek Kučera <franta-hg@frantovo.cz>
Fri, 29 May 2009 00:13:11 +0200
changeset 121b10a6565e8c
parent 11 267cce6b9d77
child 13 96e711f3ef48
Propojení javascriptu a servletu.
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/Html.java
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Ajax.java
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Servlet.java
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Hlaska.java
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/HtmlObjekt.java
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/VysledekSQL.java
java/sql-vyuka/web/hlavni.js
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/Html.java	Fri May 29 00:13:11 2009 +0200
     1.3 @@ -0,0 +1,14 @@
     1.4 +package cz.frantovo.sql.vyuka;
     1.5 +
     1.6 +/**
     1.7 + *
     1.8 + * @author fiki
     1.9 + */
    1.10 +public class Html {
    1.11 +
    1.12 +    /** Escapuje HTML značky v textu. */
    1.13 +    public static String escapuj(String text) {
    1.14 +        /** TODO: dopsat! */
    1.15 +        return text;
    1.16 +    }
    1.17 +}
     2.1 --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Ajax.java	Thu May 28 23:12:19 2009 +0200
     2.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Ajax.java	Fri May 29 00:13:11 2009 +0200
     2.3 @@ -1,5 +1,9 @@
     2.4  package cz.frantovo.sql.vyuka.ajax;
     2.5  
     2.6 +import cz.frantovo.sql.vyuka.dto.Hlaska;
     2.7 +import cz.frantovo.sql.vyuka.dto.Hlaska.Typ;
     2.8 +import cz.frantovo.sql.vyuka.dto.VysledekSQL;
     2.9 +
    2.10  /**
    2.11   * Pomocník servletu. Vrací HTML části stránek.
    2.12   * @author fiki
    2.13 @@ -10,14 +14,27 @@
    2.14       * @return Historie SQL příkazů daného uživatele.
    2.15       */
    2.16      public String getHistorie(String idSezeni) {
    2.17 -        return "<p>historie (id=" + idSezeni + ")</p>";
    2.18 +        VysledekSQL v = new VysledekSQL();
    2.19 +        v.getHlasky().add(new Hlaska("Bude vypsána vaše historie", Typ.OK));
    2.20 +        v.getHlasky().add(new Hlaska("idSezení: " + idSezeni, Typ.OK));
    2.21 +        v.getHlasky().add(new Hlaska("Ale ještě to není hotové.", Typ.Varovani));
    2.22 +        v.getHlasky().add(new Hlaska("Což je asi chyba.", Typ.Chyba));
    2.23 +        v.getHlasky().add(new Hlaska("Stejně vám něco <a href=\"http://frantovo.cz/blog/\">doporučíme</a>.", Typ.Tip));
    2.24 +        return v.getHtml();
    2.25      }
    2.26  
    2.27      /**
    2.28       * Vykoná zadaný SQL příkaz v databázi.
    2.29       * @return Výsledek dotazu – tabulka, hláška nebo chyba.
    2.30       */
    2.31 -    public String geSQLVysledek(String sql) {
    2.32 -        return "<p>SQL dotaz (čeština): " + sql + "</p>";
    2.33 +    public String geSQLVysledek(String sql, String idSezeni) {
    2.34 +        VysledekSQL v = new VysledekSQL();
    2.35 +        v.getHlasky().add(new Hlaska("Bude vykonán SQL dotaz.", Typ.OK));
    2.36 +        v.getHlasky().add(new Hlaska("idSezení: " + idSezeni, Typ.OK));
    2.37 +        v.getHlasky().add(new Hlaska("SQL: " + sql, Typ.OK));
    2.38 +        v.getHlasky().add(new Hlaska("Ale ještě to není hotové.", Typ.Varovani));
    2.39 +        v.getHlasky().add(new Hlaska("Což je asi chyba.", Typ.Chyba));
    2.40 +        v.getHlasky().add(new Hlaska("Stejně vám něco <a href=\"http://frantovo.cz/blog/\">doporučíme</a>.", Typ.Tip));
    2.41 +        return v.getHtml();
    2.42      }
    2.43  }
     3.1 --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Servlet.java	Thu May 28 23:12:19 2009 +0200
     3.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Servlet.java	Fri May 29 00:13:11 2009 +0200
     3.3 @@ -35,13 +35,13 @@
     3.4       * @throws IOException if an I/O error occurs
     3.5       */
     3.6      protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     3.7 -        
     3.8 +
     3.9          /** Používáme pouze UTF-8 */
    3.10          response.setContentType("text/html;charset=UTF-8");
    3.11          request.setCharacterEncoding("UTF-8");
    3.12  
    3.13          PrintWriter out = response.getWriter();
    3.14 -        
    3.15 +
    3.16          try {
    3.17  
    3.18              akce parametrAkce = akce.chyba;
    3.19 @@ -51,15 +51,17 @@
    3.20                  /** Chyba nebo podvržený AJAXový požadavek → zobrazíme chybovou hlášku */
    3.21              }
    3.22  
    3.23 +
    3.24              Ajax a = new Ajax();
    3.25 +            String idSezeni = request.getRequestedSessionId();
    3.26  
    3.27  
    3.28              switch (parametrAkce) {
    3.29                  case vykonat:
    3.30 -                    out.println(a.geSQLVysledek(request.getParameter("sql")));
    3.31 +                    out.println(a.geSQLVysledek(request.getParameter("sql"), idSezeni));
    3.32                      break;
    3.33                  case historie:
    3.34 -                    out.println(a.geSQLVysledek(request.getRequestedSessionId()));
    3.35 +                    out.println(a.getHistorie(idSezeni));
    3.36                      break;
    3.37                  case test:
    3.38                      out.println("<p>AJAX jede!</p>");
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Hlaska.java	Fri May 29 00:13:11 2009 +0200
     4.3 @@ -0,0 +1,79 @@
     4.4 +package cz.frantovo.sql.vyuka.dto;
     4.5 +
     4.6 +import cz.frantovo.sql.vyuka.Html;
     4.7 +
     4.8 +/**
     4.9 + * Hláška úspěšného provedení.
    4.10 + * @author fiki
    4.11 + */
    4.12 +public class Hlaska implements HtmlObjekt {
    4.13 +
    4.14 +    private String text;
    4.15 +    private Typ typ;
    4.16 +    private boolean escapovat;
    4.17 +
    4.18 +    /**
    4.19 +     * SQL hláška
    4.20 +     * @param text text hlášky
    4.21 +     * @param typ ovlivňuje ikonku
    4.22 +     * @param escapovat zda máme escapovat text kvůli HTML značkám
    4.23 +     */
    4.24 +    public Hlaska(String text, Typ typ, boolean escapovat) {
    4.25 +        this.text = text;
    4.26 +        this.typ = typ;
    4.27 +        this.escapovat = escapovat;
    4.28 +    }
    4.29 +
    4.30 +    /**
    4.31 +     * SQL hláška
    4.32 +     * @param text text hlášky
    4.33 +     * @param typ ovlivňuje ikonku
    4.34 +     */
    4.35 +    public Hlaska(String text, Typ typ) {
    4.36 +        this.text = text;
    4.37 +        this.typ = typ;
    4.38 +        this.escapovat = true;
    4.39 +    }
    4.40 +
    4.41 +    public String getHtml() {
    4.42 +        String hodnota;
    4.43 +        if (isEscapovat()) {
    4.44 +            hodnota = Html.escapuj(text);
    4.45 +        } else {
    4.46 +            hodnota = text;
    4.47 +        }
    4.48 +        return "<p class=\"vysledek" + getTyp().name() + "\">" + hodnota + "</p>";
    4.49 +    }
    4.50 +
    4.51 +    public String getText() {
    4.52 +        return text;
    4.53 +    }
    4.54 +
    4.55 +    public void setText(String hodnota) {
    4.56 +        this.text = hodnota;
    4.57 +    }
    4.58 +
    4.59 +    public Typ getTyp() {
    4.60 +        return typ;
    4.61 +    }
    4.62 +
    4.63 +    public void setTyp(Typ typ) {
    4.64 +        this.typ = typ;
    4.65 +    }
    4.66 +
    4.67 +    public boolean isEscapovat() {
    4.68 +        return escapovat;
    4.69 +    }
    4.70 +
    4.71 +    public void setEscapovat(boolean escapovat) {
    4.72 +        this.escapovat = escapovat;
    4.73 +    }
    4.74 +
    4.75 +    public enum Typ {
    4.76 +
    4.77 +        OK,
    4.78 +        Tip,
    4.79 +        Varovani,
    4.80 +        Chyba
    4.81 +    }
    4.82 +}
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/HtmlObjekt.java	Fri May 29 00:13:11 2009 +0200
     5.3 @@ -0,0 +1,10 @@
     5.4 +package cz.frantovo.sql.vyuka.dto;
     5.5 +
     5.6 +/**
     5.7 + * HTML objekt.
     5.8 + * @author fiki
     5.9 + */
    5.10 +public interface HtmlObjekt {
    5.11 +
    5.12 +    public String getHtml();
    5.13 +}
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java	Fri May 29 00:13:11 2009 +0200
     6.3 @@ -0,0 +1,74 @@
     6.4 +package cz.frantovo.sql.vyuka.dto;
     6.5 +
     6.6 +import cz.frantovo.sql.vyuka.Html;
     6.7 +import java.util.ArrayList;
     6.8 +import java.util.Collection;
     6.9 +
    6.10 +/**
    6.11 + * Tabulka, která je výsledkem SQL dotazu.
    6.12 + * @author fiki
    6.13 + */
    6.14 +public class Tabulka implements HtmlObjekt {
    6.15 +
    6.16 +    private String[] zahlavi;
    6.17 +    private Collection<Object[]> hodnoty = new ArrayList<Object[]>();
    6.18 +
    6.19 +    public String getHtml() {
    6.20 +
    6.21 +        if (getZahlavi() == null || getHodnoty() == null || getZahlavi().length < 1) {
    6.22 +            return "<p>Chybná tabulka</p>";
    6.23 +        } else {
    6.24 +
    6.25 +            StringBuffer html = new StringBuffer();
    6.26 +
    6.27 +            html.append("<table>");
    6.28 +
    6.29 +
    6.30 +            html.append("<thead title=\"Chceš setřídit výsledek podle nějakého sloupce? Co takhle ORDER BY sloupec.\">");
    6.31 +            html.append("<tr>");
    6.32 +            for (String z : getZahlavi()) {
    6.33 +                html.append("<td>" + Html.escapuj(z) + "</td>");
    6.34 +            }
    6.35 +            html.append("</tr>");
    6.36 +            html.append("</thead>");
    6.37 +
    6.38 +
    6.39 +            html.append("<tbody>");
    6.40 +            for (Object[] hh : getHodnoty()) {
    6.41 +                for (Object h : hh) {
    6.42 +                    html.append(formatujRadek(h));
    6.43 +                }
    6.44 +            }
    6.45 +            html.append("</tbody>");
    6.46 +
    6.47 +            html.append("</table>");
    6.48 +
    6.49 +
    6.50 +            return html.toString();
    6.51 +        }
    6.52 +    }
    6.53 +
    6.54 +    private String formatujRadek(Object o) {
    6.55 +        if (o instanceof Integer) {
    6.56 +            return "<td class=\"cislo\">" + Html.escapuj(String.valueOf(o)) + "</td>";
    6.57 +        } else {
    6.58 +            return "<td>" + Html.escapuj(String.valueOf(o)) + "</td>";
    6.59 +        }
    6.60 +    }
    6.61 +
    6.62 +    public String[] getZahlavi() {
    6.63 +        return zahlavi;
    6.64 +    }
    6.65 +
    6.66 +    public void setZahlavi(String[] zahlavi) {
    6.67 +        this.zahlavi = zahlavi;
    6.68 +    }
    6.69 +
    6.70 +    public Collection<Object[]> getHodnoty() {
    6.71 +        return hodnoty;
    6.72 +    }
    6.73 +
    6.74 +    public void setHodnoty(Collection<Object[]> hodnoty) {
    6.75 +        this.hodnoty = hodnoty;
    6.76 +    }
    6.77 +}
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/VysledekSQL.java	Fri May 29 00:13:11 2009 +0200
     7.3 @@ -0,0 +1,36 @@
     7.4 +package cz.frantovo.sql.vyuka.dto;
     7.5 +
     7.6 +import java.util.ArrayList;
     7.7 +import java.util.Collection;
     7.8 +
     7.9 +/**
    7.10 + * Výsledek SQL dotazu
    7.11 + * @author fiki
    7.12 + */
    7.13 +public class VysledekSQL implements HtmlObjekt {
    7.14 +
    7.15 +    private Collection<Tabulka> tabulky = new ArrayList<Tabulka>();
    7.16 +    private Collection<Hlaska> hlasky = new ArrayList<Hlaska>();
    7.17 +
    7.18 +    public Collection<Tabulka> getTabulky() {
    7.19 +        return tabulky;
    7.20 +    }
    7.21 +
    7.22 +    public Collection<Hlaska> getHlasky() {
    7.23 +        return hlasky;
    7.24 +    }
    7.25 +
    7.26 +    public String getHtml() {
    7.27 +        StringBuffer html = new StringBuffer();
    7.28 +
    7.29 +        for (Tabulka t : tabulky) {
    7.30 +            html.append(t.getHtml());
    7.31 +        }
    7.32 +
    7.33 +        for (Hlaska h : hlasky) {
    7.34 +            html.append(h.getHtml());
    7.35 +        }
    7.36 +
    7.37 +        return html.toString();
    7.38 +    }
    7.39 +}
     8.1 --- a/java/sql-vyuka/web/hlavni.js	Thu May 28 23:12:19 2009 +0200
     8.2 +++ b/java/sql-vyuka/web/hlavni.js	Fri May 29 00:13:11 2009 +0200
     8.3 @@ -86,7 +86,7 @@
     8.4  /** Jednoduchá AJAXová funkce, načte obsah souboru a zobrazí ho ve výstupním okně. */
     8.5  function ajaxZobrazitHistorii() {
     8.6      if (ajax.readyState == 4 || ajax.readyState == 0) {
     8.7 -        ajax.open("POST", 'historie.html', true);
     8.8 +        ajax.open("POST", 'ajax?akce=historie', true);
     8.9          ajax.onreadystatechange = zobrazitHistoriiVypis;
    8.10          ajax.send(null);
    8.11      }