Java Net przeładownie strony HTML

0

Cześć!

Uruchomiłem sobie prosty serwer http w Javie. Szukam odpowiedzi na pytanie jak przeładować stronę internetową w html z nowymi parametrami do wyświetlenia bez otwierania jej w nowym oknie przeglądarki. Poniżej fragment kodu, który odbiera żądanie wyświetlenia strony przez użytkownika metodą GET, użytkownik wpisuje parametry w okienka, do serwera kierowany jest POST, fragment modyfikuje plik html aby uwzględnić wpisane parametry do wyświetlenia a następnie odsyła tą stronę użytkownikowi. Niestety odesłana strona otwiera się w nowej karcie przęglądarki. Jak tego uniknąć? Dzięki za opdowiedz:)

. . .
//fragment programu odbierajacy metodę post z parametrami aby wyedytować tą samą strone html i wyswietlić te parametry.
if(method.equals("POST")) {

            StringBuilder content = null;
            String len = exchange.getRequestHeaders().getFirst("Content-Length");

            if(len != null) {
                int nlen = Integer.parseInt(len);
                BufferedInputStream in = new BufferedInputStream(exchange.getRequestBody());
                content = new StringBuilder(10);
                for(int i=0; i<nlen; ++i) {
                    content.append((char)in.read());
                }
                System.out.println("********************************************8");
                System.out.println("content:" + content);
                in.close();

                String[] postParams = content.toString().split("\\&");

                String param1 = postParams[0];
                String param2 = postParams[1];

                param1 = param1.substring(param1.indexOf("=")+1);
                param2 = param2.substring(param2.indexOf("=")+1);

                String pageName1 = "post.html";

                try {
                    //HTMLPageEditor htmlPageEditor = new HTMLPageEditor();
                    htmlPageEditor.setRfiile(pageName1);
                    htmlPageEditor.replacePhrase(previousData1,param1);
                    htmlPageEditor.replacePhrase(previousData2,param2);
                    htmlPageEditor.endEdition();

                    previousData1 = param1;
                    previousData2 = param2;
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            

                OutputStream os = exchange.getResponseBody();

                File file = new File(pageName1);
                exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK,0);
                FileInputStream fin = new FileInputStream(pageName1);
                FileChannel fch = fin.getChannel();

                WritableByteChannel writableByteChannel = Channels.newChannel(os);
                fch.transferTo(0,file.length(),writableByteChannel);

                fch.close();
                writableByteChannel.close();

            }
            if(content != null) {
                Headers responseHeaders = exchange.getResponseHeaders();
                exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK,0);
            }

        }
. . . 
0

Prosiłbym o jakieś sugestie co do rozwiązania problemu. Zaczynam przygode z javą net. A o.html dopiero zaczalem sie uczyć...

0

Ktoś udzieli wskazówki...

0

Właśnie dlatego zadałem pytanie czy zaczynasz swoją przygodę z javą webową.

Nie rób tego tak. Poczytaj o springu, przerób kilka najprostszych tutoriali z spring io choćby do napisania 1 controllera i postawienia apki na springu.
Następnie do postawienia frontu użyj angulara/jsa czy czego tam sobie zapragniesz. Nie musi to być najpiękniejsza strona. Wystarczy tabelka wyświetlająca dane uzyskane po GECie z Twojej apki springowej. Krok po kroku.
Ale proszę, nie generuj kodu HTML po stronie javy.

2

Są alternatywy do Springa:

  • Spark - przyjemna dokumentacja, bardzo lekki i czytelny, idealny do niedużych (i średnich) projektów (subiektywna opinia), ładnie wszystko wygląda kiedy korzystamy do tego ze Stream API
    Przykład:
import static spark.Spark.*;

public class HelloWorld {
    public static void main(String[] args) {
        get("/hello", (req, res) -> "Hello World");
    }
}
  • Javalin - podobny do Sparka, wręcz identyczny, choć mam wrażenie, że troszkę bardziej rozwinięty (chociażby o walidację)
    Przykład:
import io.javalin.Javalin;

public class HelloWorld {
    public static void main(String[] args) {
        Javalin app = Javalin.create().start(7000);
        app.get("/", ctx -> ctx.result("Hello World"));
    }
}
  • NinjaFramework - stosunkowo przejrzysty fullstack framework stworzony na podstawie wielu popularnych bibliotek, z tego co pamiętam korzysta z Google Guice do wstrzykiwania zależności. Trochę bardziej rozbudowany, ale ciągle do ogarnięcia w ludzkim czasie.
    Przykład:
public class Routes implements ApplicationRoutes {
    @Override
    public void init(Router router) {
        router.GET().route("/").with(ApplicationController::index);
    }
}
package controllers;

@Singleton
public class ApplicationController {       

    public Result index() {
        return Results.html();
    }
}

i jeszcze wymagany prosty plik html do renderu.

Z tych zdarzyło mi się korzystać.
Są jeszcze frameworki takie jak:

  • Micronaut - ale ten nie ma wsparcia do renderowania html'a, chyba docelowo RESTowy (też korzystałem raz)
  • Jooby - nie korzystałem, nie interesowałem się za bardzo, ale wydaje się być podobnym do sparka/javalina
  • Pippo - raz wszedłem na stronę, średnio coś mogę powiedzieć
  • Dropwizard - nie korzystałem
0

A opłaca się w ogóle uczyć HTMLa w dzisiejszych czasach? Niby nie jest jakoś bardzo skomplikowany chyba... Aczkolwiek nikt nie odpowiedział mi na pytanie: jak nie otwierać zmodyfikowanej strony w nowej karcie przegądarki, tylko jak otworzyć ją w tej samej karcie.

0

A dlaczego ma się nie opłacać?

Nikt Ci nie dał odpowiedzi bo wynajdujesz koło od nowa. Dodatkowo generujesz kod html po stronie javy...
Nikomu się nie chce czegoś takiego analizować.
Dlatego napisałem Ci abyś front, najprostszy jak się da, z wykorzystaniem bootstrapa wykonał w języku/frameworku do tego stworzonym. Tam przeładowanie strony zrobisz o wiele szybciej niż w javie :)

0

Okej próbuje tylko ustalić czy takie rzeczy jak otworzenie strony w tym samym oknie robi się po stronie HTML czy Javy, ale już chyba mam odpowiedź. Muszę to w Javie jakoś zrobić.

0

Jaki to jest serwer? Z czego korzystasz? To są zwykłe serwlety? Wrzuć całą metodę

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