Java aplikacja

0

Mam problem z aplikacja mam dwa pola typu text w jednym mam podać liczbę a w drugim do jakiej potęgi ma zostać podniesiona po kliknięciu przyciska oblicz ma przejść do servletu i pokazać wynik. Proszę o pomoc z góry dziękuje.

To kod pliku index.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css" href="CSS/style.css"/>
        <title>Obliczanie potegi</title>
    </head>
    <body>
        <form action = "Servlet">
             <input type="text" id="p1" name="podstawa"/>
             <input type="text" id="p2" name="potega"/>
             <input type="button" name="oblicz" value="Oblicz"/>
    </body>
</html> 

A to kod z Servlet.java:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            String i = request.getParameter("oblicz");
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet Servlet</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet Servlet at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
            out.println(i);
        }
    } 

W załączniku na pomarańczowym tle jest ten plik index.jsp a na bialo to plik Servlet.java ma wyświetlać własnie ten wynik w tym servlecie.

1
  1. Dodaj zakończenie </form> w pliku index.jsp
  2. Upewnij się że w Servlet.java ścieżka do Twojego serwletu to "/Servlet".
  3. W Servlet.java odbierz dwa parametry:
String base = request.getParameter("podstawa");

oraz String exponent = request.getParameter("potega");

Następnie przekonwertuj te dwa parametry z typu String na int. Podnieś do potęgi a następnie wypisz wynik: 
```java
 out.println("<p>Wynik: " + result + "</p>");
0

tylko jaki był by pod na obliczanie potęgi ?
I dalej mi nie chcesz przejsc do servletu a na 1 polu tekstowych przechodzi

Kod index.jsp:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css" href="CSS/style.css"/>
        <title>Obliczanie potegi</title>
    </head>
    <body>
    <center><h1>Obliczanie Potęgi</h1></center>
    <form action="servlet.do" method="post">
            <input type="text" id="p1" name="podstawa" placeholder="Podaj licze"></br>
            <input type="text" id="p2" name="potega" placeholder="Podaj potege"></br></br>
             <input type="button" name="oblicz" value="Oblicz"></br>
             </form>
    </body>
</html> 

Kod Servlet.java:

@WebServlet(name = "Servletek", urlPatterns = {"/servlet.do"})
public class Servletek extends HttpServlet {

response.setContentType("text/html;charset=UTF-8");
        String base = request.getParameter("podstawa");
        String exponent = request.getParameter("potega");
        try (PrintWriter out = response.getWriter()) {
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Obliczanie Potęgi</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet Servletek at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
            out.println(base);
            out.println(exponent);
            //out.println("<p>Wynik: " + result + "</p>");
            out.close();
 
1

Przycisk powinien być typu submit :) :

 <input type="submit" name="oblicz" value="Oblicz"></br>
0

Dzięki to już działa ma ktoś pomysł na kod obliczania tej potęgi bo ja próbowałem wiele razy i nic.

1
Math.pow(base,exponent);
0

gdzie to wprowadzić do kodu

1

Np. tu:

            out.println(exponent);
            out.println("<p>Wynik: " + Math.pow(base, exponent) + "</p>");
            out.close();
0

Podkreśla zwraca bład "flip operands of '+' (may alter semantics)

1

Kod jest poprawny, które IDE sygnalizuje błąd?

0

Cała linijkę tylko tą z potęga w załączniku jest screen.

1

Zmień

        String base = request.getParameter("podstawa");
        String exponent = request.getParameter("potega");

na

        double base = Double.parseDouble(request.getParameter("podstawa"));
        double exponent = Double.parseDouble(request.getParameter("potega"));
0

bibliotekę mam zaimportowana

0

działa tylko wynik pokazuje po kropce Wynik: 256.0 to jest 2 do 8 potegi.

1

Wynik można sformatować, jaką postać chciałbyś uzyskać? Co ma się np. pojawić gdy użytkownik będzie chciał obliczyć 3.5 do potęgi 11.8?

0

Ok możesz dać żeby liczby całkowite tylko potęgowało i dać komunikat jak ktoś wprowadzi licze z przecinkiem że Licza musi być Liczba całkowita.

0

I gdy się liczby nie wpisze przydał by się komunikat

1

Warto dodać kontrolę poprawności (JavaScript) po stronie użytkownika.

<form onsubmit="kontrola()" action="servlet.do" method="post">

Jeśli funkcja kontrola zwróci false, to nic nie zostanie wysłane na serwer.
Kontrola w serwlecie może wyglądać tak:

 
response.setContentType("text/html;charset=UTF-8");
        boolean wrongNumbers = false;
        try{
            int base = Integer.parseInt(request.getParameter("podstawa"));
            int exponent = Integer.parseInt(request.getParameter("potega"));
            wrongNumbers = (exponent < 0);
        }
        catch(Exception e){
            wrongNumbers = true;
        }
        try (PrintWriter out = response.getWriter()) {
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Obliczanie Potęgi</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet Servletek at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
            if(wrongNumbers){
                out.println("Zły format liczb: obie muszą być całkowite, wykładnik nie może być ujemny");
            }
            else{
                out.println(base);
                out.println(exponent);
                out.println("<p>Wynik: " + (long)Math.pow(base, exponent) + "</p>");
            }
            out.close();
0

Podkreśla w else base i exponent

0

Żeby taki "servlet" odpalić on-line to trzeba mieć jakiś specjalny hosting? Co jest potrzebne?
To chyba nie ma wiele wspólnego z JEE czy Spring?

Sorry za laickie pytanie.

0

No trzeba sobie kupić hosting pod java web :D

0

Bład że stworzyć parametr

1
        boolean wrongNumbers = false;
        int base = 0;
        int exponent = 0;
        try{
            base = Integer.parseInt(request.getParameter("podstawa"));
            exponent = Integer.parseInt(request.getParameter("potega"));
            wrongNumbers = (exponent < 0);
        }
        ...
0

To teraz podkreśla

base = Integer.parseInt(request.getParameter("podstawa"));
exponent = Integer.parseInt(request.getParameter("potega")); 
1

Widocznie źle przepisałeś.

0

Tak przepisałem:

 response.setContentType("text/html;charset=UTF-8");
          boolean wrongNumbers = false;
          int base = 0;
          int exponent = 0;
        try{
            int base = Integer.parseInt(request.getParameter("podstawa"));
            int exponent = Integer.parseInt(request.getParameter("potega"));
            wrongNumbers = (exponent < 0);
        }
        catch(Exception e){
            wrongNumbers = true;
        }
        try (PrintWriter out = response.getWriter()) {
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Obliczanie Potęgi</title>");            
            out.println("</head>");
            out.println("<body><body bgcolor=\"orange\" </body>");
            out.println("<h1><center>Obliczanie potęgi " + request.getContextPath() + "</center></h1>");
            out.println("</body>");
            out.println("</html>");
             if(wrongNumbers){
                out.println("Zły format liczb: obie muszą być całkowite, wykładnik nie może być ujemny");
            }
            else{
                out.println(base);
                out.println(exponent);
                out.println("<p>Wynik: " + (long)Math.pow(base, exponent) + "</p>");
            }
            out.close();
        }
        
    } 
0

Ok juz poprawiłem i działa dzięki. Mozna zamknać

1 użytkowników online, w tym zalogowanych: 0, gości: 1