Commit 4ac1ed5e by Patryk Czarnik

Dodatkowe wersje kalkulatora

parent 37de7153
...@@ -2,7 +2,6 @@ package serwlety.hello; ...@@ -2,7 +2,6 @@ package serwlety.hello;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.Enumeration; import java.util.Enumeration;
...@@ -64,7 +63,7 @@ public class Ping extends HttpServlet { ...@@ -64,7 +63,7 @@ public class Ping extends HttpServlet {
out.println("LocalPort: " + request.getLocalPort()); out.println("LocalPort: " + request.getLocalPort());
out.println(); out.println();
out.println("RemoteHost: " + request.getRemoteHost()); out.println("RemoteHost: " + request.getRemoteHost());
out.println("RemoteAddr: " + request.getRemoteAddr()); out.println("RemoteAddr: " + request.getRemoteAddr() + ":" + request.getRemotePort());
// itd. // itd.
out.println(); out.println();
......
package serwlety.kalkulator;
import java.io.IOException;
import java.io.PrintWriter;
import org.apache.commons.lang3.StringUtils;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/Kalkulator3")
public class Kalkulator3 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html><head>");
out.println("<title>Kalkulator serwletowy</title>");
out.println("<link rel='stylesheet' type='text/css' href='styl.css'>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Kalkulator</h1>");
out.println("<form method='post'>");
out.println("<input type='number' name='liczba1'>");
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>");
out.println("<input type='number' name='liczba2'>");
out.println("<button>Oblicz</button>");
out.println("</form>");
String param1 = request.getParameter("liczba1");
String param2 = request.getParameter("liczba2");
String operacja = request.getParameter("operacja");
if(StringUtils.isNoneBlank(param1, param2, operacja)) {
try {
long liczba1 = Long.parseLong(param1);
long liczba2 = Long.parseLong(param2);
long wynik = switch(operacja) {
case "+" -> liczba1 + liczba2;
case "-" -> liczba1 - liczba2;
case "*" -> liczba1 * liczba2;
case "/" -> liczba1 / liczba2;
default -> throw new IllegalArgumentException("Nieznane działanie: " + operacja);
};
out.printf("<div class='wynik'>%d %s %d = <strong>%d</strong></div>\n",
liczba1, operacja, liczba2, wynik);
} catch (NumberFormatException e) {
out.printf("<div class='error'>Niepoprawny format liczby</div>\n");
} catch(Exception e) {
out.printf("<div class='error'>Błąd: %s</div>\n", e.getMessage());
}
}
out.println("</body>");
out.println("</html>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Aby metoda POST była obsłużona tak samo jak GET, można po prostu z doPost wywołać doGet
doGet(request, response);
}
}
package serwlety.kalkulator;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/Kalkulator4")
public class Kalkulator4 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = wyslijNaglowkiIPobierzWritera(response);
poczatekHtml(out);
formularz(out);
koniecHtml(out);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = wyslijNaglowkiIPobierzWritera(response);
poczatekHtml(out);
formularz(out);
pobierzParametryIWstawWynik(request, out);
koniecHtml(out);
}
private PrintWriter wyslijNaglowkiIPobierzWritera(HttpServletResponse response) throws IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
return response.getWriter();
}
private void poczatekHtml(PrintWriter out) {
out.println("<!DOCTYPE html>");
out.println("<html><head>");
out.println("<title>Kalkulator serwletowy</title>");
out.println("<link rel='stylesheet' type='text/css' href='styl.css'>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Kalkulator</h1>");
}
private void formularz(PrintWriter out) {
out.println("<form method='post'>");
out.println("<input type='number' name='liczba1'>");
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>");
out.println("<input type='number' name='liczba2'>");
out.println("<button>Oblicz</button>");
out.println("</form>");
}
private void koniecHtml(PrintWriter out) {
out.println("</body>");
out.println("</html>");
}
private void pobierzParametryIWstawWynik(HttpServletRequest request, PrintWriter out) {
String param1 = request.getParameter("liczba1");
String param2 = request.getParameter("liczba2");
String operacja = request.getParameter("operacja");
try {
long liczba1 = Long.parseLong(param1);
long liczba2 = Long.parseLong(param2);
long wynik = oblicz(operacja, liczba1, liczba2);
out.printf("<div class='wynik'>%d %s %d = <strong>%d</strong></div>\n",
liczba1, operacja, liczba2, wynik);
} catch (NumberFormatException e) {
out.printf("<div class='error'>Niepoprawny format liczby</div>\n");
} catch(Exception e) {
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;
}
}
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.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/Kalkulator5")
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.
// Serwer ma też prawo w dowolnym momencie skasować ten obiekt Kalkulator5 (a wraz z nim listę) i utworzyć nowy.
private final List<String> historia = Collections.synchronizedList(new ArrayList<>());
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = ustawNaglowkiIPobierzWritera(response);
poczatek(out);
formularz(out);
wyswietlHistorie(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(out);
koniec(out);
}
private PrintWriter ustawNaglowkiIPobierzWritera(HttpServletResponse response) throws IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
return out;
}
private void poczatek(PrintWriter out) {
out.println("<html>");
out.println("<head>");
out.println("<title>Kalkulator 5</title>");
out.println("<link rel='stylesheet' type='text/css' href='styl.css'>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Kalkulator 5</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>");
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(PrintWriter out) {
out.println("<h3>Historia</h3>");
out.println("<ul class='historia'>");
synchronized (historia) {
for (String s : historia) {
out.printf("<li>%s</li>\n", s);
}
}
out.println("</ul>");
}
}
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.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("/Kalkulator6")
public class Kalkulator6 extends HttpServlet {
private static final long serialVersionUID = 1L;
@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");
PrintWriter out = response.getWriter();
return out;
}
private void poczatek(PrintWriter out) {
out.println("<html>");
out.println("<head>");
out.println("<title>Kalkulator 6</title>");
out.println("<link rel='stylesheet' type='text/css' href='styl.css'>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Kalkulator 6</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();
final String HISTORIA = "historia6";
// próbuję odczytać listę z sesji
List<String> historia = (List<String>) session.getAttribute(HISTORIA);
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
historia = Collections.synchronizedList(new ArrayList<>());
session.setAttribute(HISTORIA, historia);
}
return historia;
}
}
package serwlety.kalkulator;
public class LogikaKalkulatora {
public static long oblicz(long liczba1, long liczba2, String operacja) {
switch(operacja) {
case "+": return liczba1 + liczba2;
case "-": return liczba1 - liczba2;
case "*": return liczba1 * liczba2;
case "/": return liczba1 / liczba2;
default : throw new IllegalArgumentException("Nieznana operacja " + operacja);
}
}
}
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