Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
alx_java2b_20250412
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
alx_java2b_20250412
Commits
95d0f5e7
Commit
95d0f5e7
authored
Apr 27, 2025
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Przykład JSP wraz z tagami JSTL
parent
7b686088
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
172 additions
and
7 deletions
+172
-7
pom.xml
PC22-Serwlety/pom.xml
+17
-0
PrzykladowyBean.java
PC22-Serwlety/src/main/java/serwlety/PrzykladowyBean.java
+60
-0
przyklad.jsp
PC22-Serwlety/src/main/webapp/przyklad.jsp
+95
-7
No files found.
PC22-Serwlety/pom.xml
View file @
95d0f5e7
...
@@ -12,12 +12,29 @@
...
@@ -12,12 +12,29 @@
</properties>
</properties>
<dependencies>
<dependencies>
<!-- zakres `provided` oznacza, że dana biblioteka nie będzie dodawana do paczki war
tylko przyjmujemy założenie, że ta technologia jest dostępna w środowisku uruchomieniowym (np. na serwerze WildFly)
-->
<dependency>
<dependency>
<groupId>
jakarta.servlet
</groupId>
<groupId>
jakarta.servlet
</groupId>
<artifactId>
jakarta.servlet-api
</artifactId>
<artifactId>
jakarta.servlet-api
</artifactId>
<version>
6.0.0
</version>
<version>
6.0.0
</version>
<scope>
provided
</scope>
<scope>
provided
</scope>
</dependency>
</dependency>
<dependency>
<groupId>
jakarta.servlet.jsp.jstl
</groupId>
<artifactId>
jakarta.servlet.jsp.jstl-api
</artifactId>
<version>
3.0.2
</version>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
org.glassfish.web
</groupId>
<artifactId>
jakarta.servlet.jsp.jstl
</artifactId>
<version>
3.0.1
</version>
<!-- jbc Maven pozwala też podawać zakresy wersji, ale wtedy mamy 'niestabilne buildy'
<version>[3.0.0, 4)</version>-->
<scope>
provided
</scope>
</dependency>
</dependencies>
</dependencies>
<build>
<build>
...
...
PC22-Serwlety/src/main/java/serwlety/PrzykladowyBean.java
0 → 100644
View file @
95d0f5e7
package
serwlety
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.concurrent.ThreadLocalRandom
;
import
java.util.concurrent.atomic.AtomicInteger
;
/* Klasa spełnia wymagania "JavaBean", gdy:
- posiada konstruktor domyślny (publiczny, bezargumentowy)
- dostęp do własności (property) odbywa się poprzez metody dostępowe "gettery i settery"
*/
public
class
PrzykladowyBean
{
private
String
text
=
""
;
private
AtomicInteger
value
=
new
AtomicInteger
();
public
String
getText
()
{
return
text
;
}
public
void
setText
(
String
text
)
{
this
.
text
=
text
;
}
public
int
getValue
()
{
return
value
.
incrementAndGet
();
}
// Można utworzyć metodę, która wygląda jak getter, ale nie odczytuje żadnej zmiennej,
// tylko pobiera dane w inny sposób.
public
LocalDateTime
getCurrentTime
()
{
return
LocalDateTime
.
now
();
}
public
long
getRandom
()
{
return
ThreadLocalRandom
.
current
().
nextLong
();
}
public
String
wypiszPowitanie
()
{
return
"Witaj szanowny kliencie"
;
}
public
String
innePowitanie
(
String
imie
)
{
return
"Witaj "
+
imie
;
}
public
void
reset
()
{
value
.
set
(
0
);
text
=
""
;
}
public
List
<
String
>
getWords
()
{
return
List
.
of
(
text
.
split
(
"\\s+"
));
}
@Override
public
String
toString
()
{
return
"PrzykladowyBean z tekstem "
+
text
+
", aktualna wartość licznika "
+
value
.
get
();
}
}
PC22-Serwlety/src/main/webapp/przyklad.jsp
View file @
95d0f5e7
<
%@
page
language=
"java"
contentType=
"text/html; charset=UTF-8"
pageEncoding=
"UTF-8"
%
>
<
%@
page
language=
"java"
contentType=
"text/html; charset=UTF-8"
pageEncoding=
"UTF-8"
%
>
<
%@
page
import=
"java.time.LocalTime"
%
>
<
%@
page
import=
"java.time.LocalTime"
%
>
<
%@
page
import=
"java.util.concurrent.atomic.AtomicInteger"
%
>
<
%@
page
import=
"java.util.concurrent.atomic.AtomicInteger"
%
>
<
%@
taglib
prefix=
"c"
uri=
"jakarta.tags.core"
%
>
<!DOCTYPE html>
<!DOCTYPE html>
<html>
<html>
<head>
<head>
<meta
charset=
"UTF-8"
>
<meta
charset=
"UTF-8"
>
<title>
Przykład pliku JSP
</title>
<title>
Przykład pliku JSP
</title>
</head>
</head>
<body>
<body>
<h1>
Przykład JSP
</h1>
<h1>
Przykład JSP
</h1>
<p>
To jest zwykły tekst
</p>
<p>
To jest zwykły tekst
</p>
<form>
<label
for=
"imie"
>
Podaj imię:
</label>
<input
type=
"text"
name=
"imie"
id=
"imie"
>
<br>
<button>
Wyślij
</button>
</form>
<h2>
Skryptlety
</h2>
<
%
--
Plik
JSP
jest
na
serwerze
t
ł
umaczony
na
klas
ę
serwletu
i
kompilowany
.
--
%
>
<
%
--
to
jest
komentarz
JSP
-
to
nie
zostanie
wys
ł
ane
do
klienta
--
%
>
<
%
--
to
jest
komentarz
JSP
-
to
nie
zostanie
wys
ł
ane
do
klienta
--
%
>
<!-- to jest komentarz HTML - to ZOSTANIE wysłane do klienta -->
<!-- to jest komentarz HTML - to ZOSTANIE wysłane do klienta -->
<
%
<
%
int
x =
100;
int
x =
100;
out
.
println
("
x
przed
zmian
ą
=
"
+
x
+
"<
br
>
");
String
[]
imiona =
{"Ala",
"
Ola
",
"
Ela
"};
x += 50;
out
.
println
("
x
przed
zmian
ą
=
"
+
x
+
"<
br
>
");
out.println("x po zmianie = " + x + "
<br>
");
x += 50;
out.println("x po zmianie = " + x + "
<br>
");
%>
%>
<p>
Wartość zmiennej:
<
%=
x
%
></p>
<p>
Wartość zmiennej:
<
%=
x
%
></p>
<p>
Bieżący czas:
<
%=
LocalTime
.
now
()
%
></p>
<p>
Bieżący czas:
<
%=
LocalTime
.
now
()
%
></p>
<
%
--
brzydki
styl
,
ale
dzia
ł
a:
--
%
>
<ul>
<
%
for
(
String
imie
:
imiona
)
{
%
>
<li><
%=
imie
%
></li>
<
%
}
%
>
</ul>
<
%
--
skryptlet
typu
deklaracja
-
ten
kod
jest
umieszczany
na
poziomie
klasy
,
a
nie
wewn
ą
trz
metod
--
%
>
<
%
--
skryptlet
typu
deklaracja
-
ten
kod
jest
umieszczany
na
poziomie
klasy
,
a
nie
wewn
ą
trz
metod
--
%
>
<
%!
<
%!
private
final
AtomicInteger
licznik =
new
AtomicInteger
();
private
final
AtomicInteger
licznik =
new
AtomicInteger
();
String
hello
()
{
String
hello
()
{
return
"
Hello
hello
";
return
"
Hello
hello
";
}
}
...
@@ -34,9 +51,80 @@ out.println("x po zmianie = " + x + "<br>");
...
@@ -34,9 +51,80 @@ out.println("x po zmianie = " + x + "<br>");
<p>
Wartość licznika
<
%=
licznik
.
incrementAndGet
()
%
>
<p>
Wartość licznika
<
%=
licznik
.
incrementAndGet
()
%
>
<p>
Wywołanie
<
%=
hello
()
%
>
<p>
Wywołanie
<
%=
hello
()
%
>
<hr>
<h2>
Expression Language
</h2>
<h2>
Expression Language
</h2>
<p>
Wynik działania EL: ${2+3*4}
</p>
<p>
Wynik działania EL: ${2+3*4}
</p>
<p>
Parametr imie za pomocą EL : ${param.imie}
</p>
<p>
Parametr imie za pomocą %= :
<
%=
request
.
getParameter
("
imie
")
%
></p>
<hr>
<h2>
Beany
</h2>
<jsp:useBean
id=
"obiekt"
class=
"serwlety.PrzykladowyBean"
/>
<
%
--
To
jest
wywo
ł
anie
toString:
--
%
>
<p>
Po utworzeniu obiekt jest taki: ${obiekt}
</p>
<
%
--
To
jest
wywo
ł
anie
gettera:
--
%
>
<p>
Kolejna wartość licznika: ${obiekt.value}
</p>
<
%
--
Istniej
ą
te
ż
tagi
jsp
dedykowane
do
odczytu
i
zapisu
(!)
w
ł
asno
ś
ci
.
Tak
naprawd
ę
s
ą
realizowane
poprzez
wywo
ł
ania
gettera
i
settera
.
--
%
>
<p>
Kolejna za pomocą
<code>
getProperty
</code>
:
<jsp:getProperty
name=
"obiekt"
property=
"value"
/>
</p>
<jsp:setProperty
name=
"obiekt"
property=
"text"
value=
"Ala ma ${2+3} kotów"
/>
<p>
Tekst po ustawieniu: ${obiekt.text}
</p>
<p>
Cały obiekt: ${obiekt}
</p>
<jsp:setProperty
name=
"obiekt"
property=
"text"
param=
"imie"
/>
<p>
Tekst po ustawieniu z parametru: ${obiekt.text}
</p>
<p>
Cały obiekt: ${obiekt}
</p>
<p>
Bieżący czas: ${obiekt.currentTime}, sama sekunda ${obiekt.currentTime.second},
dzień roku ${obiekt.currentTime.dayOfYear}
</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
(...)
--
%
>
<p>
Metoda: ${obiekt.wypiszPowitanie()}
</p>
<p>
Metoda z parametrem stałym: ${obiekt.innePowitanie("Ula")}
</p>
<p>
Metoda z parametrem z zapytania: ${obiekt.innePowitanie(param.imie)}
</p>
<p>
Metoda void ${obiekt.reset()}
</p>
<p>
Obiekt na końcu ${obiekt}
</p>
<hr>
<h2>
Biblioteki tagów
</h2>
<
%
--
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" (ostatnio Java → Jakarta ;) )
--%>
<c:if
test=
"${not empty(param.imie)}"
>
<div
style=
"border: solid green 3px; padding: 1em"
>
Pozdrawiamy osobę o imieniu ${param.imie}
</div>
</c:if>
<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>
<jsp:setProperty
name=
"obiekt"
property=
"text"
value=
"Ala ma kota a Ola ma psa"
/>
<p>
Cały napis: ${obiekt.text}
</p>
<p>
Słowa napisu:
</p>
<ol>
<c:forEach
var=
"word"
items=
"${obiekt.words}"
>
<li>
${word}
</li>
</c:forEach>
</ol>
</body>
</body>
</html>
</html>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment