JEE. Webové aplikace Servlety, JSP, JSF

Podobné dokumenty
JAVA. Webové aplikace Servlety, JSP

Platforma J2EE. Lukáš Zapletal liberix.cz. Platforma Java 2 Enterprise Edition vývoj webových aplikací

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Tvorba informačních systémů

Tvorba informačních systémů

Michal Krátký, Miroslav Beneš

Tvorba informačních systémů

Java Server-side. Štěpán Kuchař. VŠB-TUO FEI Katedra informatiky

Tvorba informačních systémů

Java technologie pro webové aplikace

1. Distribuce Javy. 2. Vlastnosti J2EE aplikace. 3. Fyzická architektura J2EE aplikace. Distribuce Javy se liší podle jejího zamýšleného použití:

Semináˇr Java XI Servlety, JSP Semináˇr Java XI p.1/38

X36WWW. Technologie aplikačních serverů. Miroslav Bureš,, Martin Klíma. X36WWW: 12. přednáška 1

Technologie Java Server Pages

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

X33EJA Enterprise Java

JavaServer Faces Zdeněk Troníček

KIV/PIA 2013 Jan Tichava

Servlety a JSP. Petr Adámek, petr.adamek@ibacz.eu

Tvorba informačních systémů

Základy programování v jazyce JAVA

}w!"#$%&'()+,-./012345<ya

České vysoké učení technické v Praze. Fakulta elektrotechnická. Katedra řídící techniky. Internetové rozhraní do Matlabu.

Tvorba informačních systémů

Nainstalujte zvolený server s podporou servletů a JSP, např. Jakarta/Tomcat nebo JBOSS.

UJO Framework. revoluční architektura beans. verze

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

Semináˇr Java X J2EE Semináˇr Java X p.1/23

Úvod do programovacích jazyků (Java)

(Enterprise) JavaBeans. Lekce 7

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Technologie Java. Jaroslav Žáček

Tvorba informačních systémů

Server-side technologie pro webové aplikace

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

WWW technologie. HTTP protokol

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Instalace a konfigurace web serveru. WA1 Martin Klíma

HTTP protokol. Zpracoval : Petr Novotný

Hypertext Transfer Protocol (HTTP/1.1 RFC 2616) Počítačové sítě Pavel Šinták

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Úvod. Petr Aubrecht (CA) Martin Ptáček (Wincor Nixdorf) Je 10 typů lidí: ti, kteří znají binární kód, a ti, kteří ne.

Tvorba podnikových aplikací v jazyce JAVA. Josef Pavlíček KII PEF CZU

JSP. Petr Aubrecht (CA) unzip; strip; touch; finger; mount; fsck; more; yes; unmount; sleep

Iterator & for cyklus

Úvod do tvorby internetových aplikací

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

HTML Hypertext Markup Language

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Protokol HTTP 4IZ228 tvorba webových stránek a aplikací

Java a XML. 10/26/09 1/7 Java a XML

KIV/PIA Semestrální práce

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

BI-AWD. Administrace Webového a Databázového serveru Virtualizace HTTP serveru

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Web Frameworks Java Server Faces. Petr Aubrecht CA

X33EJA. JSF aplikace

Web Services na SOAP

Programování v jazyce JavaScript

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do programovacích jazyků (Java)

Algoritmizace a programování

První kapitola úvod do problematiky

HTTP protokol. HTTP protokol - úvod. Zpracoval : Petr Novotný novotny0@students.zcu.cz

Úvod do aplikací internetu a přehled možností při tvorbě webu

Ant aneb Ferda Mravenec, práce všeho druhu

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Java a Caché IV: Manipulace s objekty

}w!"#$%&'()+,-./012345<ya

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

JAVA. Další jazyky kompilovatelné do Java byte-code

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

20. Projekt Domácí mediotéka

PREPROCESOR POKRAČOVÁNÍ

H.p protokol, request response

HTML - Úvod. Zpracoval: Petr Lasák

Programování v Javě I. Únor 2009

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Počítačové sítě II. 18. World Wide Web, HTTP Miroslav Spousta,

Tvorba WWW stránek. přehled technologií používaných na webu principy jednotlivých technologií a možnosti jejich vzájemného kombinování

