VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage Část 2.
Program Vývoj aplikace pro odesílání e-mailu Základní práce se servletem Zpracování parametrů z HTML formuláře Generování jednoduché odpovědi Řešení problémů z češtinou Seznámení s JavaMail API Konfigurace mail session na serveru Injektáž mail session Sestrojení a odeslání zprávy
Vygenerování aplikace Stáhněte si základ aplikace z http://java.vse.cz/4it447/Cviceni alternativně lze použít generátor aplikací v Mavenu z příkazové řádky mvn archetype:generate - DarchetypeCatalog=http://kitscm.vse.cz/maven/archetype -catalog.xml Aplikaci nazvěte emailClient Otevřete projekt v IDE
Servlet MailServlet Vytvořte třídu MailServlet Nastavte dědičnost z javax.servlet.http.HttpServlet Přeřiďte metodu doPost
Registrace servletu Otevřete soubor WEB-INF/web.xml Doplňte prvek deklarace servletu Doplňte prvek pro mapování servletu servlet bude mapován na cestu /sendMail
Formulář pro odesílání zprávy Vytvořte JSP stránku mailForm.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>E-mail formulář</title></head> <body> <h1>Formulář pro email</h1> <form 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="submit" value="Odeslat"/> </form> </body> </html>
Uvítací stránka aplikace Ve WEB-INF/web.xml nastavte formulář jako uvítací stránku aplikace <welcome-file-list> <welcome-file>mailForm.jsp</welcome-file> </welcome-file-list>
Sestavení a nasazení mimo NetBeans Spusťte server Glassfish Otevřete administrátorskou konzoli http://localhost:4848 V menu vyberte položku Applications Nakonfigurujte novou aplikaci Tlačítko Deploy Změňte Location na Local Packaged File or Directory Vyberte adresář s rozbaleným archivem aplikace <pracovni_adr>/emailCient/target/emailClient
Spuštění aplikace Zadejte http://localhost:8080/emailClient/ nebo Launch v tabulce aplikací v Admin Consoli
Generování odpovědi servletem @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // nastavíme typ obsahu response.setContentType("text/plain"); // nastavíme znakovou sadu response.setCharacterEncoding("UTF-8"); // získáme writer pro zápis odpovědi PrintWriter output = response.getWriter(); // zápis odpovědi output.println("Email odeslán"); output.flush(); }
Zpracování parametrů v dotazu protected void doPost(HttpServletRequest request, @Override HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.setContentType("text/plain"); PrintWriter output = response.getWriter(); // sdělíme kontejneru, v jakém kódování request.setCharacterEncoding("UTF-8"); // očekáváme data od klienta // metoda getParameter(paramName) vrací // hodnotu parametru String subject = request.getParameter("subject"); String to = request.getParameter("to"); String message = request.getParameter("message"); // zavoláme pomocnou metodu - zatím nedělá nic sendMail(to, subject, message); // Odpověď bude obsahovat resumé output.println("Email odeslán"); output.println("Komu:" + to); output.println("Zpráva:" + message); output.println("Předmět:" + subject); output.flush(); } private void sendMail(String to, String subject, String msg) {
Injektáž javax.mail.Session Vytvořte privátní pole mailSession javax.mail.Session javax.annotation.Resource Prozatím pouze vypište jeho textové vyjádření v resumé posílaném na klienta
Konfigurace JavaMail Session V administrátorské konzoli klikněte na Resources/JavaMail Sessions Klikněte na New Zadejte JNDI Name - mail/myMailSession Mail Host – adresa mail serveru Default User – závisí na mail serveru Default Return Address – vaše emailová adresa
Odeslání zprávy – část 1. private void sendMail(String to, String subject, String msg) throws ServletException { try { // Vytvoříme objekt zprávy Message message = new MimeMessage(mailSession); // Zatím nenastavujeme From, použije se default // z konfigurace serveru //message.setFrom(); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false)); // Nastavíme předmět message.setSubject(subject); // Vložíme text zprávy message.setText(msg); // Nastavíme hlavičku indikující mailového klienta message.setHeader("X-Mailer", "My Mailer"); // Nastavíme datum odeslání Date timeStamp = new Date(); message.setSentDate(timeStamp); // Odešleme zprávu Transport.send(message); getServletContext().log("Mail sent to " + to + "."); } catch (MessagingException e) { throw new ServletException(e); }
Odeslání zprávy – část 2.
Domácí cvičení Nakonfigurovat mail session na Glassfish tak, aby se zprávy odesílaly přes GMail. Návod je na této adrese: http://spitballer.blogspot.com/2010/02/sending- email-via-glassfish-v3.html
Dodatek 1: Čeština v servletech Pro správné fungování češtiny v servletech je třeba provést toto: Nastavit objektu response správné kódování response.setContentType("text/html; charset=utf-8") nebo response.setCharacterEncoding("utf-8") Používat Writer, nikoliv OutputStream response.getWriter() Kompilovat servlety ve správném kódování Čteme-li parametry z dotazu, je třeba kontejneru sdělit, v jakém kódování je očekáváme. request.setCharacterEncoding("utf-8") Odpovídá kódování stránky, ze které byl dotaz odeslán.
Dodatek 2: Ladění Glassfish V administrátorské konzoli nastavit Configuration|JVM Settings|Debug = Enabled Nutný restart serveru V IntelliJ IDEA Select Run/Debug Configuration(kombo na horní liště)|Edit Configuration Add New Configuration (+)|Remote Port = 9009
Linky http://spitballer.blogspot.com/2010/02/sending-email- via-glassfish-v3.html http://kore.fi.muni.cz:5080/wiki/index.php/JavaServlets http://www.linuxzone.cz/index.phtml?idc=191&ids=2