Spring Framework kilka pytan

2

Mam kilka pytan co do Spring do starszych stazem ode mnie. Czyli do prawie kazdego uzytkownika forum :P

  1. Jaka jest rola HTTP, gdy przeglądarka wysyła żądanie strony internetowej? Czy to tylko protokol formatujacy zapytania, aby serwer aplikacji mógł je zrozumieć? Nie ma tam jakiejs dodatkowej magii?
  2. Jaka jest relacja między serwerem aplikacji a serwletem? Serwery aplikacji odbierają żądania HTTP, analizują informacje i decydują, który serwlet powinien otrzymać obiekt żądania? Czy raczej serwery aplikacji odbierają żądania HTTP, analizują informacje i wysyłają je do wszystkich serwletów jednocześnie?
  3. SA moze wykonywać dowolna metode z aplikacji?
  4. Metoda init Servletu jest wywoływana tylko raz, po utworzeniu instancji?
  5. Dzieki springowi mozemy używac szablonów do generowania stron internetowych jako odpowiedzi na żądania HTTP. Tutaj pojawia sie Thymeleaf jest jakas alternatywna technologia do tego?

Jesli Cie te pytania rozsierdzily.

1

Dzieki springowi mozemy używac szablonów do generowania stron internetowych jako odpowiedzi na żądania HTTP. Tutaj pojawia sie Thymeleaf jest jakas alternatywna technologia do tego?

U mnie w poprzedniej firmie do generowania templejtków emailu był wykorzystywany FreeMaker chyba. Ogólnie odchodzi się od stron generowanych przez serwera i idzie bardziej w kierunku aplikacji dynamicznych - SPA.

Jaka jest relacja między serwerem aplikacji a serwletem?

Serwer aplikacji jakby uruchamia twoją aplikację napisaną w Javie. Servlety po prostu przetwarzają żądania HTTP.

Serwery aplikacji odbierają żądania HTTP, analizują informacje i decydują, który serwlet powinien otrzymać obiekt żądania? Czy raczej serwery aplikacji odbierają żądania HTTP, analizują informacje i wysyłają je do wszystkich serwletów jednocześnie?

W springu jest chyba jeden centralny punkt do odbioru żądań, który potem przekazuje to dalej do już konkretnego, który to ma obsłużyć. Tutaj ma znaczenie pod jaki zasób zmapujesz do odbioru: np. /invoiceList trafi do serwletu który obsłuży żądanie z tego zasobu.

SA moze wykonywać dowolna metode z aplikacji?

Co to SA?

Jaka jest rola HTTP, gdy przeglądarka wysyła żądanie strony internetowej? Czy to tylko protokol formatujacy zapytania, aby serwer aplikacji mógł je zrozumieć? Nie ma tam jakiejs dodatkowej magii?

HTTP pełni rolę protokołu transportowego, czyli jest taką furgonetką na request.

btw, Spring obudowuje serwlety i tak bezpośrednio z nimi nie będziesz miał raczej styku. Co innego jak sobie zechcesz napisać aplikację w J2EE/Jakarta i będziesz się chciał pobawić bliżej przy metalu, to wtedy tak.

5

@p_agon:

Jaka jest rola HTTP, gdy przeglądarka wysyła żądanie strony internetowej? Czy to tylko protokol formatujacy zapytania, aby serwer aplikacji mógł je zrozumieć? Nie ma tam jakiejs dodatkowej magii?

Tak to protokół. Trzeba pamiętać, że jest HTTP1.0 / 1.1 / 2.0. W uproszczeniu można przyjąć, że po połączeniu przez TCP - klient przeglądarka podaje jaką stronę chce - np.:
GET ta/strona.html , do tego dochodzą nagłówki. Serwer po prostu zwraca zawartość strony (może być generowana dynamicznie) + nagłówki.

Dawnymi czasami - przy pomocy komendy nc symulowałem przeglądarkę, albo serwer na warsztatach, żeby to pokazać. Nie ma magii.

Jaka jest relacja między serwerem aplikacji a serwletem? Serwery aplikacji odbierają żądania HTTP, analizują informacje i decydują, który serwlet powinien otrzymać obiekt żądania? Czy raczej serwery aplikacji odbierają żądania HTTP, analizują informacje i wysyłają je do wszystkich serwletów jednocześnie?

Serwer aplikacji to taki silnik, który zarządza serwletami - wstępnie odpiera żądania HTTP i przekierowuje obsługę do konkretnego serletu (z X dostępnych). Warto podkreślić, że obecnie jest to coraz bardziej historyczne podejście. W nowych aplikacjach częsti nie masz już serwera aplikacji ani serwletów (tak, nawet w springu - WebFlux), a czasem są już tak ukryte, że w zasadzie nie widać (klasyczny Spring Boot + Rest). Jak na rekrutacji pytają Cię o servlety i servery aplikacji to wstajesz i wychodzisz. Dla własnego dobra.

SA moze wykonywać dowolna metode z aplikacji?

