Java aplikacja

E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
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:

Kopiuj
<%@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:

Kopiuj
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.

edytowany 1x, ostatnio: edi102
Shalom
Czemu piszesz w sposób który był modny kiedy jeszcze nie było cię na świecie? :(
MA
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 3 lata
  • Postów:166
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:
Kopiuj
String base = request.getParameter("podstawa");

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

Kopiuj
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>");
edytowany 1x, ostatnio: Marszal
E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
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:

Kopiuj
<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:

Kopiuj
@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();
 
edytowany 1x, ostatnio: edi102
MA
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 3 lata
  • Postów:166
1

Przycisk powinien być typu submit :) :

Kopiuj
 <input type="submit" name="oblicz" value="Oblicz"></br>
E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
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.

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1
Kopiuj
Math.pow(base,exponent);

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
0

gdzie to wprowadzić do kodu

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Np. tu:

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

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
0

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

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

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


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
0

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

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Zmień

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

na

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

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
0

bibliotekę mam zaimportowana

E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
0

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

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
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?


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
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.

edytowany 2x, ostatnio: edi102
E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
0

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

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

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

Kopiuj
<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:

Kopiuj
 
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();

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
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.

E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
0

No trzeba sobie kupić hosting pod java web :D

E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
0

Bład że stworzyć parametr

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1
Kopiuj
        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);
        }
        ...

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
0

To teraz podkreśla

Kopiuj
base = Integer.parseInt(request.getParameter("podstawa"));
exponent = Integer.parseInt(request.getParameter("potega")); 
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Widocznie źle przepisałeś.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
0

Tak przepisałem:

Kopiuj
 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();
        }
        
    } 
E1
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:20
0

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

edytowany 1x, ostatnio: edi102

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.