Přechod ze servletu na JSP – zbavení se servletu a HTML uvnitř javového kódu.
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) {