Programování v C++ 2, 4. cvičení

JAVA Unit testing Java, zimní semestr

Session Beans. Petr Aubrecht CA. Vtipy budou tentokrát o krizi:

Obrázek 6.14: Prohlížec nápovedy

JAVA Moduly Java, letní semestr 2018

Zabezpečení webové vrstvy a EJB projektu Část nastavení specifická pro Glassfish, část dána Java EE

Programování v Javě I. Leden 2008

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

RMI Remote Method Invocation

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Teoretické minimum z PJV

1. Struktura stránky, zásady při psaní kódu, MVC pattern. Web pro kodéry (Petr Kosnar, ČVUT, FJFI, KFE, PINF 2008)

Úvod do Web Services

Java Platform, Enterprise Edition (Java EE)

BI-AWD. Administrace Webového a Databázového serveru Úvod do problematiky HTTP serveru

Elektronická podpora výuky předmětu Komprese dat

<Insert Picture Here> Vývoj portálových řešení v Javě

Transkript:

JEE Webové aplikace Servlety, JSP, JSF

JEE web aplikace servlety JSP JSF web services dependency injection EJB security persistency JEE JSE JME Java Card API

Přehled většina dnešních webových stránek je dynamická technologie a jazyky CGI, PHP, ASP,... dynamicita na straně serveru základní Java technologie servlety, Java Server Pages, Java Server Faces Servlet program v Javě běží uvnitř serveru (Java web container) obsluhuje požadavky od klienta (prohlížeče) JSP umožňují přímo do HTML kódu vkládat Java kód plus další elementy šablony JSF kombinace servletů a šablon

Přehled zdroj obrázku: https://docs.oracle.com/javaee/7/tutorial/webapp001.htm