SA wywołuje servlet, servlet może wywołać dowolne inne metody (zależy co tam naprogramujesz). Spring podaje swoje servlety, które mają zakodowaną logikę automatycznie wywołującą odpowiedno adnotowane klasy. (Taka kolejna warstwa abstrakcji).

Metoda init Servletu jest wywoływana tylko raz, po utworzeniu instancji?

Tak, ale obecnie to wiedza bezużyteczna.

Dzieki springowi mozemy używac szablonów do generowania stron internetowych jako odpowiedzi na żądania HTTP. Tutaj pojawia sie Thymeleaf jest jakas alternatywna technologia do tego?

Nie wiem czemu dzięki springowi - bo szablony działają w czymkolwiek. I najlepiej ich nie używać. Obecnie weba najczęściej robimy jako SPA - klient JS w Angular/Reac/Vue i tam są templaty. A server (np. Spring) rzuca tylko .json-ami.

2

Jaka jest relacja między serwerem aplikacji a serwletem? Serwery aplikacji odbierają żądania HTTP, analizują informacje i decydują, który serwlet powinien otrzymać obiekt żądania? Czy raczej serwery aplikacji odbierają żądania HTTP, analizują informacje i wysyłają je do wszystkich serwletów jednocześnie?

Servlet jest to klasa odpowiedzialna za przetwarzanie requestów które są do niego zmapowane. Tu masz to opisane

0

Dawnymi czasami - przy pomocy komendy nc symulowałem przeglądarkę, albo serwer na warsztatach, żeby to pokazać. Nie ma magii.

@jarekr000000 na CTFach bardzo często się tak robi eksploitując jakieś zrypane serwery http ;) Niemniej zamiast nc raczej socketem z pythona

Jak na rekrutacji pytają Cię o servlety i servery aplikacji to wstajesz i wychodzisz. Dla własnego dobra.

A jak piszą własny framework? Albo chcą zatrudnić kogoś kto rozumie jak to działa pod spodem? ;)

1

A jak piszą własny framework?

A to też nie jest powód żeby wyjść? No chyba że to jest Linkedin albo inny Twitter :P

2

@ProgScibi:
Pisanie własnego frameworku to wcale nie powód, żeby wyjść, jak ktoś to sposnoruje, a jeszcze firma żyje z robienia frameworku... to na pewno praca 100x ciekawsza niż rypanie CRUDów dla szatana.

Chyba, że to robienie frameworku na miarę roku 2000 - na servletach. Wtedy warto jednak uciekać.

1

Pisanie własnego frameworku to wcale nie powód, żeby wyjść, jak ktoś to sposnoruje, a jeszcze firma żyje z robienia frameworku... to na pewno praca 100x ciekawsza niż rypanie CRUDów dla szatana.

No tak, jak firma żyje z robienia frameworków to OK... tak jak Pivotal (czy jak to się zwie). Gorzej jak to korpoframework który nie ma dokumentacji i jest kijowy ;)
Dlatego pisałem że jak ktoś siedzi w Linkedin czy Twitter to co innego (z tego co wiem chyba Kafka jest produktem Linkedin-a)

1

Pisz własny framework, bo Twój problem jest na pewno unikalny i nie da się skorzystać z gotowych narzędzi.

Życie bez frameworków jest piękniejsze.

Framework to małżeństwo, uwiazesz się raz to potem ciężko z tego wyjść. Biblioteki go randki - nie pasuje to zmieniasz tak jak na randce. Chyba że jest brzydka to wyskakujesz przez okno w kiblu albo dajesz 50 kelnerowi aby Cię wypuścił tylnym wyjściem.

1
p_agon napisał(a):
  1. Jaka jest rola HTTP, gdy przeglądarka wysyła żądanie strony internetowej? Czy to tylko protokol formatujacy zapytania, aby serwer aplikacji mógł je zrozumieć? Nie ma tam jakiejs dodatkowej magii?

To najwyższa wasrstwa protokołu sieciowego, niżej masz jakieś TCP/IP, ethernet itd. Definiuje takie rzeczy jak szyfrowanie, przekazywanie ścieżek, nagłówki, metody (GET, POST, PUT DELETE, inne...)

  1. Jaka jest relacja między serwerem aplikacji a serwletem? Serwery aplikacji odbierają żądania HTTP, analizują informacje i decydują, który serwlet powinien otrzymać obiekt żądania? Czy raczej serwery aplikacji odbierają żądania HTTP, analizują informacje i wysyłają je do wszystkich serwletów jednocześnie?

Taka jak pomiędzy systemem operacyjnym a aplikacją. Serwer uruchamia serwlety, ma tam zdefiniowane filtry, żeby żądania trafiały do odpowiedniego serwletu, udostępnia dla serwletu zasoby typu kolejki, bazy danych, wspólne biblioteki.

  1. SA moze wykonywać dowolna metode z aplikacji?

Zależy, różne serwery, różne możliwości. Jeżeli dopiszesz jakiegoś wrapera w postaci serwletu, czy JSP, to można powiedzieć, że tak, da się wywołać każdą metodę aplikacji z tego poziomu.

  1. Metoda init Servletu jest wywoływana tylko raz, po utworzeniu instancji?

