Java Net przeładownie strony HTML

Java Net przeładownie strony HTML
KU
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 5 lat
  • Postów:60
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:)

Kopiuj
. . .
//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);
            }

        }
. . . 
K5
Czy jesteś na początku przygody z java webową? Czy robisz to w ten sposób bo Ci ktoś kazał?
AK
@kixe52: straszna rzeźba. @Kuben W JAvie inaczej niż w PHP wynajdywanie wynalezionego koła nie jest zaszczytem, a dużą ujmą
K5
@AnyKtokolwiek: właśnie dlatego wolałem się upewnić, czy może ktoś mu nie kazał tak tego robić ;)
KU
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 5 lat
  • Postów:60
0

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

KU
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 5 lat
  • Postów:60
0

Ktoś udzieli wskazówki...

K5
  • Rejestracja:około 6 lat
  • Ostatnio:dzień
  • Postów:1001
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.

edytowany 1x, ostatnio: kixe52
Burdzi0
Nie samym springiem człowiek żyje
K5
@Burdzi0: zgadzam się. Ale jak sam przyznał, jest na początku swojej przygody. Czy nie lepszym wyjściem jest rozpoczęcie tej przygody od czegoś co ma ogromne community + sporo materiałów w internecie? Dodatkowo uważasz, że generowanie html po stronie javy w tej sytuacji jest dobrym rozwiązaniem?
Burdzi0
@kixe52: Są łatwiejsze frameworki, które mają wystarczające community i nie są kobyłami. Generowanie HTMLa po stronie Javy to oczywiście zły pomysł
K5
Podlinkuj je w takim razie autorowi posta :P Może inni też skorzystają.
Burdzi0
  • Rejestracja:prawie 9 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Futurama
  • Postów:887
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:
Kopiuj
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:
Kopiuj
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:
Kopiuj
public class Routes implements ApplicationRoutes {
    @Override
    public void init(Router router) {
        router.GET().route("/").with(ApplicationController::index);
    }
}
Kopiuj
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

Bite my shiny metal ass!
Life throws you an error code like that, you don't have the luxury of a ZnVja2luZw== pop-up explanation *Robię projekty studenckie, pisz priv ;) *
edytowany 1x, ostatnio: Burdzi0
danek
i jeszcze ratpack ;)
Burdzi0
@danek: Niby tak, z drugiej strony pokazuję tutaj łatwe frameworki a FP uważam za trudne
KU
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 5 lat
  • Postów:60
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.

K5
  • Rejestracja:około 6 lat
  • Ostatnio:dzień
  • Postów:1001
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 :)

KU
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 5 lat
  • Postów:60
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ć.

Burdzi0
  • Rejestracja:prawie 9 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Futurama
  • Postów:887
0

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


Bite my shiny metal ass!
Life throws you an error code like that, you don't have the luxury of a ZnVja2luZw== pop-up explanation *Robię projekty studenckie, pisz priv ;) *
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)