Commit 794888fd by Patryk Czarnik

JSP z beanami i taglibami

parent 6a1d5207
...@@ -29,6 +29,24 @@ ...@@ -29,6 +29,24 @@
<artifactId>commons-lang3</artifactId> <artifactId>commons-lang3</artifactId>
<version>3.14.0</version> <version>3.14.0</version>
</dependency> </dependency>
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<!-- stara klasyczna wersja - tylko dla starszych serwerów. Java EE 8 lub starsze: -->
<!-- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency> -->
</dependencies> </dependencies>
<build> <build>
......
package serwlety.beans;
import java.util.Random;
public class PrzykladowyBean {
private String napis = "Ala ma kota";
private Random random = new Random();
private int liczba;
public String getNapis() {
return napis;
}
public String getNapisDuzymiLiterami() {
return napis.toUpperCase();
}
public void setNapis(String napis) {
this.napis = napis;
}
public String[] getWords() {
return napis.split(" ");
}
public int wylosuj() {
return random.nextInt(1000);
}
@Override
public String toString() {
return "PrzykladowyBean z zawartością " + napis;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="jakarta.tags.core" %>
<html> <html>
<head> <head>
<title>Title</title> <title>Title</title>
...@@ -10,6 +11,13 @@ ...@@ -10,6 +11,13 @@
<p>Wynik operacji Java: <%= java.time.LocalTime.now() %></p> <p>Wynik operacji Java: <%= java.time.LocalTime.now() %></p>
<p>Wynik wyrażenia EL: ${2+3*4}</p> <p>Wynik wyrażenia EL: ${2+3*4}</p>
<form>
<label for="imie">Podaj imię:</label>
<input type="text" name="imie" id="imie">
<br>
<button>Wyślij</button>
</form>
<h3>Skryptlety - różne wersje</h3> <h3>Skryptlety - różne wersje</h3>
<!-- To jest komentarz HTML - on będzie wysłany do klienta --> <!-- To jest komentarz HTML - on będzie wysłany do klienta -->
<%-- To jest komentarz w JSP. Klient tego nie zobaczy --%> <%-- To jest komentarz w JSP. Klient tego nie zobaczy --%>
...@@ -21,14 +29,23 @@ ...@@ -21,14 +29,23 @@
out.println("Hej, tu Java wewnątrz JSP"); out.println("Hej, tu Java wewnątrz JSP");
System.out.println("a kuku"); System.out.println("a kuku");
int x = 321; int x = 321;
String[] imiona = {"Ala", "Ola", "Ela"};
%> %>
<p>Znowu tryb HTML</p> <p>Znowu tryb HTML</p>
<%-- brzydki styl, ale działa: --%>
<ul>
<% for(String imie : imiona) { %>
<li><%= imie%></li>
<% } %>
</ul>
<%-- Istnieją specjalne wersje skryptletów. <%-- Istnieją specjalne wersje skryptletów.
Powyżej widzielismy zwykły blok kodu. Powyżej widzielismy zwykły blok kodu.
Poniżej zobaczymy wstawienie wartości do outputu: --%> Poniżej zobaczymy wstawienie wartości do outputu: --%>
<p>Wypisanie wyniku: <%= 2*x %></p> <p>Wypisanie wyniku: <%= 2*x %></p>
<p>Odczyt czasu: <%= java.time.LocalTime.now() %></p> <p>Odczyt czasu: <%= java.time.LocalTime.now() %></p>
<p>Prametr imie: <%= request.getParameter("imie") %></p>
<%! <%!
static int licznik = 100; static int licznik = 100;
...@@ -40,5 +57,65 @@ ...@@ -40,5 +57,65 @@
<p>Metoda: <%= dajGlos() %></p> <p>Metoda: <%= dajGlos() %></p>
<%-- Plik JSP jest na serwerze tłumaczony na klasę serwletu i kompilowany. --%> <%-- Plik JSP jest na serwerze tłumaczony na klasę serwletu i kompilowany. --%>
<h2>Inne sposoby</h2>
<p>Mądrzejszy sposób korzystania z JSP łączy takie trzy techniki:</p>
<ol>
<li><strong>Expression Language (EL)</strong> - wyrażenia wpisywane w znacznikach <code>$ { }</code>,
<li><strong>beans</strong> - obiekty przygotowane po stronie aplikacji lub w samym skrypcie JSP, do których JSP ma dostęp,
<li><strong>taglibs</strong> - biblioteki dodatkowych tagów, które działają jak polecenia, chociaż są pisane jak tagi HTML.
</ol>
<h3>EL</h3>
<%-- proste wyrażenie EL --%>
<p>Wynik obliczenia: ${2 + 3 * 4}</p>
<p>Parametr imie: <strong>${param.imie}</strong></p>
<jsp:useBean id="obiekt" class="serwlety.beans.PrzykladowyBean"/>
<p>Obiekt beanowy: ${obiekt}</p>
<p>Napis: ${obiekt.napis}</p>
<p>Napis DL: ${obiekt.napisDuzymiLiterami}</p>
<%-- <p>Napis: ${obiekt.liczba}</p> -->
<%-- Można wywoływać metody o nazwach niezgodnych z konwencją getterów: --%>
<p>Wywołanie metody: ${obiekt.wylosuj()}</p>
<jsp:setProperty property="napis" name="obiekt" value="Ola ma psa"/>
<p>Napis po zmianie: ${obiekt.napis}</p>
<p>Duże litery: ${obiekt.napisDuzymiLiterami}</p>
<%-- Gdy wpisujemy odwołanie do obiektu, to jest on printowany za pomocą toString().
Gdy wpiszemy coś, co wygląda na odczyt pola obiektu, to jest wywoływany getter zwracający to property,
np. osoba.wiek powoduje wywołanie getWiek()
Gdy wpiszemy coś z nawiasami na końcu, to jest to wywołanie metody.
Polecenie setProperty skutkuje wywołaniem settera, np. setNapis(...)
--%>
<%-- Biblioteka tagów ("taglib") to jest zestaw poleceń zapisywanych w formie znaczników w obrębie JSP.
Te znaczniki zawsze są poprzedzane prefiksem, np. <c:if>....
Tagliby można definiować samodzielnie, ale w 98% przypadków używa się zestawu nazywanego JSTL
"Java Standard Tag Library"
--%>
<h3>Taglibs</h3>
<ul>
<c:forEach var="i" items="5,10,15">
<li>${i}
<c:choose>
<c:when test="${i % 2 == 0}">parzyste</c:when>
<c:otherwise>nieparzyste</c:otherwise>
</c:choose>
</li>
</c:forEach>
</ul>
<p>Słowa napisu:</p>
<ul>
<c:forEach var="word" items="${obiekt.words}">
<li>${word}</li>
</c:forEach>
</ul>
</body> </body>
</html> </html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment