810 likes | 1.09k Views
Java a J2EE. Peter Blšták. Obsah. Java charakteristika JavaBeans JDBC edície a verzie JEE (J2EE) špecifikácia JEE (JEE APIs) JEE kontajnery Java Servlets, JSP EJB. Java. Java. OO programovací jazyk (+ nástroje a knižnice) organizovanie programu do tried (objektov)
E N D
Java a J2EE Peter Blšták
Obsah • Java • charakteristika • JavaBeans • JDBC • edície a verzie • JEE (J2EE) • špecifikácia JEE (JEE APIs) • JEE kontajnery • Java Servlets, JSP • EJB
Java • OO programovací jazyk (+ nástroje a knižnice) • organizovanie programu do tried (objektov) • držia svoj stav (atribúty) • vykonávajú funkčnosť, príp. menia svoj stav (metódy) • interagujú s inými objektami (asociácie, referencie, metódy) • syntax podobná C++ • interpretovaný (multiplatformový) • kompilovanie do tvaru Java bytecode • *.java -> *.class • JVM (Java Virtual Machine) – interpreter bytecode • Windows, Linux / Unix, MAC, mobilné zariadenia, ...
Java (vs. C++) • packages (balíky) • triedy sú organizované do namespace-ov (balíkov) • triede – súbor z názvom triedy • balík – adresárová štruktúra • java.lang.Object – trieda • /java/lang/Object.java (v src) • /java/lang/Object.class (v classes) • všetky objekty dedia od java.lang.Object • takmer všetko je objekt (okrem jednoduchých typov int, doube, ...)
Java (vs. C++) • referencie (nemá pointre) • garbage collection • bez destructor-ov a delete • JVM runtime – odstraňovanie objektov bez referencie naň • jednoduchá dedičnosť + interface-y • všetky metódy ako „C++ virtual“ • polymorfizmus (tak ako sa patrí) • nemáme header súbory (*.h, *.hpp) • javadoc (generovanie)
Java trieda – príklad package sk.tf.development.model; import java.lang.RuntimeException; import sk.tf.core.actions.*; public class Kniha extends PersistentObject implements Serializable, ContextListner { private String ciarovyKod; private BigDecimal cena; private Vector vypozicky; public void removeVypozicky(ActionContext context, Vector vypozicky) { … } }
Java (vs. C++) • štandardné knižnice • ADT (Vector, List, Collection, Set, Array, ...) • thread synchronization, networking, logging, internationalization • reflection, dynamic-proxies • AWT, Swing (grafické komponenty) • XML (SAX, DOM, XSLT) • JavaBeans • JDBC, Corba, ... (enterprise features) • modifikácia bytecode (=> rutime enhancements) • exceptions (checked, runtime) • java.lang.Exception • java.lang.RuntimeException
Java 5 – zaujímavé vlastnosti • anotácie • dodatočné informácie k Java kódu • využívané pri preklade alebo runtime @Overrideprotected void renderComponent(...) • generické (template) typy private Collection<Objednavka> objednavky; • enumerácie ~ štruktúrovaný typ • Scripting – podpora pre skriptovacie jazyky • jRuby, Groovy, Mozilla Rhino …
JAR – Java ARchive • knižničný súbor • skompilované Java objekty • ďalšie zdroje (*.gif, *.properties, ...) • ZIP s koncovkou jar • classpath • vykonanie alebo skompilovanie programu • definuje cestu k triedam a ďalším zdrojom (*.class, *.jar, ...)
JavaBeans • POJO (Plain Old Java Object) • názvové a štrukturálne konvencie pre triedu • verejná trieda s verejným prázdnym konštruktorom • atribúty: private Type xxx; • metódy: public Type getXxx(); public void setXxx(Type xxx); • Java poskytuje API na manipuláciu s vlastnosťami na základe mena (reflection)
JavaBeans – príklad public class Kniha extends PersistentObject { private StringciarovyKod; private BigDecimal cena; … public Kniha() { … } public StringgetCiarovyKod() { return ciarovyKod; } public void setCiarovyKod(String ciarovyKod) { this.ciarovyKod = ciarovyKod; } public BigDecimal getCena() { return cena; } public void setCiarovyKod(BigDecimal cena) { this.cena = cena; } … }
JDBC • Java DataBase Connectivity • API – unifikovaný prístup k RDBMS • odtieňuje aplikáciu od použitého RDBMS a jeho špecifických vlastností • preklad SQL do natívnych SQL dotazov • abstraktné volania a štruktúry (ResultSet, Connection) • zvýšenie výkonu • zabezpečuje connection pooling • JDBC driver pre konkrétny RDBMS • JDBC-ODBC bridge • MS SQL Server – net.sourceforge.jtds.jdbc.Driver • MySQL – org.gjt.mm.mysql.Driver
JDBC – príklad public Vector getBalances() throws AccountException { try { Connection conn = getConnection(); PreparedStatementpstmt = conn.prepareStatement(“SELECT*FROM account WHERE balace > ?"); pstmt.setDouble(1, 20000.0); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { result.add(rs.getDouble(“balance")); } return result; }catch (Exception e) { throw new AccountException(e); }finally { try { if (pstmt != null) pstmt.close(); }catch (Exception e) {} try { if (conn != null) conn.close(); }catch (Exception e) {} } }
JDBC – príklad protected Connection getConnection() { Class.forName(“org.gjt.mm.mysql.Driver”); String url = "jdbc:mysql://localhost:3306/dbname"; returnDriverManager.getConnection(url, “username", “password"); } protected Connection getConnection() { Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/appDS"); return ds.getConnection(); }
Java edície a ich verzie • JRE – Java Runtime Environment • JVM a základné knižnice potrebné pre vykonávanie programov • JSE – Standard Eddition • vývoj stand-alone (desktop) aplikácií • JRE, štandardné knižnice, zdrojové súbory a nástroje (javac, javadoc, ...)
Java edície a ich verzie • JME – Micro Eddition • vývoj aplikácií pre mobilné zariadenia (mobilné zariadenia – mobilné telefóny, PDA) • zariadenia majú predinštalované runtime prostredie • nástroje pre simuláciu mobilných zariadení • JEE – Enterprise Eddition • vývoj podnikových aplikácií • knižnice pre podnikové aplikácie, kontajnery, ... • nadstavba nad JSE (neobsahuje JRE, javac, jar)
Java edície a ich verzie • JSE ~ JRE • súčasnosť • Java ME • CLDC 1.1 - Connected Limited Device Configuration • CDC 1.1 - Connected Device Configuration • Java SE 1.4.x,5 (1.5.x) a 6 • JDK – Java Development Kit • Java EE 1.3,1.4, 5
JEE • The mission of JEE is to provide aplatform-independent, portable, multiuser, secure, and standard enterpriseclassplatform for server-side deployments written in the Java language. • JEE is a specification, not a product. • JEE definuje • programové rozhrania (APIs) • runtime environment (JEE kontajner) • čo majú poskytovať • ako sa majú používať
JEE APIs – z JSE • JDBC API 3.0 • Java DataBase Connectivity • RMI-IIOP • Remote Method Invocation over the Internet Inter-ORB Protocol • JNDI • Java Naming and Directory Interface • JAXP 1.2 • Java API for XML Processing • JAAS • Java Authentication and Authorization Service
JEE APIs – core • EJB 3.0 (2.1) 001 • Enterprise JavaBeans Technology • Servlet 2.5 010 • Java Servlet Technology • JSP 2.1 010 • JavaServer Pages Technology • JMS 1.1 111 • Java Message Service • JTA a JPA 011 • Java Transaction API a Java Persistance API
JEE APIs – WebServices • JAX-WS 2.0 111 • Java API for XML-Based Web Services • JAX-RPC 1.1 111 • Java API for XML-Based RPC • JAXB 2.0 111 • Java Architecture for XML Binding • SAAJ 1.2 111 • SOAP with Attachments API for Java • JAXR 1.0 111 • Java API for XML Registries (ebXML, UDDI)
JEE APIs – iné • JavaMail 1.3 111 • JavaMailAPI • JAF 1.1 111 • JavaBeans Activation Framework • JCA 1.5 011 • J2EE Connector Architecture
JEE APIs – iné • J2EE Management 1.0 1011 • JMX 1.2 1011 • Java Management Extensions • JACC 1.0 0011 • Java Authorization Contract for Containers
WEB aplikácie • Java Servlets • servlet • filter • JavaServer Pages – JSP • JSP stránky • tag libraries • JSTL, Struts tag libs, ... • custom tag libs • JavaServer Faces– JSF • Komponentový prístup pre vývoj web aplikácií • WEB (Servlet) kontajner
Servlet • podobné CGI, perl, ... • obsluha požiadaviek na základe request-u a generovanie response (HTML, XML, PDF, ...) • tvorba WEB (prezentačnej vrstvy) aplikácie • Java trieda odvodená od • javax.servlet.Servlet • javax.servlet.http.HttpServlet • HttpServlet • metódy volané WEB (Servlet) kontajnerom • doGet(HttpServletRequest, HttpServletResponse) • doPost(HttpServletRequest, HttpServletResponse) • ...
HttpServletRequest • reprezentuje HTTP request • HTTP parametre (GET, POST), hlavičky, ... • getParameter(String name) • getHeaders() • getCookies() • getLocale(), getContentType() • security • getRemoteUser() • getUserPrincipal() • isUserInRole(String role) • informácie o klientovi a contexte (IP, URL)
HttpServletResponse • reprezentuje HTTP response a jeho obsah • getWriter() • getOutputStream() • setContentType(String contentType) • addHeader(String name, String value) • addCookie(Cookie) • redirection • setStatus(int status) • sendRedirect(String location)
Ďalšie objekty Servlet API • HttpSession • perzistetné atribúty, ktoré sa vzťahujú k jednému používateľovi (sedenie) • getCreationTime() • getLastAccessTime() • getId() • ServletContext • globálne informácie pre danú aplikáciu (nepoužívať static premenné) • informácie o serveri, kontexte a zdrojoch servera
package examples; public class SearchAlbumServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { List albums = Album.findNamed(request.getParameter("name")); PrintWriter out = response.getWriter(); out.write(“<html><body><h1>Found albums:</h1>”); for (int i = 0; i < albums; i++) { Album album = (Album)albums.get(i); out.write(“<li>” + album.getName() ); } out.write(“</body></html>”); } } Servlet – príklad http://www.site.sk/app/searchAlbum?name=Rounds
Filter • wrapper requestov • doFilter(request, response, ...) • realizácia aspektov (AOP ???) • Authentication • Logging and Auditing • Image conversion • Data compression • Encryption • XSL/T
Filter – príklad public class AuditFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { AuditHelper auditHelper = getAuditHelper(request); if (auditHelper != null) { auditHelper.audit(request); } // Pass control on to the next filter chain.doFilter(request, response); } }
JSP– JavaServer Pages • principiálne podobné k PHP, ASP, ... • statické HTML s dynamicky generovanými časťami • scriptlety (časť JSP medzi<% … %>) • out, response, request premenné • JSP tagy • sprehľadnenie generovaného HTML • zrýchlenie vývoja • GUI design (možnosť použiť WYSIWYG nástroje) • programovanie • JSP je v runtime Servlet
JSP tag libraries • knižnice (jar) špecializovaných JSP tagov • sprehľadnenie kódu (JSP) • zlepšenie udržiavateľnosti • JSTL – Java Standard Tag Libraries • štandardná knižnica od Sun-u • custom libraries • Struts (bean, logic, html, nested) • jakarta tag libraries (SQL, ...) • definícia – *.tld súbor • class, name, attributes, scripting variables, ...
JSP – príklad <%@page import=“example.ArtistHelper" %> <HTML> … static HTML … <UL> <% ArtistHelperhelper = (ArtistHelper) request.getAttribute("helper"); for (int i = 0; i < helper.getAlbums().size(); i++) { out.print("<LI> "); out.print(((Album)helper.getAlbums().get(i)).getTitle()) out.print("</LI> "); } %> </UL> </HTML>
JSP – príklad <%@taglib uri="/taglibs/struts-bean" prefix="bean" %> <bean:define id="form" name="changePasswordForm" type="yonban.promasus.view.ChangePasswordForm" /> <html:form action="<%= form.getFormAction() %>“> <h1><bean:message key="title.changePassword" /></h1> <table cellpadding="5" cellspacing="0" border="0"> <nested:nest property="item"> <tr> <td><bean:messagekey="text.oldPassword" />:</td> <td><nested:password property="oldPassword" redisplay="false"/> </td> </tr> ... </table> </html:form>
WEB (Servlet) kontajner • runtime prostredie pre servlety, JSP, filtre • mapovanie URL na komponenty • security • API • WEB aplikácie • deployment v podobe .war súboru • .war (Web ARchive) – zip s koncovkou war • web.xml – deskriptor WEB komponentov • príklady kontajnerov – Tomcat, Resin
Štruktúra WAR / kontext root JSP, HTML,obrázky /META-INF/MANIFEST.MF /WEB-INF/classes/ súčasť classpath /WEB-INF/lib/ súčasť classpath /WEB-INF/web.xml deskriptor /WEB-INF/jboss-web.xml vendor specific deskriptor
WEB deskriptor – web.xml • definícia servletov a filtrov a ich inicializačných parametrov • mapovanie URL – servlet • mapovanie URL – filter • definícia JSP tag libraries • definícia security • definícia parametrov contextu (aplikácie) • ...
web.xml – príklad <servlet> <servlet-name>SearchAlbumServlet</servlet-name> <servlet-class>examples.SearchAlbumServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SearchAlbumServlet</servlet-name> <url-pattern>/searchAlbum</url-pattern> (/*.do, /secure/*) </servlet-mapping> ... <taglib> <taglib-uri>/taglibs/struts-bean</taglib-uri> <taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location> </taglib> ...
EJB • realizácia business logiky podnikových aplikácií • komponentovo orientované riešenia • znovupoužitie komponentov (reusing) • komponent = Enterprise JavaBeans (EJB) • Session EJB • Session Bean WebService • Entity EJB • MessageDriven EJB • EJB kontajner