Přechod ze servletu na JSP – zbavení se servletu a HTML uvnitř javového kódu.
authorFrantišek Kučera <franta-hg@frantovo.cz>
Sun, 31 May 2009 17:53:15 +0200
changeset 2597bb16063d9e
parent 24 dceaaefb1946
child 26 5844d64930de
Přechod ze servletu na JSP – zbavení se servletu a HTML uvnitř javového kódu.
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/src/java/cz/frantovo/sql/vyuka/web/Ajax.java
     1.1 --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/Html.java	Sun May 31 17:46:11 2009 +0200
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,14 +0,0 @@
     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	Sun May 31 17:46:11 2009 +0200
     2.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.3 @@ -1,32 +0,0 @@
     2.4 -package cz.frantovo.sql.vyuka.ajax;
     2.5 -
     2.6 -import cz.frantovo.sql.vyuka.dao.HistorieDAO;
     2.7 -import cz.frantovo.sql.vyuka.dao.PiskovisteDAO;
     2.8 -import cz.frantovo.sql.vyuka.dto.Uzivatel;
     2.9 -import cz.frantovo.sql.vyuka.dto.VysledekSQL;
    2.10 -
    2.11 -/**
    2.12 - * Pomocník servletu. Vrací HTML části stránek.
    2.13 - * @author fiki
    2.14 - */
    2.15 -public class Ajax {
    2.16 -
    2.17 -    /**
    2.18 -     * @return Historie SQL příkazů daného uživatele.
    2.19 -     */
    2.20 -    public String getHistorie(Uzivatel uzivatel) {
    2.21 -        HistorieDAO h = new HistorieDAO();
    2.22 -        VysledekSQL v = h.nactiHistorii(uzivatel);
    2.23 -        return v.getHtml();
    2.24 -    }
    2.25 -
    2.26 -    /**
    2.27 -     * Vykoná zadaný SQL příkaz v databázi.
    2.28 -     * @return Výsledek dotazu – tabulka, hláška nebo chyba.
    2.29 -     */
    2.30 -    public String geSQLVysledek(String sql, Uzivatel uzivatel) {
    2.31 -        PiskovisteDAO p = new PiskovisteDAO();
    2.32 -        VysledekSQL v = p.vykonejSQL(sql, uzivatel);
    2.33 -        return v.getHtml();
    2.34 -    }
    2.35 -}
     3.1 --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Servlet.java	Sun May 31 17:46:11 2009 +0200
     3.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.3 @@ -1,128 +0,0 @@
     3.4 -package cz.frantovo.sql.vyuka.ajax;
     3.5 -
     3.6 -import cz.frantovo.sql.vyuka.dto.Uzivatel;
     3.7 -import java.io.IOException;
     3.8 -import java.io.PrintWriter;
     3.9 -import javax.servlet.ServletException;
    3.10 -import javax.servlet.http.HttpServlet;
    3.11 -import javax.servlet.http.HttpServletRequest;
    3.12 -import javax.servlet.http.HttpServletResponse;
    3.13 -
    3.14 -/**
    3.15 - * Servlet pro vyřizování AJAXových požadavků.
    3.16 - * @author fiki
    3.17 - */
    3.18 -public class Servlet extends HttpServlet {
    3.19 -
    3.20 -    private static final long serialVersionUID = 9102108273105288056L;
    3.21 -
    3.22 -    private enum akce {
    3.23 -
    3.24 -        /** Provede SQL dotaz. */
    3.25 -        vykonat,
    3.26 -        /** Vypíše historii SQL příkazů daného uživatele. */
    3.27 -        historie,
    3.28 -        /** Nápověda – průvodce */
    3.29 -        napoveda,
    3.30 -        /** Vypíše nějaké nepotřebné informace. */
    3.31 -        test,
    3.32 -        /** Pokud je požadovaná akce nesmysl. */
    3.33 -        chyba
    3.34 -    }
    3.35 -
    3.36 -    /** 
    3.37 -     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
    3.38 -     * @param request servlet request
    3.39 -     * @param response servlet response
    3.40 -     * @throws ServletException if a servlet-specific error occurs
    3.41 -     * @throws IOException if an I/O error occurs
    3.42 -     */
    3.43 -    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    3.44 -
    3.45 -        /** Používáme pouze UTF-8 */
    3.46 -        response.setContentType("text/html;charset=UTF-8");
    3.47 -        request.setCharacterEncoding("UTF-8");
    3.48 -
    3.49 -        PrintWriter out = response.getWriter();
    3.50 -
    3.51 -        try {
    3.52 -
    3.53 -            akce parametrAkce = akce.chyba;
    3.54 -            try {
    3.55 -                parametrAkce = akce.valueOf(request.getParameter("akce"));
    3.56 -            } catch (Exception e) {
    3.57 -                /** Chyba nebo podvržený AJAXový požadavek → zobrazíme chybovou hlášku */
    3.58 -            }
    3.59 -
    3.60 -
    3.61 -            Ajax a = new Ajax();
    3.62 -
    3.63 -            Uzivatel uzivatel = new Uzivatel(request.getRequestedSessionId(), request.getRemoteAddr());
    3.64 -
    3.65 -            switch (parametrAkce) {
    3.66 -                case vykonat:
    3.67 -                    out.println(a.geSQLVysledek(request.getParameter("sql"), uzivatel));
    3.68 -                    break;
    3.69 -                case historie:
    3.70 -                    out.println(a.getHistorie(uzivatel));
    3.71 -                    break;
    3.72 -                case napoveda:
    3.73 -                    out.println("<p>Nápověda bude…</p>");
    3.74 -                    break;
    3.75 -                case test:
    3.76 -                    out.println("<p>AJAX jede!</p>");
    3.77 -                    out.println("<ol>");
    3.78 -                    out.println("<li>Metoda: " + request.getMethod() + "</li>");
    3.79 -                    out.println("<li>Host: " + request.getRemoteHost() + "</li>");
    3.80 -                    out.println("<li>Adresa: " + request.getRemoteAddr() + "</li>");
    3.81 -                    out.println("<li>Akce: " + request.getParameter("akce") + "</li>");
    3.82 -                    out.println("<li>SQL: " + request.getParameter("sql") + "</li>");
    3.83 -                    out.println("<li>Sezení: " + request.getRequestedSessionId() + "</li>");
    3.84 -                    out.println("<li>URL: " + request.getRequestURL().toString() + "</li>");
    3.85 -                    out.println("</ol>");
    3.86 -                    break;
    3.87 -                case chyba:
    3.88 -                    out.println("<p>chyba</p>");
    3.89 -                    break;
    3.90 -            }
    3.91 -        } finally {
    3.92 -            out.close();
    3.93 -        }
    3.94 -    }
    3.95 -
    3.96 -    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    3.97 -    /** 
    3.98 -     * Handles the HTTP <code>GET</code> method.
    3.99 -     * @param request servlet request
   3.100 -     * @param response servlet response
   3.101 -     * @throws ServletException if a servlet-specific error occurs
   3.102 -     * @throws IOException if an I/O error occurs
   3.103 -     */
   3.104 -    @Override
   3.105 -    protected void doGet(HttpServletRequest request, HttpServletResponse response)
   3.106 -            throws ServletException, IOException {
   3.107 -        processRequest(request, response);
   3.108 -    }
   3.109 -
   3.110 -    /** 
   3.111 -     * Handles the HTTP <code>POST</code> method.
   3.112 -     * @param request servlet request
   3.113 -     * @param response servlet response
   3.114 -     * @throws ServletException if a servlet-specific error occurs
   3.115 -     * @throws IOException if an I/O error occurs
   3.116 -     */
   3.117 -    @Override
   3.118 -    protected void doPost(HttpServletRequest request, HttpServletResponse response)
   3.119 -            throws ServletException, IOException {
   3.120 -        processRequest(request, response);
   3.121 -    }
   3.122 -
   3.123 -    /** 
   3.124 -     * Returns a short description of the servlet.
   3.125 -     * @return a String containing servlet description
   3.126 -     */
   3.127 -    @Override
   3.128 -    public String getServletInfo() {
   3.129 -        return "Servlet pro zpracování AJAXových požadavků.";
   3.130 -    }// </editor-fold>
   3.131 -}
     4.1 --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Hlaska.java	Sun May 31 17:46:11 2009 +0200
     4.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Hlaska.java	Sun May 31 17:53:15 2009 +0200
     4.3 @@ -1,13 +1,18 @@
     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 +public class Hlaska {
    4.14  
    4.15 +    public enum Typ {
    4.16 +
    4.17 +        OK,
    4.18 +        Tip,
    4.19 +        Varovani,
    4.20 +        Chyba
    4.21 +    }
    4.22      private String text;
    4.23      private Typ typ;
    4.24      private boolean escapovat = true;
    4.25 @@ -35,16 +40,6 @@
    4.26          this.escapovat = true;
    4.27      }
    4.28  
    4.29 -    public String getHtml() {
    4.30 -        String hodnota;
    4.31 -        if (isEscapovat()) {
    4.32 -            hodnota = Html.escapuj(text);
    4.33 -        } else {
    4.34 -            hodnota = text;
    4.35 -        }
    4.36 -        return "<p class=\"vysledek" + getTyp().name() + "\">" + hodnota + "</p>";
    4.37 -    }
    4.38 -
    4.39      public String getText() {
    4.40          return text;
    4.41      }
    4.42 @@ -68,12 +63,4 @@
    4.43      public void setEscapovat(boolean escapovat) {
    4.44          this.escapovat = escapovat;
    4.45      }
    4.46 -
    4.47 -    public enum Typ {
    4.48 -
    4.49 -        OK,
    4.50 -        Tip,
    4.51 -        Varovani,
    4.52 -        Chyba
    4.53 -    }
    4.54  }
     5.1 --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/HtmlObjekt.java	Sun May 31 17:46:11 2009 +0200
     5.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.3 @@ -1,10 +0,0 @@
     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 --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java	Sun May 31 17:46:11 2009 +0200
     6.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java	Sun May 31 17:53:15 2009 +0200
     6.3 @@ -1,6 +1,5 @@
     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 @@ -8,58 +7,12 @@
    6.11   * Tabulka, která je výsledkem SQL dotazu.
    6.12   * @author fiki
    6.13   */
    6.14 -public class Tabulka implements HtmlObjekt {
    6.15 +public class Tabulka {
    6.16  
    6.17      private String[] zahlavi;
    6.18      private String zahlaviTip;
    6.19      private Collection<Object[]> hodnoty = new ArrayList<Object[]>();
    6.20  
    6.21 -    public String getHtml() {
    6.22 -
    6.23 -        if (getZahlavi() == null || getHodnoty() == null || getZahlavi().length < 1) {
    6.24 -            return "<p>Chybná tabulka</p>";
    6.25 -        } else {
    6.26 -
    6.27 -            StringBuffer html = new StringBuffer();
    6.28 -
    6.29 -            html.append("<table>");
    6.30 -
    6.31 -
    6.32 -            html.append("<thead title=\"Chceš setřídit výsledek podle nějakého sloupce? Co takhle ORDER BY sloupec.\">");
    6.33 -            html.append("<tr>");
    6.34 -            for (String z : getZahlavi()) {
    6.35 -                html.append("<td>" + Html.escapuj(z) + "</td>");
    6.36 -            }
    6.37 -            html.append("</tr>");
    6.38 -            html.append("</thead>");
    6.39 -
    6.40 -
    6.41 -            html.append("<tbody>");
    6.42 -            for (Object[] hh : getHodnoty()) {
    6.43 -                html.append("<tr>");
    6.44 -                for (Object h : hh) {
    6.45 -                    html.append(formatujBunku(h));
    6.46 -                }
    6.47 -                html.append("</tr>");
    6.48 -            }
    6.49 -            html.append("</tbody>");
    6.50 -
    6.51 -            html.append("</table>");
    6.52 -
    6.53 -
    6.54 -            return html.toString();
    6.55 -        }
    6.56 -    }
    6.57 -
    6.58 -    private String formatujBunku(Object o) {
    6.59 -        /** TODO: podporovat i jiné typy */
    6.60 -        if (o instanceof Integer) {
    6.61 -            return "<td class=\"cislo\">" + Html.escapuj(String.valueOf(o)) + "</td>";
    6.62 -        } else {
    6.63 -            return "<td>" + Html.escapuj(String.valueOf(o)) + "</td>";
    6.64 -        }
    6.65 -    }
    6.66 -
    6.67      public String[] getZahlavi() {
    6.68          return zahlavi;
    6.69      }
     7.1 --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/VysledekSQL.java	Sun May 31 17:46:11 2009 +0200
     7.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/VysledekSQL.java	Sun May 31 17:53:15 2009 +0200
     7.3 @@ -4,10 +4,11 @@
     7.4  import java.util.Collection;
     7.5  
     7.6  /**
     7.7 - * Výsledek SQL dotazu
     7.8 + * Výsledek SQL dotazu.
     7.9 + * Obsahuje tabulky a hlášky.
    7.10   * @author fiki
    7.11   */
    7.12 -public class VysledekSQL implements HtmlObjekt {
    7.13 +public class VysledekSQL {
    7.14  
    7.15      private Collection<Tabulka> tabulky = new ArrayList<Tabulka>();
    7.16      private Collection<Hlaska> hlasky = new ArrayList<Hlaska>();
    7.17 @@ -19,18 +20,4 @@
    7.18      public Collection<Hlaska> getHlasky() {
    7.19          return hlasky;
    7.20      }
    7.21 -
    7.22 -    public String getHtml() {
    7.23 -        StringBuffer html = new StringBuffer();
    7.24 -
    7.25 -        for (Tabulka t : tabulky) {
    7.26 -            html.append(t.getHtml());
    7.27 -        }
    7.28 -
    7.29 -        for (Hlaska h : hlasky) {
    7.30 -            html.append(h.getHtml());
    7.31 -        }
    7.32 -
    7.33 -        return html.toString();
    7.34 -    }
    7.35  }
     8.1 --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/web/Ajax.java	Sun May 31 17:46:11 2009 +0200
     8.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/web/Ajax.java	Sun May 31 17:53:15 2009 +0200
     8.3 @@ -17,7 +17,7 @@
     8.4      /**
     8.5       * Nastaví informace o klientovi (uživateli).
     8.6       * @param ipAdresa IP adresa, ze které přišel HTTP požadavek
     8.7 -     * @param ipPresmerovano HTTP hlavička x-forwarded-for
     8.8 +     * @param ipPresmerovano HTTP hlavička x-forwarded-for (přidává proxy).
     8.9       * @param idSezeni javovská HTTP relace
    8.10       */
    8.11      public void setKlient(String ipAdresa, String ipPresmerovano, String idSezeni) {