Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
2
20240528-BJava
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
20240528-BJava
Commits
65bb8a22
Commit
65bb8a22
authored
Jun 12, 2024
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Dodatkowe wersje kalkulatora - SESJA
parent
4ac1ed5e
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
296 additions
and
20 deletions
+296
-20
Kalkulator3.java
...rwlety/src/main/java/serwlety/kalkulator/Kalkulator3.java
+1
-1
Kalkulator4.java
...rwlety/src/main/java/serwlety/kalkulator/Kalkulator4.java
+2
-14
Kalkulator5.java
...rwlety/src/main/java/serwlety/kalkulator/Kalkulator5.java
+1
-2
Kalkulator6.java
...rwlety/src/main/java/serwlety/kalkulator/Kalkulator6.java
+2
-3
Kalkulator7.java
...rwlety/src/main/java/serwlety/kalkulator/Kalkulator7.java
+115
-0
Kalkulator8.java
...rwlety/src/main/java/serwlety/kalkulator/Kalkulator8.java
+127
-0
ListenerHistorii.java
...y/src/main/java/serwlety/kalkulator/ListenerHistorii.java
+48
-0
No files found.
PC23-Serwlety/src/main/java/serwlety/kalkulator/Kalkulator3.java
View file @
65bb8a22
...
@@ -11,7 +11,7 @@ import jakarta.servlet.http.HttpServlet;
...
@@ -11,7 +11,7 @@ import jakarta.servlet.http.HttpServlet;
import
jakarta.servlet.http.HttpServletRequest
;
import
jakarta.servlet.http.HttpServletRequest
;
import
jakarta.servlet.http.HttpServletResponse
;
import
jakarta.servlet.http.HttpServletResponse
;
@WebServlet
(
"/
K
alkulator3"
)
@WebServlet
(
"/
k
alkulator3"
)
public
class
Kalkulator3
extends
HttpServlet
{
public
class
Kalkulator3
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
private
static
final
long
serialVersionUID
=
1L
;
...
...
PC23-Serwlety/src/main/java/serwlety/kalkulator/Kalkulator4.java
View file @
65bb8a22
...
@@ -9,9 +9,8 @@ import jakarta.servlet.http.HttpServlet;
...
@@ -9,9 +9,8 @@ import jakarta.servlet.http.HttpServlet;
import
jakarta.servlet.http.HttpServletRequest
;
import
jakarta.servlet.http.HttpServletRequest
;
import
jakarta.servlet.http.HttpServletResponse
;
import
jakarta.servlet.http.HttpServletResponse
;
@WebServlet
(
"/
K
alkulator4"
)
@WebServlet
(
"/
k
alkulator4"
)
public
class
Kalkulator4
extends
HttpServlet
{
public
class
Kalkulator4
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
@Override
@Override
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
...
@@ -73,7 +72,7 @@ public class Kalkulator4 extends HttpServlet {
...
@@ -73,7 +72,7 @@ public class Kalkulator4 extends HttpServlet {
try
{
try
{
long
liczba1
=
Long
.
parseLong
(
param1
);
long
liczba1
=
Long
.
parseLong
(
param1
);
long
liczba2
=
Long
.
parseLong
(
param2
);
long
liczba2
=
Long
.
parseLong
(
param2
);
long
wynik
=
oblicz
(
operacja
,
liczba1
,
liczba2
);
long
wynik
=
LogikaKalkulatora
.
oblicz
(
liczba1
,
liczba2
,
operacja
);
out
.
printf
(
"<div class='wynik'>%d %s %d = <strong>%d</strong></div>\n"
,
out
.
printf
(
"<div class='wynik'>%d %s %d = <strong>%d</strong></div>\n"
,
liczba1
,
operacja
,
liczba2
,
wynik
);
liczba1
,
operacja
,
liczba2
,
wynik
);
}
catch
(
NumberFormatException
e
)
{
}
catch
(
NumberFormatException
e
)
{
...
@@ -82,15 +81,4 @@ public class Kalkulator4 extends HttpServlet {
...
@@ -82,15 +81,4 @@ public class Kalkulator4 extends HttpServlet {
out
.
printf
(
"<div class='error'>Błąd: %s</div>\n"
,
e
.
getMessage
());
out
.
printf
(
"<div class='error'>Błąd: %s</div>\n"
,
e
.
getMessage
());
}
}
}
}
private
long
oblicz
(
String
operacja
,
long
liczba1
,
long
liczba2
)
{
long
wynik
=
switch
(
operacja
)
{
case
"+"
->
liczba1
+
liczba2
;
case
"-"
->
liczba1
-
liczba2
;
case
"*"
->
liczba1
*
liczba2
;
case
"/"
->
liczba1
/
liczba2
;
default
->
throw
new
IllegalArgumentException
(
"Nieznane działanie: "
+
operacja
);
};
return
wynik
;
}
}
}
PC23-Serwlety/src/main/java/serwlety/kalkulator/Kalkulator5.java
View file @
65bb8a22
...
@@ -12,9 +12,8 @@ import jakarta.servlet.http.HttpServlet;
...
@@ -12,9 +12,8 @@ import jakarta.servlet.http.HttpServlet;
import
jakarta.servlet.http.HttpServletRequest
;
import
jakarta.servlet.http.HttpServletRequest
;
import
jakarta.servlet.http.HttpServletResponse
;
import
jakarta.servlet.http.HttpServletResponse
;
@WebServlet
(
"/
K
alkulator5"
)
@WebServlet
(
"/
k
alkulator5"
)
public
class
Kalkulator5
extends
HttpServlet
{
public
class
Kalkulator5
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
// Jeśli w serwlecie umieścimy pole, np. listę, to jest ono widoczne i wspólne dla różnych klientów.
// Jeśli w serwlecie umieścimy pole, np. listę, to jest ono widoczne i wspólne dla różnych klientów.
// Serwer ma też prawo w dowolnym momencie skasować ten obiekt Kalkulator5 (a wraz z nim listę) i utworzyć nowy.
// Serwer ma też prawo w dowolnym momencie skasować ten obiekt Kalkulator5 (a wraz z nim listę) i utworzyć nowy.
...
...
PC23-Serwlety/src/main/java/serwlety/kalkulator/Kalkulator6.java
View file @
65bb8a22
...
@@ -13,9 +13,8 @@ import jakarta.servlet.http.HttpServletRequest;
...
@@ -13,9 +13,8 @@ import jakarta.servlet.http.HttpServletRequest;
import
jakarta.servlet.http.HttpServletResponse
;
import
jakarta.servlet.http.HttpServletResponse
;
import
jakarta.servlet.http.HttpSession
;
import
jakarta.servlet.http.HttpSession
;
@WebServlet
(
"/
K
alkulator6"
)
@WebServlet
(
"/
k
alkulator6"
)
public
class
Kalkulator6
extends
HttpServlet
{
public
class
Kalkulator6
extends
HttpServlet
{
private
static
final
long
serialVersionUID
=
1L
;
@Override
@Override
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
...
@@ -115,7 +114,7 @@ public class Kalkulator6 extends HttpServlet {
...
@@ -115,7 +114,7 @@ public class Kalkulator6 extends HttpServlet {
private
List
<
String
>
pobierzHistorieZSesji
(
HttpServletRequest
request
)
{
private
List
<
String
>
pobierzHistorieZSesji
(
HttpServletRequest
request
)
{
HttpSession
session
=
request
.
getSession
();
HttpSession
session
=
request
.
getSession
();
final
String
HISTORIA
=
"historia6"
;
final
String
HISTORIA
=
"historia6"
;
// próbuję odczytać listę
z sesji
// próbuję odczytać listę
z sesji
List
<
String
>
historia
=
(
List
<
String
>)
session
.
getAttribute
(
HISTORIA
);
List
<
String
>
historia
=
(
List
<
String
>)
session
.
getAttribute
(
HISTORIA
);
if
(
historia
==
null
)
{
if
(
historia
==
null
)
{
// aa jeśli jeszcze nie została utowrzona (bo to jest pierwsze działanie tego klienta), to tworze pustą listę i zapamiętuję w sesji
// aa jeśli jeszcze nie została utowrzona (bo to jest pierwsze działanie tego klienta), to tworze pustą listę i zapamiętuję w sesji
...
...
PC23-Serwlety/src/main/java/serwlety/kalkulator/Kalkulator7.java
0 → 100644
View file @
65bb8a22
package
serwlety
.
kalkulator
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.util.List
;
import
jakarta.servlet.ServletException
;
import
jakarta.servlet.annotation.WebServlet
;
import
jakarta.servlet.http.HttpServlet
;
import
jakarta.servlet.http.HttpServletRequest
;
import
jakarta.servlet.http.HttpServletResponse
;
import
jakarta.servlet.http.HttpSession
;
@WebServlet
(
"/kalkulator7"
)
public
class
Kalkulator7
extends
HttpServlet
{
@Override
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
PrintWriter
out
=
ustawNaglowkiIPobierzWritera
(
response
);
poczatek
(
out
);
formularz
(
out
);
wyswietlHistorie
(
request
,
out
);
koniec
(
out
);
}
@Override
protected
void
doPost
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
PrintWriter
out
=
ustawNaglowkiIPobierzWritera
(
response
);
poczatek
(
out
);
formularz
(
out
);
obsluzParametryIWyswietlWynik
(
request
,
out
);
wyswietlHistorie
(
request
,
out
);
koniec
(
out
);
}
private
PrintWriter
ustawNaglowkiIPobierzWritera
(
HttpServletResponse
response
)
throws
IOException
{
response
.
setContentType
(
"text/html"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
return
response
.
getWriter
();
}
private
void
poczatek
(
PrintWriter
out
)
{
out
.
println
(
"<html>"
);
out
.
println
(
"<head>"
);
out
.
println
(
"<title>Kalkulator 7</title>"
);
out
.
println
(
"<link rel='stylesheet' type='text/css' href='styl.css'>"
);
out
.
println
(
"</head>"
);
out
.
println
(
"<body>"
);
out
.
println
(
"<h1>Kalkulator 7</h1>"
);
}
private
void
koniec
(
PrintWriter
out
)
{
out
.
println
(
"</body>"
);
out
.
println
(
"</html>"
);
}
private
void
formularz
(
PrintWriter
out
)
{
out
.
println
(
"<form method='post'>"
);
out
.
println
(
"<label for='liczba1'>Liczba 1: </label>"
);
out
.
println
(
"<input type='text' name='liczba1'/> <br/>"
);
out
.
println
(
"<label for='liczba2'>Liczba 2: </label>"
);
out
.
println
(
"<input type='text' name='liczba2'/> <br/>"
);
out
.
println
(
"<label for='operacja'>Wybierz działanie: </label>"
);
out
.
println
(
"<select name='operacja'>"
);
out
.
println
(
"<option value='+'>+</option>"
);
out
.
println
(
"<option value='-'>-</option>"
);
out
.
println
(
"<option value='*'>×</option>"
);
out
.
println
(
"<option value='/'>÷</option>"
);
out
.
println
(
"</select><br/>"
);
out
.
println
(
"<button>Oblicz</button>"
);
out
.
println
(
"</form>"
);
}
private
void
obsluzParametryIWyswietlWynik
(
HttpServletRequest
request
,
PrintWriter
out
)
{
String
parametr1
=
request
.
getParameter
(
"liczba1"
);
String
parametr2
=
request
.
getParameter
(
"liczba2"
);
String
operacja
=
request
.
getParameter
(
"operacja"
);
if
(
parametr1
!=
null
&&
parametr2
!=
null
&&
operacja
!=
null
)
{
try
{
long
liczba1
=
Long
.
parseLong
(
parametr1
);
long
liczba2
=
Long
.
parseLong
(
parametr2
);
long
wynik
=
LogikaKalkulatora
.
oblicz
(
liczba1
,
liczba2
,
operacja
);
out
.
println
(
"<div class='wynik'>"
);
out
.
printf
(
"%d %s %d = <strong>%d</strong>"
,
liczba1
,
operacja
,
liczba2
,
wynik
);
out
.
println
(
"</div>"
);
List
<
String
>
historia
=
pobierzHistorieZSesji
(
request
);
historia
.
add
(
String
.
format
(
"%d %s %d = %d"
,
liczba1
,
operacja
,
liczba2
,
wynik
));
}
catch
(
NumberFormatException
e
)
{
out
.
printf
(
"<div class='error'>Niepoprawny format liczby %s</div>"
,
e
.
getMessage
());
}
catch
(
Exception
e
)
{
out
.
printf
(
"<div class='error'>Inny wyjątek %s</div>"
,
e
);
}
}
}
private
void
wyswietlHistorie
(
HttpServletRequest
request
,
PrintWriter
out
)
{
out
.
println
(
"<h3>Historia</h3>"
);
out
.
println
(
"<ul class='historia'>"
);
List
<
String
>
historia
=
pobierzHistorieZSesji
(
request
);
synchronized
(
historia
)
{
for
(
String
s
:
historia
)
{
out
.
printf
(
"<li>%s</li>\n"
,
s
);
}
}
out
.
println
(
"</ul>"
);
}
private
List
<
String
>
pobierzHistorieZSesji
(
HttpServletRequest
request
)
{
HttpSession
session
=
request
.
getSession
();
return
(
List
<
String
>)
session
.
getAttribute
(
ListenerHistorii
.
HISTORIA_KLIENTA
);
}
}
PC23-Serwlety/src/main/java/serwlety/kalkulator/Kalkulator8.java
0 → 100644
View file @
65bb8a22
package
serwlety
.
kalkulator
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
jakarta.servlet.ServletContext
;
import
jakarta.servlet.ServletException
;
import
jakarta.servlet.annotation.WebServlet
;
import
jakarta.servlet.http.HttpServlet
;
import
jakarta.servlet.http.HttpServletRequest
;
import
jakarta.servlet.http.HttpServletResponse
;
import
jakarta.servlet.http.HttpSession
;
@WebServlet
(
"/kalkulator8"
)
public
class
Kalkulator8
extends
HttpServlet
{
// Technologia serwletów nie gwarantuje, że wszystkie zapytania będą obsługiwane przez ten sam obiekt serwletu.
// Dlatego nie powinniśmy przechowywać istotnych danych w polach instancyjnych tej klasy.
// Użycie zmiennej statycznej spowodowałoby, że będzie to poprawne, ale to jest uznawane za "brzydkie podejście".
private
static
List
<
String
>
historiaStatyczna
=
Collections
.
synchronizedList
(
new
ArrayList
<>());
protected
void
doGet
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
response
.
setContentType
(
"text/html"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
PrintWriter
out
=
response
.
getWriter
();
out
.
println
(
"<html>"
);
out
.
println
(
"<head>"
);
out
.
println
(
"<title>Kalkulator 8</title>"
);
out
.
println
(
"<link rel='stylesheet' type='text/css' href='styl.css'/>"
);
out
.
println
(
"</head>"
);
out
.
println
(
"<body>"
);
out
.
println
(
"<h1>Kalkulator 8</h1>"
);
out
.
println
(
"<form method='post'>"
);
out
.
println
(
"<label for='liczba1'>Liczba 1: </label>"
);
out
.
println
(
"<input type='number' name='liczba1'/> <br/>"
);
out
.
println
(
"<label for='liczba2'>Liczba 2: </label>"
);
out
.
println
(
"<input type='number' name='liczba2'/> <br/>"
);
out
.
println
(
"<label for='operacja'>Wybierz działanie: </label>"
);
out
.
println
(
"<select name='operacja'>"
);
out
.
println
(
"<option value='+'>+</option>"
);
out
.
println
(
"<option value='-'>-</option>"
);
out
.
println
(
"<option value='*'>×</option>"
);
out
.
println
(
"<option value='/'>÷</option>"
);
out
.
println
(
"</select><br/>"
);
out
.
println
(
"<button>Oblicz</button>"
);
out
.
println
(
"</form>"
);
// Tutaj zakładamy, że listener przygotował historię działań globalną i klienta.
// ServletContext to jest obiekt, który dostarcza informacji o bieżącej aplikacji na serwerze.
// Pełni też rolę "globalnego schowka" - przechowuje obiekty w zakresie aplikacji. (scope="application")
ServletContext
servletContext
=
this
.
getServletContext
();
List
<
String
>
historiaGlobalna
=
(
List
<
String
>)
servletContext
.
getAttribute
(
ListenerHistorii
.
HISTORIA_GLOBALNA
);
// Sesja jest schowkiem do przechowywania danych skojarzonych z konretnym klientem (np. koszyk w sklepie).
HttpSession
sesja
=
request
.
getSession
();
List
<
String
>
historiaKlienta
=
(
List
<
String
>)
sesja
.
getAttribute
(
ListenerHistorii
.
HISTORIA_KLIENTA
);
String
parametr1
=
request
.
getParameter
(
"liczba1"
);
String
parametr2
=
request
.
getParameter
(
"liczba2"
);
String
operacja
=
request
.
getParameter
(
"operacja"
);
if
(
parametr1
!=
null
&&
parametr2
!=
null
&&
operacja
!=
null
)
{
try
{
long
liczba1
=
Long
.
parseLong
(
parametr1
);
long
liczba2
=
Long
.
parseLong
(
parametr2
);
long
wynik
=
LogikaKalkulatora
.
oblicz
(
liczba1
,
liczba2
,
operacja
);
out
.
printf
(
"<p>%d %s %d = <strong>%d</strong></p>"
,
liczba1
,
operacja
,
liczba2
,
wynik
);
String
tekst
=
String
.
format
(
"%d %s %d = %d"
,
liczba1
,
operacja
,
liczba2
,
wynik
);
historiaStatyczna
.
add
(
tekst
);
historiaGlobalna
.
add
(
tekst
);
historiaKlienta
.
add
(
tekst
);
}
catch
(
NumberFormatException
e
)
{
out
.
printf
(
"<div class='error'>Niepoprawny format liczby %s</div>"
,
e
.
getMessage
());
}
catch
(
Exception
e
)
{
out
.
printf
(
"<div class='error'>Inny wyjątek %s</div>"
,
e
);
}
}
out
.
println
(
"<h3>Historia działań (static):</h3>"
);
out
.
println
(
"<ul>"
);
// Gdy na liście wykonujemy wiele operacji, np. w pętli, to powinniśmy synchronizować cały ten fragment.
synchronized
(
historiaStatyczna
)
{
for
(
String
dzialanie
:
historiaStatyczna
)
{
out
.
println
(
"<li>"
+
dzialanie
+
"</li>"
);
}
}
out
.
println
(
"</ul>"
);
out
.
println
(
"<h3>Historia działań (ServletContext):</h3>"
);
out
.
println
(
"<ul>"
);
synchronized
(
historiaGlobalna
)
{
for
(
String
dzialanie
:
historiaGlobalna
)
{
out
.
println
(
"<li>"
+
dzialanie
+
"</li>"
);
}
}
out
.
println
(
"</ul>"
);
out
.
println
(
"<h3>Historia działań klienta (HttpSession):</h3>"
);
out
.
println
(
"<ul>"
);
synchronized
(
historiaKlienta
)
{
for
(
String
dzialanie
:
historiaKlienta
)
{
out
.
println
(
"<li>"
+
dzialanie
+
"</li>"
);
}
}
out
.
println
(
"</ul>"
);
out
.
println
(
"</body>"
);
out
.
println
(
"</html>"
);
}
@Override
protected
void
doPost
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
doGet
(
request
,
response
);
}
}
\ No newline at end of file
PC23-Serwlety/src/main/java/serwlety/kalkulator/ListenerHistorii.java
0 → 100644
View file @
65bb8a22
package
serwlety
.
kalkulator
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
jakarta.servlet.ServletContext
;
import
jakarta.servlet.ServletContextEvent
;
import
jakarta.servlet.ServletContextListener
;
import
jakarta.servlet.annotation.WebListener
;
import
jakarta.servlet.http.HttpSessionEvent
;
import
jakarta.servlet.http.HttpSessionListener
;
@WebListener
public
class
ListenerHistorii
implements
HttpSessionListener
,
ServletContextListener
{
public
static
final
String
HISTORIA_KLIENTA
=
"historia_klienta"
;
public
static
final
String
HISTORIA_GLOBALNA
=
"historia_globalna"
;
public
void
sessionCreated
(
HttpSessionEvent
se
)
{
// Gdy podłączy się nowy klient, jest tworzona nowa sesja, a my do tej sesji
// dodajemy pustą listę "historia_dzialan"
List
<
String
>
historia
=
Collections
.
synchronizedList
(
new
ArrayList
<>());
se
.
getSession
().
setAttribute
(
HISTORIA_KLIENTA
,
historia
);
se
.
getSession
().
setMaxInactiveInterval
(
60
);
System
.
out
.
println
(
"Do sesji została dodana pusta historia"
);
}
public
void
sessionDestroyed
(
HttpSessionEvent
se
)
{
System
.
out
.
println
(
"Koniec sesji"
);
}
public
void
contextInitialized
(
ServletContextEvent
sce
)
{
ServletContext
servletContext
=
sce
.
getServletContext
();
List
<
String
>
historiaGlobalna
=
Collections
.
synchronizedList
(
new
ArrayList
<>());
servletContext
.
setAttribute
(
HISTORIA_GLOBALNA
,
historiaGlobalna
);
}
public
void
contextDestroyed
(
ServletContextEvent
sce
)
{
System
.
out
.
println
(
"aplikacja kończy się"
);
List
<
String
>
historiaGlobalna
=
(
List
<
String
>)
sce
.
getServletContext
().
getAttribute
(
HISTORIA_GLOBALNA
);
System
.
out
.
println
(
"W sumie wykonano "
+
historiaGlobalna
.
size
()
+
" działań"
);
}
// W serwletach mamy trzy obiekty (tak jakby na trzech poziomach), w których za pomocą setAttribute / getAttribute można przechowywać dane
// ServletContext - dane globalne
// HttpSession - dane sesji, skojarzone z konkretnym klientem
// HttpRequest - dane potrzebne podczas obsługi pojedynczego zapytania
}
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