HTTP různé verze 1.0, 1.1 textové 2.0 binární požadavek metoda cesta v rámci serveru verze GET /articles/article.html HTTP/1.1 Host: www.articles.com Connection: keep-alive další hlavičky Cache-Control: no-cache Pragma: no-cache Accept: text/html,application/xhtml+xml,application/xml; q=0.9,*/*;q=0.8 metody OPTIONS, HEAD, GET, POST, PUT, DELETE, TRACE

HTTP odpověď HTTP/1.1 200 OK Date: Sun, 09 Apr 2017 12:48:21 GMT Content-Type: text/html; charset=utf-8 Content-Length: 25503 Cache-Control: no-cache Content-Encoding: gzip tělo odpovědi... chybové kódy 1xx informační 2xx úspěch 3xx přesměrování 4xx chyby od klienta 5xx chyby serveru verze protokolu odpovědi chybový kód další hlavičky

JAVA Servlety

Struktura servletu API javax.servlet javax.servlet.http inteface javax.servlet.servlet každý server ho musí implementovat metody public void init(servletconfig config) throws ServletException; public ServletConfig getservletconfig(); public void service(servletrequest req, ServletResponse res) throws ServletException, IOException; public String getservletinfo(); public void destroy();

Struktura servletu interface Servlet se typicky neimplementuje přímo, ale přes třídu javax.servlet.http.httpservlet protected void service(httpservletrequest req, HttpServletResponse resp) přijme http požadavek distribuuje volání na do<něco>() metody obvykle se nepředefinovává předefinovávají se do<něco>() metody void doget(httpservletrequest req, HttpServletResponse resp) obsluha http GET požadavku ostatní do metody dopost, dodelete, dohead, doput, dooptions, dotrace stejné parametry jako doget long getlastmodified(httpservletrequest req)

Hello world package prg; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorldServlet extends HttpServlet { protected void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { res.setcontenttype("text/html"); PrintWriter out = res.getwriter(); out.println("<html><head><title>hello World!</TITLE>"+ "</HEAD><BODY><H2>Hello World!</H2></BODY></HTML>"); out.println("<hr><em>"+getservletinfo()+"</em>"); out.close(); } public String getservletinfo() { return "HelloWorldServlet 1.0"; }

Hello world web.xml <?xml version="1.0" encoding="iso-8859-2"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>hello</servlet-name> <servlet-class>prg.helloworldservlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/myhello</url-pattern> </servlet-mapping> </web-app> nebo přímo v kódu @WebServlet(urlPatterns = { "/myhello" }) public class HelloWorldServlet extends HttpServlet {...

Servlet na servru adresářová struktura...webapps/app-name/ META-INF/ manifest context.xml kontext aplikace WEB-INF/ classes/ přeložené třídy lib/ jar soubory web.xml statické stránky, obrázky,... server zakazuje přímý přístup k WEB-INF adresáři přesné umístění aplikace je závislé na serveru zdroj obrázku: https://docs.oracle.com/javaee/7/tutorial/packaging003.htm

Servery pro nasazení Tomcat http://tomcat.apache.org/ servlet container instalace servletu nakopírovat do webapps adresáře a restartovat použít Tomcat manager také servlet GlassFish https://glassfish.java.net/ nejen pro servlety instalace servletu nakopírovat do domain-dir/autodeploy/ nástroj as-admin

WAR Web ARchive (WAR) distribuce web-aplikací, instalování do serveru,... JAR soubor s adresářovou strukturou web-aplikace tj. WEB-INF, web.xml, classes... vytvoření ručně pomocí jar nebo zip pomocí Antu task war př: <target name="war" depends="compile"> <war destfile="helloworld.war" webxml="web.xml"> <classes dir="classes"/> </war> </target>

Životní cyklus servletu void init(servletconfig config) throws ServletException volá se automaticky při startu servletu volá se pouze jednou př. public void init(servletconfig config) throws ServletException { super.init(config); name = config.getinitparameter("name"); } init parametry lze nastavit v web.xml <servlet> <servlet-name>examplservlet</servlet-name> <servlet-class>examplservlet</servlet-class> <init-param> <param-name>name</param-name> <param-value>petr</param-value> </init-param> </servlet>

Životní cyklus servletu nebo lze nastavit parametry přímo v kódu vhodné pro implicitní hodnoty @WebServlet( urlpatterns = "/uploadfiles", initparams = @WebInitParam(name = "location", value = "/Uploads") ) public class FileUploadServlet extends HttpServlet {...

Životní cyklus servletu void init() throws ServletException init bez parametru předefinovat pokud nejsou potřeba init parametry volá se automaticky z init(servletconfig) public void destroy() volá se při ukončení servletu při ukončení servru při automatickém uvolnění servletu z paměti při ukončení z manageru

HttpServletRequest reprezentuje http požadavek String getheader(string name) Enumeration getheadernames() StringBuffer getrequesturl() String getscheme() String getservername() int getserverport() boolean issecure() String getquerystring() String getparameter(string name) Map getparametermap() Enumeration getparameternames()

HttpServletRequest...pokračování Cookie[] getcookies() HttpSession getsession() HttpSession getsession(boolean create) Cookie konstruktor Cookie(String name, String value) metody (get set)name, (get set)maxage, (get set)value HttpSession server automaticky rozhodne, zda se session udržuje přes cookies nebo přes URL metody getid, (get set)attribute, setmaxinactiveinterval, invalidate

HttpServletResponse sada konstant pro návratové kódy odpovědí SC_OK (200), SC_NOT_FOUND (404),... metody setcontenttype, setcontentencoding ServletOutputStream getoutputstream() void setstatus(int sc) void setheader(string name, String value) String encodeurl(java.lang.string url) přidá do URL identifikaci session při používání session by všechny URL ve výsledné stránce měli jít přes tuto metodu void addcookie(cookie cookie)

JAVA JSP

JSP přehled mix HTML a Javy (a speciálních tagů) JSP kód je v HTML vložen pomocí <% JSP kód %> př: <html><body> <H1>The time in seconds is: <%= System.currentTimeMillis()/1000 %></H1> </body></html> JSP stránky se do WAR struktury umístí na stejné místo jako normální statické elementy tj. mimo WEB-INF

JSP přehled postup zpracování požadavku na JSP při prvním požadavku na JSP se vytvoří Java kód, který implementuje Servlet servlet je přeložen a.class soubor(y) uložen do spec. adresáře vytvořena instance servletu dále jako u běžného servletu při překladu JSP -> Java kód mezi <% %> se zkopíruje html kód se přeloží na out.print(... ) typy JSP elementů skriptovací elementy direktivy JSP akce (tagy) vlastní (vývojářem definované) akce (tagy)

Skriptovací elementy deklarace uzavřeno v <%! %> jedna nebo více deklarací v jazyce Java spouští se při první návštěvě stránky nebo v okamžiku, kdy kontejner JSP opětovně inicializuje stránku výraz uzavřeno v <%= %> jeden výraz v jazyce Java výsledek je hodnota výrazu spouští se při každém přístupu skriptlet uzavřeno v <% %> Java kód spouští se při každém přístupu

Příklady <HTML> <BODY> Hello! The time is now <%= new java.util.date() %> </BODY> </HTML> <TABLE BORDER=2> <% for ( int i = 0; i < n; i++ ) { %> <TR> <TD>Number</TD> <TD><%= i+1 %></TD> </TR> <% } %> </TABLE>

Příklady <HTML> <BODY> <%! int thenumber = 42; int getnuber() { return thenumber; } %> Hello <%= getnumber() %> </BODY> </HTML>

Proměnné v JSP vytvořené v deklaraci JSP platné v celé JSP stránce definované na úrovni třídy vytvoří se a inicializuje při instanciování servletu (vytvořeného z JSP) vytvořené ve skriptletech JSP platné v daném skriptletu definovaná na úrovni metody vytvoří se a inicializuje při každém přístupu na stránku nelze definovat metody ve skriptletech protože kód skriptletů je uvnitř (při překladu do servletu vytvořené) metody

Komentáře v JSP Java komentáře ve skriptletech // komentář /* komentář */ JSP komentáře <%-- komentář --%> lze v nich zakomentovat jiné JSP elementy <%-- Zakomentováno: <%= "Hello" %><br> --%> HTML komentáře <!-- komentář --> dostanou se do výsledné stránky

Implicitní objekty v JSP automaticky vytvářené objekty lze je použít ve výrazech a skriptletech nelze je použít v deklaracích vytvářejí se až později request instance HttpServletRequest response instance HttpServletResponse out výstup na výslednou stránku instance jsp.jspwriter session instance HttpSession

Implicitní objekty v JSP application instance ServletContext config instance ServletConfig page reference na aktuálně zpracovávanou stránku pagecontext instance PageContext popis prostředí, v němž jsou všechny stránky spuštěny

Direktivy ovlivňují jak se má vygenerovat servlet z JSP 3 direktivy page include taglib použití <%@ direktiva atribut1= hotnota1... atributn= hodnotan %> include <%@ include file= relativní URL %> vloží soubor v době překladu stránky taglib importuje knihovnu uživatelsky-definovaných elementů <%@ taglib uri= soubor TLD prefix= předpona %>

Direktiva page různé použití parametry import errorpage, iserrorpage session info language contenttype isthreadsafe buffer autoflush

Direktiva page import import tříd a balíčků <%@ page import=balíček.třída %> errorpage specifikuje stránku, která slouží ke zpracování výjimek nezachycených na aktuální stránce <%@ page errorpage= relativní URL %> iserrorpage zda aktuální stránka je chybová implicitně false session zda se pro stránku má udržovat session <%@ page session= false %> info informace o stránce typicky autor, copyright,... <%@ page info= Petr, 2012 %>

Direktiva page language (programovací) jazyk JSP <%@ page language= java %> contenttype implicitní hodnota text/html; charset=iso-8859-1 <%@ page contenttype= text/plain; charset=utf-8 %> autoflush implicitně true při false se po naplnění buffer nevyprázdní, ale bude vyvolána výjimka IOException JspWriter.flush() <%@ page autoflush= false %> extends přímý předek pro vygenerovaný servlet <%@ page extends= třída %>

JSP akce (tagy) jsp:include vloží soubor nebo výsledek do JSP statický soubor (př. html) se vloží dynamický se provede (př. jsp) a vloží se výsledek provede se při každém požadavku na stránku <jsp:include page="hello.jsp"/> jsp:param přidání parametrů k jsp:include <jsp:include page="scripts/login.jsp"> <jsp:param name="username" value="petr" /> </jsp:include> jsp:forward předání aktuálního požadavku jiné JSP <jsp:forward page= ordererror.jsp > <jsp:param name= errortype value= badamount /> </jsp:forward>

JSP akce (tagy) jsp:plugin vložení appletu nebo JavaBean do stránky <jsp:plugin type= applet code= consumerapplet name= consumer codebase= classes width= 150 height= 50 > <jsp:params> <jsp:param name="user" value="applet" /> </jsp:params> <jsp:fallback> <p>unable to load applet</p> </jsp:fallback> </jsp:plugin>

JSP akce (tagy) používání JavaBeans jsp:usebean vytvoření instance jsp:getproperty čtení property jsp:setproperty nastavení property př: <jsp:usebean id="checking" scope="session" class="bank.checking" > <jsp:setproperty name="checking" property="balance" value="0.0" /> </jsp:usebean> <jsp:setproperty name="mybean" property="*" /> uloží všechny parametry požadavku jako property jména musejí souhlasit

Expression Language (EL) usebean, (get set)property jsou užitečné, ale špatně použitelné řešení od JSP 2.0 Expression Language přímé použití objektů v JSP stránce ${item} lze použít nejen na JavaBeans na vlastnosti bean se odkazuje tečkovou notací ${checking.balance} alternativně lze použít i ${checking["balance"]} vhodné pokud je potřeba zkonstruovat jméno vlastnosti dynamicky

Expression Language (EL) EL lze používat s operátory ${ 1 + 2 * 3 } operátory aritmetické + - * / div relační == eq!= ne < lt > gt <= le >= ge logické && and or! not empty ternární ${ test? expr1 : expr2 } zakázání EL na stránce <%@ page iselenabled="false" %>

Tag libraries direktiva taglib importuje knihovnu uživatelsky-definovaných elementů př: <%@ taglib uri= /tlt prefix= tlt %> <tlt:tag> body </tlt:tag> <tlt:greetings/> vytváření vlastních tagů potomci javax.servlet.jsp.tagext.tagsupport metody dostarttag(), doendtag(),...

Vlastní tag třída implementující javax.servlet.jsp.tagext.tag typicky potomci od TagSupport nebo BodyTagSupport předefinování metod dostarttag(), doendtag(),... xml soubor popisující knihovnu tagů mapování jmen na třídy

Vlastní tag příklad public class ExampleTag extends TagSupport { public int dostarttag() throws JspException { try { JspWriter out = pagecontext.getout(); out.print("hello world"); } catch(ioexception e) { throw new JspException(e.getMessage()); } return(skip_body); } }

Vlastní tag příklad <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>vsjava</shortname> <urn></urn> <info>our HelloWorld library</info> <tag> <name>example</name> <tagclass>vsjava.jsp.tags.exampletag</tagclass> <info>helloworld tag</info> <bodycontent>empty</bodycontent> </tag> <!-- další tagy... --> </taglib>

Vlastní tag příklad <html> <head> <%@ taglib uri="vsjava-taglib.tld" prefix="vsjava" %> <title><vsjava:example /></title> </head> <body> <vsjava:example /> </body> </html>

Propojení JSP a servletů servlety výhodné pro složitý kód nevýhodné pro generování HTML JSP obráceně řešení použít oboje servlet pro business logiku aplikace JSP pro generování HTML ala MVC model beans view JSP controller servlet

Propojení JSP a servletů Příklad Servlet ValueObject value = new ValueObject(...); request.setattribute("key", value); RequestDispatcher dispatcher = request.getrequestdispatcher("/web-inf/somepage.jsp"); dispatcher.forward(request, response); JSP Page <jsp:usebean id="key" type="somepackage.valueobject" scope="request" /> <jsp:getproperty name="key" property="someproperty" />

Propojení JSP a servletů Předchozí příklad sdílení dat mezi servletem a JSP jen v rámci jednoho požadavku Servlet ValueObject value = new ValueObject(...); request.setattribute("key", value); RequestDispatcher dispatcher = request.getrequestdispatcher("/web-inf/somepage.jsp"); dispatcher.forward(request, response); JSP Page <jsp:usebean id="key" type="somepackage.valueobject" scope="request" /> <jsp:getproperty name="key" property="someproperty" /> nebo ${key.someproperty}

Propojení JSP a servletů Sdílení dat v rámci session Servlet ValueObject value = new ValueObject(...); HttpSession session = request.getsession(); session.setattribute("key", value); RequestDispatcher dispatcher = request.getrequestdispatcher("/web-inf/somepage.jsp"); dispatcher.forward(request, response); JSP Page <jsp:usebean id="key" type="somepackage.valueobject" scope="session" /> <jsp:getproperty name="key" property="someproperty" />

Propojení JSP a servletů Sdílení dat v rámci aplikace Servlet ValueObject value = new ValueObject(...); getservletcontext().setattribute("key", value); RequestDispatcher dispatcher = request.getrequestdispatcher("/web-inf/somepage.jsp"); dispatcher.forward(request, response); JSP Page <jsp:usebean id="key" type="somepackage.valueobject" scope="application" /> <jsp:getproperty name="key" property="someproperty" />

JAVA JSF

Přehled komponentový framework skládání aplikace z hotových komponent náhrada za JSP JSP je stále součástí JEE podobné jako kombinace JSP a servletů na předchozích slidech zdroj obrázku: https://docs.oracle.com/javaee/7/tutorial/jsf-intro001.htm

JSF aplikace webová stránka složená z komponent facelets deklarativní jazyk pro definici stránek (šablony) starší verze JSF používaly JSP XHTML, expression language, tag libs managed beans s daty a metodami Java Beans FacesServlet předdefinovaný servlet požadavky směřují na něj

Facelets <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html"> <h:head> <title>facelets Hello Greeting</title> </h:head> <h:body> <h:form> <h:graphicimage url="#{resource['images:duke.waving.gif']}" alt="duke waving his hand"/> <h2>hello, my name is Duke. What's yours?</h2> <h:inputtext id="username" title="my name is: " value="#{hello.name}" required="true" requiredmessage="error: A name is required." maxlength="25" /> <p></p> <h:commandbutton id="submit" value="submit" action="response"> </h:commandbutton> <h:commandbutton id="reset" value="reset" type="reset"> </h:commandbutton> </h:form>...

Managed beans @Named @RequestScoped public class Hello { @SessionScoped @ApplicationScoped private String name; public Hello() { } public String getname() { return name; } } public void setname(string user_name) { this.name = user_name; }

Servlet mapping web.xml <servlet> <servlet-name>faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.facesservlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.xhtml</welcome-file> </welcome-file-list>

Skládání komponent tvorba komponent (šablon) z existujících <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:composite="http://xmlns.jcp.org/jsf/composite" xmlns:h="http://xmlns.jcp.org/jsf/html"> <h:head> <title>this content will not be displayed</title> </h:head> <h:body> <composite:interface> <composite:attribute name="value" required="false"/> </composite:interface> </html> <composite:implementation> <h:outputlabel value="email id: "></h:outputlabel> <h:inputtext value="#{cc.attrs.value}"></h:inputtext> </composite:implementation> </h:body>

Converters <h:outputtext value="#{cashierbean.shipdate}"> <f:convertdatetime type="date" datestyle="full" /> </h:outputtext> <h:outputtext value="#{cart.total}"> <f:convertnumber currencysymbol="$" type="currency"/> </h:outputtext> NumberConverter DateTimeConverter EnumConverter BooleanConverter ShortConverter

Listeners <h:inputtext id="name" size="30" value="#{cashierbean.name}" required="true" requiredmessage="#{bundle.reqcustomername}"> <f:valuechangelistener type="my.app.listeners.namechanged" /> </h:inputtext> <h:commandlink id="duke" action="bookstore"> <f:actionlistener type="my.app.listeners.linkbookchange" /> <h:outputtext value="#{bundle.book201}"/> </h:commandlink>

Validators <h:inputtext id="quantity" size="4" value="#{item.quantity}"> <f:validatelongrange minimum="1"/> </h:inputtext> <h:message for="quantity"/> LengthValidator RequiredValidator RegexValidator...

JSF...

Java, letní semestr Verze prezentace 2017 AJ08.cz.2017.01 Tato prezentace podléhá licenci Creative Commons Uveďte autora-neužívejte komerčně 4.0 Mezinárodní License. 61