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

Slides:



Advertisements
Podobné prezentace
Tabulkový procesor Práce se souborem – otevření, tvorba a použití šablony, tisk, propojení tabulky Excel s Wordem, nastavení Excelu, uložení Autorem materiálu.
Advertisements

Vytvořila:Monika Hradilová. NA ÚVOD… NA ÚVOD… Přátelství a internet…Tohle téma je hodně otevřené. Na celém světě existují milióny sociálních stránek.
Tabulkový procesor Formuláře – interaktivní prvky v Excelu Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Růžena Hynková. Dostupné z Metodického.
IPad Seminář KA 05 Hana Hoffmannová. iPad Úvodní seminář pro práci s tabletem. 2.
Google App Engine webové aplikace snadno a rychle Lukáš Jelínek AIKEN s.r.o. -
Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Prostředí internetu Číslo DUM: III/2/VT/2/2/27 Vzdělávací předmět: Výpočetní technika Tematická oblast:
2. cvičení z KIV/ZI Webnet. Náplň cvičení Univerzitní www stránky Portál a STAG Webmail Koleje, menzy a knihovna Diskový prostor.
Jednoduchá HTML stránka Gymnázium a Jazyková škola s právem státní jazykové zkoušky Zlín Tematická oblastTvorba WWW stránky v HTML Datum vytvoření2013.
ZAL – 5. cvičení Martin Tomášek Pole - opakování Základní datový typ. V poli držíme více elementů (jednoho typu) S elementy v poli můžeme manipulovat.
Autor:Ing. Pavel Brož Předmět/vzdělávací oblast:Informační a komunikační technologie Tematická oblast:Práce se standardním aplikačním programovým vybavením.
HTML HyperText Markup Language Je to značkovací jazyk používaný na tvorbu webových stránek, které jsou propojeny hypertextovými odkazy. Je hlavním z.
Elektronické učební materiály - II. stupeň Informatika – aplikace informačních technologií Autor: Bc. Pavel Šiktanc Internetové stránky Co se všechno naučíme???
Název školy: Autor: Název: Číslo projektu: Název projektu: SŠ spojů a informatiky Tábor Tomáš Jansa VY_32_INOVACE_OV16 CZ.1.07/1.5.00/ Moderní škola.
Tabulkový procesor Odebrání skrytých dat a osobních informací kontrolou sešitů Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Růžena Hynková.
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_30-03 Název školy Střední průmyslová škola stavební, České Budějovice, Resslova 2 AutorRNDr.
Základní škola a mateřská škola Lázně Kynžvart Autor: Mgr. Petra Šandová Název: VY_32_INOVACE_5B_INF3_16_ Téma: pro 4.,5.ročník ZŠ, vytvořeno:
HTML (I) (2). Projekt: CZ.1.07/1.5.00/ OAJL - inovace výuky Příjemce: Obchodní akademie, odborná škola a praktická škola pro tělesně postižené,
VideoWeb: Webová aplikace pro správu domácí videotéky Adam Melkus, Radek Jirovský, Jakub Kutil, Hoa Quoc TranPB138
Univerzitní informační systém III., Lednice 2004 Vývoj a koncepce nového univerzitního webu Ondřej Kudlík
ŠKOLA: Gymnázium, Chomutov, Mostecká 3000, příspěvková organizace AUTOR:Mgr. Jiří Kolář NÁZEV:VY_32_INOVACE_08B_15_Sítě_internet2 TEMA:HARDWARE A SOFTWARE.
Tvorba WWW stránek Podmínky Jan Růžička Institut geoinformatiky VŠB-TU Ostrava, HGF tř. 17.listopadu Ostrava-Poruba
PŘIHLÁŠENÍ K ELEKTRONICKÉ EVIDENCI TRŽEB
Microsoft Excel verze 2010 Mgr. Přemysl Kejzlar.
HTML a CSS Rostislav Miarka.
Výukový materiál zpracován v rámci projektu
Programování II 1. cvičení Alena Buchalcevová
NÁZEV ŠKOLY: Masarykova základní škola a mateřská škola Melč, okres Opava, příspěvková organizace ČÍSLO PROJEKTU: CZ.1.07/1.4.00/ AUTOR: Mgr. Vladimír.
Jak zveřejnit článek přes Webpublisher ?
Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Internetové služby – Disk Google Číslo DUM: III/2/VT/2/2/36 Vzdělávací předmět: Výpočetní technika Tematická.
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Výukový materiál zpracován v rámci projektu
Prvky v síti Střední škola hotelová a služeb Kroměříž Název školy
Název materiálu: Internetový prohlížeč Google Chrome
CorelDRAW - dokument.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
Zkušenosti s nasazením J2EE aplikací na AS GlassFish
Tvorba webových stránek – formuláře
Pracovní skupiny Pracovní skupiny slouží ke sdílení soukromé složky (vzorů, adresářů, příprav, archivu, sestavených dokumentů, seznamů a nastavení) s jinými.
Dostupné z Metodického portálu ; ISSN
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
Databáze MS ACCESS 2010.
Abstract Factory.
Název projektu: ZŠ Háj ve Slezsku – Modernizujeme školu
C# konzole – Program pro výpočet výrazu
Makro v Excelu.
Cvičení 4 Dědičnost objektů.
ŘÍZENÍ ZÁSOB NEJČASTĚJŠÍ DOTAZY
Název školy: ZŠ Bor, okres Tachov, příspěvková organizace Autor: Mgr
Informační a komunikační technologie
NÁZEV ŠKOLY: Základní škola Josefa Bublíka, Bánov
NÁZEV ŠKOLY: Základní škola Josefa Bublíka, Bánov
Informační a komunikační technologie Informatika Operační systémy
NÁZEV ŠKOLY: Základní škola Josefa Bublíka, Bánov
Typy Oken, Zobrazení a Konfigurace
MU002 Informatika II Základy algoritmizace 1/13
Alica Takácsová Lenka Marčišová
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
NÁZEV ŠKOLY: Základní škola Josefa Bublíka, Bánov
název projektu: Šablony Špičák číslo projektu: CZ.1.07/1.4.00/
název projektu: Šablony Špičák číslo projektu: CZ.1.07/1.4.00/
název projektu: Šablony Špičák číslo projektu: CZ.1.07/1.4.00/
Přednášky z Distribuovaných systémů
Tvorba webových stránek - úvod
Střední škola obchodně technická s. r. o.
Navigace v aplikaci Ing. Petr Voborník, Ph.D..
Vázání dat Data Binding
Hromadné dokumenty opakující se pro kolekci osob
MU002 Informatika II Základy algoritmizace 1/13
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
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í Odesílat formulář akcí onclick Funkce uvedená v onclick atributu zavolá na objektu formuláře submit() reset() Formulář je třeba pojmenovat: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <script language="javascript"> function submitForm() { document.forms["mailForm"].submit(); //first submit document.forms["mailForm"].reset(); //and then reset the form values } </script> <head><title>E-mail formulář</title></head> <body> <h1>Formulář pro email</h1> <h2>Uživatel: ${requestScope['user']}</h2> <form name="mailForm" action="sendMail" method="post"> <label for="to">Komu:</label><br/> <input id="to" name="to" type="text"/><br/> <label for="subject">Předmět:</label><br/> <input id="subject" name="subject" type="text"/><br/> <label for="message">Zpráva:</label><br/> <textarea id="message" name="message" rows="20" cols="60"> </textarea><br/> <input type="button" value="Odeslat" onclick="submitForm()"/> </form> <form action="logout" method="post"> <input type="hidden" name="action" value="doLogout"/> <input type="submit" value="Logout"/> </body> </html>

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

Linky http://jbkflex.wordpress.com/2012/10/18/reset-and- clear-the-html-form-after-submitting-when-you-hit-browsers- back-button/