Servlet pro zpracování AJAXových požadavků.
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Ajax.java Thu May 28 23:12:19 2009 +0200
1.3 @@ -0,0 +1,23 @@
1.4 +package cz.frantovo.sql.vyuka.ajax;
1.5 +
1.6 +/**
1.7 + * Pomocník servletu. Vrací HTML části stránek.
1.8 + * @author fiki
1.9 + */
1.10 +public class Ajax {
1.11 +
1.12 + /**
1.13 + * @return Historie SQL příkazů daného uživatele.
1.14 + */
1.15 + public String getHistorie(String idSezeni) {
1.16 + return "<p>historie (id=" + idSezeni + ")</p>";
1.17 + }
1.18 +
1.19 + /**
1.20 + * Vykoná zadaný SQL příkaz v databázi.
1.21 + * @return Výsledek dotazu – tabulka, hláška nebo chyba.
1.22 + */
1.23 + public String geSQLVysledek(String sql) {
1.24 + return "<p>SQL dotaz (čeština): " + sql + "</p>";
1.25 + }
1.26 +}
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Servlet.java Thu May 28 23:12:19 2009 +0200
2.3 @@ -0,0 +1,120 @@
2.4 +package cz.frantovo.sql.vyuka.ajax;
2.5 +
2.6 +import java.io.IOException;
2.7 +import java.io.PrintWriter;
2.8 +import javax.servlet.ServletException;
2.9 +import javax.servlet.http.HttpServlet;
2.10 +import javax.servlet.http.HttpServletRequest;
2.11 +import javax.servlet.http.HttpServletResponse;
2.12 +
2.13 +/**
2.14 + * Servlet pro vyřizování AJAXových požadavků.
2.15 + * @author fiki
2.16 + */
2.17 +public class Servlet extends HttpServlet {
2.18 +
2.19 + private static final long serialVersionUID = 9102108273105288056L;
2.20 +
2.21 + private enum akce {
2.22 +
2.23 + /** Provede SQL dotaz. */
2.24 + vykonat,
2.25 + /** Vypíše historii SQL příkazů daného uživatele. */
2.26 + historie,
2.27 + /** Vypíše nějaké nepotřebné informace. */
2.28 + test,
2.29 + /** Pokud je požadovaná akce nesmysl. */
2.30 + chyba
2.31 + }
2.32 +
2.33 + /**
2.34 + * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
2.35 + * @param request servlet request
2.36 + * @param response servlet response
2.37 + * @throws ServletException if a servlet-specific error occurs
2.38 + * @throws IOException if an I/O error occurs
2.39 + */
2.40 + protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
2.41 +
2.42 + /** Používáme pouze UTF-8 */
2.43 + response.setContentType("text/html;charset=UTF-8");
2.44 + request.setCharacterEncoding("UTF-8");
2.45 +
2.46 + PrintWriter out = response.getWriter();
2.47 +
2.48 + try {
2.49 +
2.50 + akce parametrAkce = akce.chyba;
2.51 + try {
2.52 + parametrAkce = akce.valueOf(request.getParameter("akce"));
2.53 + } catch (Exception e) {
2.54 + /** Chyba nebo podvržený AJAXový požadavek → zobrazíme chybovou hlášku */
2.55 + }
2.56 +
2.57 + Ajax a = new Ajax();
2.58 +
2.59 +
2.60 + switch (parametrAkce) {
2.61 + case vykonat:
2.62 + out.println(a.geSQLVysledek(request.getParameter("sql")));
2.63 + break;
2.64 + case historie:
2.65 + out.println(a.geSQLVysledek(request.getRequestedSessionId()));
2.66 + break;
2.67 + case test:
2.68 + out.println("<p>AJAX jede!</p>");
2.69 + out.println("<ol>");
2.70 + out.println("<li>Metoda: " + request.getMethod() + "</li>");
2.71 + out.println("<li>Host: " + request.getRemoteHost() + "</li>");
2.72 + out.println("<li>Adresa: " + request.getRemoteAddr() + "</li>");
2.73 + out.println("<li>Akce: " + request.getParameter("akce") + "</li>");
2.74 + out.println("<li>SQL: " + request.getParameter("sql") + "</li>");
2.75 + out.println("<li>Sezení: " + request.getRequestedSessionId() + "</li>");
2.76 + out.println("<li>URL: " + request.getRequestURL().toString() + "</li>");
2.77 + out.println("</ol>");
2.78 + break;
2.79 + case chyba:
2.80 + out.println("<p>chyba</p>");
2.81 + break;
2.82 + }
2.83 + } finally {
2.84 + out.close();
2.85 + }
2.86 + }
2.87 +
2.88 + // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
2.89 + /**
2.90 + * Handles the HTTP <code>GET</code> method.
2.91 + * @param request servlet request
2.92 + * @param response servlet response
2.93 + * @throws ServletException if a servlet-specific error occurs
2.94 + * @throws IOException if an I/O error occurs
2.95 + */
2.96 + @Override
2.97 + protected void doGet(HttpServletRequest request, HttpServletResponse response)
2.98 + throws ServletException, IOException {
2.99 + processRequest(request, response);
2.100 + }
2.101 +
2.102 + /**
2.103 + * Handles the HTTP <code>POST</code> method.
2.104 + * @param request servlet request
2.105 + * @param response servlet response
2.106 + * @throws ServletException if a servlet-specific error occurs
2.107 + * @throws IOException if an I/O error occurs
2.108 + */
2.109 + @Override
2.110 + protected void doPost(HttpServletRequest request, HttpServletResponse response)
2.111 + throws ServletException, IOException {
2.112 + processRequest(request, response);
2.113 + }
2.114 +
2.115 + /**
2.116 + * Returns a short description of the servlet.
2.117 + * @return a String containing servlet description
2.118 + */
2.119 + @Override
2.120 + public String getServletInfo() {
2.121 + return "Servlet pro zpracování AJAXových požadavků.";
2.122 + }// </editor-fold>
2.123 +}
3.1 --- a/java/sql-vyuka/web/WEB-INF/casti/aplikace.jspx Thu May 28 21:19:06 2009 +0200
3.2 +++ b/java/sql-vyuka/web/WEB-INF/casti/aplikace.jspx Thu May 28 23:12:19 2009 +0200
3.3 @@ -21,9 +21,9 @@
3.4 <div class ="blok" id="vstup">
3.5 <h2><fmt:message key="blok.zadavani"/></h2>
3.6 <div class="vnitrekBloku">
3.7 - <form action="#">
3.8 + <form action="#" name="aplikace">
3.9 <fieldset>
3.10 - <textarea id="vstupniPole" rows="100" cols="1000"><fmt:message key="vychozi.sql"/></textarea>
3.11 + <textarea id="vstupniPole" name="vstupniPole" rows="100" cols="1000"><fmt:message key="vychozi.sql"/></textarea>
3.12 <button class="zobrazitHistorii"
3.13 name="zobrazitHistorii"
3.14 title="Vypíše historii SQL příkazů."
4.1 --- a/java/sql-vyuka/web/WEB-INF/web.xml Thu May 28 21:19:06 2009 +0200
4.2 +++ b/java/sql-vyuka/web/WEB-INF/web.xml Thu May 28 23:12:19 2009 +0200
4.3 @@ -1,5 +1,13 @@
4.4 <?xml version="1.0" encoding="UTF-8"?>
4.5 <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">
4.6 + <servlet>
4.7 + <servlet-name>Servlet</servlet-name>
4.8 + <servlet-class>cz.frantovo.sql.vyuka.ajax.Servlet</servlet-class>
4.9 + </servlet>
4.10 + <servlet-mapping>
4.11 + <servlet-name>Servlet</servlet-name>
4.12 + <url-pattern>/ajax</url-pattern>
4.13 + </servlet-mapping>
4.14 <session-config>
4.15 <session-timeout>
4.16 30
4.17 @@ -7,5 +15,5 @@
4.18 </session-config>
4.19 <welcome-file-list>
4.20 <welcome-file>index.jsp</welcome-file>
4.21 - </welcome-file-list>
4.22 - </web-app>
4.23 + </welcome-file-list>
4.24 +</web-app>
5.1 --- a/java/sql-vyuka/web/hlavni.js Thu May 28 21:19:06 2009 +0200
5.2 +++ b/java/sql-vyuka/web/hlavni.js Thu May 28 23:12:19 2009 +0200
5.3 @@ -27,7 +27,7 @@
5.4 * @return SQL příkaz zadaný uživatelem.
5.5 **/
5.6 function getSQL() {
5.7 - return document.getElementById(vstupniPole).innerHTML;
5.8 + return document.aplikace.vstupniPole.value;
5.9 }
5.10
5.11 /**
5.12 @@ -67,7 +67,7 @@
5.13 /** Jednoduchá AJAXová funkce, načte obsah souboru a zobrazí ho ve výstupním okně. */
5.14 function ajaxVykonatSQL() {
5.15 if (ajax.readyState == 4 || ajax.readyState == 0) {
5.16 - ajax.open("GET", 'vysledek.html', true);
5.17 + ajax.open("POST", 'ajax?akce=vykonat&sql=' + encodeURIComponent(getSQL()), true);
5.18 ajax.onreadystatechange = vykonatSQLVypis;
5.19 ajax.send(null);
5.20 }
5.21 @@ -86,7 +86,7 @@
5.22 /** Jednoduchá AJAXová funkce, načte obsah souboru a zobrazí ho ve výstupním okně. */
5.23 function ajaxZobrazitHistorii() {
5.24 if (ajax.readyState == 4 || ajax.readyState == 0) {
5.25 - ajax.open("GET", 'historie.html', true);
5.26 + ajax.open("POST", 'historie.html', true);
5.27 ajax.onreadystatechange = zobrazitHistoriiVypis;
5.28 ajax.send(null);
5.29 }