VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ

Slides:



Advertisements
Podobné prezentace
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Advertisements

IKT PHP PHP Tvorba formuláře - 10 Mgr. Josef Nožička
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Technologie pro publikování na webu 1 Ing. Jiří Štěpánek.
Formuláře jsou důležitou součástí stránek, slouží:  k přihlašování k některým stránkám (eshopy, bakaláři, diskuze na webu apod.)  k odeslání údajů do.
Formuláře Formuláře lze nalézt téměř na každém webu. Formuláře lze nalézt téměř na každém webu. Použití formulářů: Použití formulářů: Blog Blog Uživatelské.
Proxy. Definice  zástupce nebo náhradník za dotyčný objekt  proxy i zastoupený objekt dědí od stejného interfacu  proxy kontroluje přístup k objektu.
Pole, ukazatele a odkazy
Uživatelská rozhraní Uživatelská rozhraní 9. cvičení.
Počítače a programování 1. Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek.
Návrh a tvorba WWW Cvičení 6
PHP a MySQL Připojení k databázi:
Funkce a procedury  Funkce a procedury mají za úkol vykonávat určitou činnost, která se opakuje na několika místech skriptu. Obě se definují klíčovým.
InfoPath Využití formulářů ve výuce zeměpisu. InfoPath Nadstavba k balíku MS Office Prostředí koresponduje s ostatními produkty Microsoftu. Program je.
Ing. Josef Veselý Označení šablony a vzdělávací sady viz.rozpis.
PHP – zasílání dat z formuláře
Návrh a tvorba WWW Přednáška 1
PHP – Základy programování
Objektové programování
Ing. Jan Mittner Základy MVC 2. Rozšíření layoutu 3. helpery 4. Bootstrap a přepis URL adres 2.
6. cvičení Polymorfismus
JavaScript Podmínky, cykly a pole.
Ing. Jan Mittner Životní cyklus požadavku 2. Moduly 3. Pluginy 4. Jak řešit komponenty typu menu 5. atd. 2.
Poznámkový blok a WWW Mgr. Lenka Švancarová. Poznámkový blok a WWW Spustíme si Poznámkový blok.  Soubor-Uložit jako Uložit jako typ – Všechny soubory.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
DHTML Jan Felger. Kapitola 0: Základní tagy Základy HTML © Jan Felger 2005 Úvod Tato prezentace zobrazuje pouze zcela základní minimum znalostí, které.
Dílna Caché II. CSP pro pokročilé Tomáš Vaverka. Zdroje HTML Tag Reference v sekci Reference Material v dokumentaci Caché HTML Tag Reference v sekci Reference.
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Cross-Site Request Forgery Prezentace k přednášce o CSRF útocích Připraveno pro SOOM session #
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
PROGRAMOVÁNÍ V PHP PERSONAL HOME PAGES SESSIONS. 2 COOKIES JEDNÁ SE O KRÁTKÉ TEXTOVÉ ŘETĚZCE, JEŽ SI MEZI SEBOU VYMĚŇUJÍ WEBOVÝ SERVER A WEBOVÝ KLIENT.
AJAX nejmodernější webová technologie… seminář pro učitele ZŠ a SŠ Mgr. Marek Osuchowski Ostravská univerzita © 2011.
PHP Vytváření formuláře.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA EE Zbyněk Šlajchrt Část 2.
Šesté cvičení Výjimky Balíky.
Import záznamů diplomových prací nové řešení Antonín Vaishar, SUAleph, 26. –
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
Formuláře Formuláře uzavíráme do elementů Formuláře uzavíráme do elementů a a Tyto elementy jsou součástí jazyka XHTML, to znamená, že při použití v PHP.
David Klíma- 1 - Elektronická pošta Slouží k přenosu zpráv po internetu Každý uživatel má - zavináč Klimad – uživatelské.
Vzdálená správa Tomáš Kalný.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 6.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt 1 Část 12.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 7.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 3.
JavaScript úvod. Jazyky webového vývojáře Dynamická stránka  aktivně mění svůj obsah v reakci na činnost uživatele  zpracování na straně serveru (PHP,
Tvorba www stránek – (01) úvod Autor: Mgr. Josef Motl Datum: , ročník: 7. ročník ZŠ Vzdělávací oblast: Informační technologie Anotace: Prezentace.
Zabezpečení – CSRF, XSS Tomáš Hulák, Miroslav Kořínek.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 5.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně
Intents – Interní Intent demo
PRVNÍ Projekt, struktura projektu
Bc. Vladimír Holubec Bc. Nikola Němcová
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
Seminář 11 DHCP + HTTP + IPTABLES
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
Protokol HTTP (Hypertext Transfer Protocol)
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
TNPW1 JavaScript Ing. Jiří Štěpánek.
Strategy „Definujte rodinu algoritmů, zapouzdřuje je aby byly vzájemně zaměnitelné. Strategie umožňuje, aby se algoritmus nebyl závislý na klientech, kteří.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA
Web Application Scanning
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Transkript prezentace:

VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage Část 3.

Program Doplění e-mail klienta o identifikaci uživatele Základní práce s filtry Přesměrování dotazu forward, include, redirect zabránění znovuodeslání formuláře problematika tlačítka Zpět prohlížeče Tvorba jednoduchých JSP stránek využití EL 2.0 Řízení vyrovnávací paměti prohlížeče Cache-Control: public, max-age, no-cache, no-store

Příprava projektu Stáhněte si kostru projektu Otevřete projekt v IDE http://java.vse.cz/4it447/Cviceni Otevřete projekt v IDE

Filter FrontControllerFilter Vytvořte třídu FrontControllerFilter Deklarujte implementaci javax.servlet.Filter Implementujte všechny metody init a destroy nechte prázdné doFilter bude obsahovat logiku kontroleru

Metoda doFilter @Override /** * Směruje zpracování akcí do příslušných privátních metod. */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { // Přetypujeme na HTTP objekty HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; // sdělíme kontejneru, v jakém kódování // očekáváme data od klienta request.setCharacterEncoding("UTF-8"); // Větvení podle akce. String action = httpRequest.getParameter("action"); if (action != null && action.equals("doLogin")) { doLogin(httpRequest, httpResponse); } else if (action != null && action.equals("doLogout")) { doLogout(httpRequest, httpResponse); } else { noAction(httpRequest, httpResponse, filterChain); }

Metoda doLogin /** * Reaguje na akci doLogin. Z dotazu zjistí nick. Pokud * není přítomen, vrátí řízení na login.jsp. Jinak * vytvoří cookie a nastaví do něj nick z dotazu. Každý * další dotaz by měl nést toto cookie. Přítomnost cookie * v dotazu se chápe jako identifikace aktuálního uživatele. */ private void doLogin(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // login.jsp předává parametr nick String nickname = request.getParameter("nick"); if ("".equals(nickname)) { forwardToLogin(request, response); return; } // Název cookie je cookieNick, hodnota je vlastní nick Cookie cookie = new Cookie("cookieNick", nickname); // Nastavíme 24 hodin platnost. //cookie.setMaxAge(60 * 60 * 24); // Hodnota -1 by způsobila, že cookie platí pouze // do zavření prohlížeče. cookie.setMaxAge(-1); response.addCookie(cookie); // Přesměrujeme aktuální dotaz na emailový formulář response.sendRedirect("mailForm.jsp");

Metoda forwardToLogin /** * Předává řízení na <code>login.jsp</code>. */ private void forwardToLogin(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Získáme dispečera stránky RequestDispatcher loginDispatcher = request.getRequestDispatcher("login.jsp"); loginDispatcher.forward(request, response); }

Metoda doLogout /** * Odhlašuje uživatele smazáním cookie v prohlížeči. */ private void doLogout(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Zkusíme najít cookie, které chceme smazat Cookie cookie = findNickCookie(request); if (cookie != null) { // Nastavení maxAge na 0 vede ke smazání cookie cookie.setMaxAge(0); response.addCookie(cookie); } // Předáme řízení login.jsp forwardToLogin(request, response);

Metoda findNickCookie /** * Hledá cookie s názvem <code>cookieNick</code> * * @param request dotaz * @return cookie nebo null */ private Cookie findNickCookie(HttpServletRequest request) { Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if ("cookieNick".equals(cookie.getName())) { return cookie; } return null;

Metoda noAction /** * Voláno pokud v dotazu není specifikovaná akce */ private void noAction(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException { // Zkusíme najít cookie 'cookieNick' Cookie cookie = findNickCookie(request); if (cookie != null) { // Cookie přišlo -> uživatel je přihlášen. // Nastavíme nick uživatele jako atribut dotazu, // aby jej šlo vypisovat na stránkách. request.setAttribute("user", cookie.getValue()); // Předáme řízení standardním způsobem filterChain.doFilter(request, response); } else { // Cookie se nenašlo -> uživatel není přihlášen. // Předáme řízení na login stránku. forwardToLogin(request, response); }

Registrace filtru Otevřete soubor WEB-INF/web.xml Doplňte prvek deklarace filtru Doplňte prvek pro mapování filtru filtr bude mapován na všechna URI /* <filter> <filter-name>FronControllerFilter</filter-name> <filter-class> cz.vse.javaee.cviceni3.FrontControllerFilter </filter-class> <async-supported>true</async-supported> </filter> <filter-mapping> <url-pattern>/*</url-pattern> </filter-mapping>

Formulář pro přihlašování Vytvořte JSP stránku login.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Login</title></head> <body> <h1>Login</h1> <form action="login" method="post"> <label for="nick">Nickname:</label><br/> <input id="nick" name="nick" type="text"/><br/> <input name="action" type="hidden" value="doLogin"/><br/> <input type="submit" value="Log in"/> </form> </body> </html>

Úprava formuláře pro odesílání Vypíšeme identifikovaného uživatele na stránku ${expression} – Expression Language (EL2) Sestavování výrazů nad hodnotami a beany v parametrech dotazu - ${param['nameParam']} atributech - ${requestScope['nameParam']} requestScope, sessionScope, applicationScope proměnných - ${variable} Výpis vlastností beanu ${userBean.address.city}

Úprava formuláře pro odesílání Do stránky mailForm.jsp přidáme tlačítko pro odhlášení uživatele Akce logout je pouze formální Všechny dotazu jdou přes FrontControllerServlet Ten se orientuje pomocí parametru action Pokud je action=logout tak provede logout a přesměruje na login.jsp <form action="logout" method="post"> <input type="hidden" name="action" value="doLogout"/> <input type="submit" value="Logout"/> </form>

Deploy (manuálně) Spustit glassfish http://localhost:4848 Applications/Deploy Launch

Problém č. 1 Refresh stránky způsobí nové odeslání zprávy Příčina: Stránka resumé je asociována s URI pro odesílání emailu. Prohlížeč si drží data dotazu, která byla odeslána pro získání aktuální stránky a která použije při obnově Řešení: použije se přesměrování (redirect) Instukce prohlížeči, aby se metodou GET obrátil na nějaké URI

Problém č. 1 - řešení V servletu MailServlet přesměrujeme dotaz na sebe Upravte konec metody doPost takto: // zavoláme pomocnou metodu - zatím nedělá nic sendMail(to, subject, message); // Odpověď bude obsahovat resumé HttpSession session = request.getSession(); session.setAttribute("resume.to", to); session.setAttribute("resume.subject", subject); session.setAttribute("resume.message", message); response.sendRedirect(request.getRequestURI()); output.flush();

Problém č. 1 - řešení Přesměrování používá metodu GET, dotaz se nám vrátí do MailServlet v metodě doGet @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); response.setCharacterEncoding("UTF-8"); PrintWriter output = response.getWriter(); // Odpověď bude obsahovat resumé HttpSession session = request.getSession(); output.println("Email odeslán"); output.println("Komu:" + session.getAttribute("resume.to")); output.println("Předmět:" + session.getAttribute("resume.subject")); output.println("Zpráva:" + session.getAttribute("resume.message")); output.flush(); }

Problém č. 2 Tlačítko Zpět zobrazí obsah políček ve formuláři Příčina Kešování stránek na prohlížeči Řešení Je třeba nastavit hlavičku v odpovědi, která ovládá keš Cache-Control: no-store Pozn.: Projeví se až po smazání keše

Problém č. 2 – řešení Na začátku JSP stránky emailForm.jsp nastavte hlavičku Cache-Control: Skriptlety: <% Java kód %> Mezi <% a %> lze psát kód v Javě V podstatě se píše kód, který bude součástí generovaného servletu <% response.addHeader("Cache-Control", "no-store"); %>

Domácí úkol Vytvořte JSP stránku pro resumé odeslání zprávy. Stránka bude generovat HTML dokument s těmito údaji: Aktuální uživatel (nickname) Příjemce zprávy Předmět zprávy Zpráva Aktuální datum Stránka bude zobrazena přesměrováním (redirect) po odeslání zprávy servletem MailServlet

Dodatek 1: Efekt Cache-Control Testováno na Firefox 3.5.8 no-cache Prohlížeč posílá další dotaz na server Tlačítko Back nikoliv, bere obsah z historie no-store Prohlížeč posílá další dotaz na server, taktéž Back hláška při pohybu zpět na stránku získanou POST public, max-age=<čas v sekundách> používá se keš nezadáno – chování jako při no-cache

Linky http://www.hacktoolrepository.com/tool/52/CAL9000