Tak, myśl o tym jak o konstruktorze.

  1. Dzieki springowi mozemy używac szablonów do generowania stron internetowych jako odpowiedzi na żądania HTTP. Tutaj pojawia sie Thymeleaf jest jakas alternatywna technologia do tego?

Np. JSP. Tylko to już właściwie historia. Praktycznie wszystko co się teraz robi, to backend wystawiający API do danych + single page app w jakimś React, czy innym Angular do UI. Oczywiście jakieś wewnętrzne narzędzia prościej i szybciej napisać na templatkach, ale produkcyjnie się tego już raczej nie używa w nowych projektach, podobnie zresztą jak serwerów aplikacyjnych JEE.

0

A server (np. Spring) rzuca tylko .json-ami.

W takim razie Spring ze swoja Java jest nalecialoscia ludzi, ktorzy nauczyli sie tej technologii w latach '90 i to jest jednyny sluszny jezyk do robienia API(wedlug nich). A Oracle widzac popularnosc chociazby TypeScripta/Node rozpoczal polroczne releasy. Am I right?
EDIT
Widoczna Java w ogloszeniach o prace to najczesciej jakis legacy, ktory trzeba przepisac do czegos nowszego?

1

@p_agon: osobiście nie rozumiem, co masz na myśli.
Restowe api poza tym, że podlega pewnym wymaganiom (np. operowanie na zasobach a nie "czasownikach" itp itd) polega na wymianie danych z aplikacją (front-end). Najczęściej stosuje się do tego jsona. ale można to pchać równie dobrze xml'em.
Nie bardzo rozumiem to wspomniane przez Ciebie powiązanie TS'a do resta jako takiego.

Alternatyw dla resta jest sporo ale jak to w życiu bywa, mają różne wady i zalety dlatego należy dobierać narzędzie do problemu a nie odwrotnie.

0

A Oracle widzac popularnosc chociazby TypeScripta/Node rozpoczal polroczne releasy. Am I right?

Co ma Java do Typescripta?

4

@p_agon:

W takim razie Spring ze swoja Java jest nalecialoscia ludzi, ktorzy nauczyli sie tej technologii w latach '90 i to jest jednyny sluszny jezyk do robienia API(wedlug nich).

Nie. Zwłaszcza, że Spring zdobył popularność w okolicach 2006-2010. W tym czasie Web nie robiło się JSONowy API tylko dziwactwami (typu JSF, który całkiem często był sprzęgnięty ze Springiem). Większość server side renderingu pochodzi z tych czasów.

A Oracle widzac popularnosc chociazby TypeScripta/Node rozpoczal polroczne releasy. Am I right?

Nie wiem co ma piernik do wiatraka. Ale ewidentnie wzorowano się również na technologiach frontendowych, które stosowały takie release (angular na pewno).
Tym niemniej pytanie od czapki, nie ma to nic wspólnego z Webem w javie ani ze springiem.

Widoczna Java w ogloszeniach o prace to najczesciej jakis legacy, ktory trzeba przepisac do czegos nowszego?

Nie wiadomo. Strzelam, że najczęściej to jest legacy, którego wcale nikt nie chce przepisywać.. tylko trzeba dłubać dalej. Poza tym legacy to nic złego - tłumacz sobie legacy jako system, który zarabia. Tylko cieniasy się tego boją.
Jak chcesz się nauczyć rzemiosła - clean code, testy itp. to w legacy jest to IMO łatwiejsze. Tzn. np. testy się trudniej robi technicznie, ale zwykle łatwiej przepchnąć biznesowo.

2

@piotrpo:

To najwyższa wasrstwa protokołu sieciowego, niżej masz jakieś TCP/IP, ethernet itd. Definiuje takie rzeczy jak szyfrowanie, przekazywanie ścieżek, nagłówki, metody (GET, POST, PUT DELETE, inne...)

Definiuje szyfrowanie? o_O
Za to jest raczej odpowiedzialna warstwa niżej czyli sesji (ssl/tls).

2

Widoczna Java w ogloszeniach o prace to najczesciej jakis legacy, ktory trzeba przepisac do czegos nowszego
Nie wiadomo. Strzelam, że najczęściej to jest legacy, którego wcale nikt nie chce przepisywać.. tylko trzeba dłubać dalej. Poza tym legacy to nic złego - tłumacz sobie legacy jako system, który zarabia. Tylko cieniasy się tego boją.

Po pierwsze primo, to zalezy od definicji legacy. Dla niektórych to będzie stary system, a dla innych legacy to będzie po prostu chjowy kod - 20 zaleznosci w serwisie biznesowym, getteroza i setteroza, encje biznesowe oparte o JPA. zwracanie nuli etc.
Dla mnie legacy to jest to drugie. Wole 10 letni "porządny system" - dobra architektura, testy etc. od 2 letniego spaghetti którego każdy zakazuje ruszyc ;)
A stare systemy będą miały coraz więcej znaczenia bo po prostu czas płynie. W roku 2000 było mniej systemów niż jest ich teraz, więc teraz bedzie więcej utrzymiania. Zwykła logika i matematyka :P

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