Pierwszy servlet w Java Hello World

Pierwszy servlet w Java Hello World
MP
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 3 lata
  • Postów:29
0

Od jakiegoś czasu uczę się Java. Postanowiłem zacząć ćwiczyć proste aplikacje webowe. Mam zinstalowany Tomcat 9.0.14, W Inteliji utworzyłem nowy projekt->Java Enterprise->Web application. Kod poniżej. Wydaje się że serwer Tomcat startuje poprawnie, tylko po wpisaniu adresu http://localhost:8080/HelloWorldServlet/HelloWorld mam bład

HTTP Status 404 – Not Found
Type Status Report
Message /HelloWorldServlet/HelloWorld
Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
Apache Tomcat/9.0.14

Przejrzełam kilknaście poradników i turtoriali ale we wszyskich jest to samo. Gdzie popełniam błąd. Czy pliki muszę wgrać do katalogu z Tomcat? Tak robiłem i nic nie pomogło.

web.xml

Kopiuj


<?xml version="1.0" encoding="UTF-8"?>
<web-app
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        version="2.5">

    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>HelloWorldServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/HelloWorld</url-pattern>
    </servlet-mapping>
</web-app>

HelloWorldServlet.java

Kopiuj
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

public class HelloWorldServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        out.println("<html><head><title>My Servlet</title></head><body>");
        out.println("Hello World!");
        out.println("<body></html>");

        out.close();
    }
}
edytowany 1x, ostatnio: mprofitw
S9
  • Rejestracja:prawie 13 lat
  • Ostatnio:7 miesięcy
  • Postów:415
1

Ale zdajesz sobie sprawę że to czego się uczysz to jest technologia z czasów kamiennych tabic i nikt dzisiaj w tej sposób nie programuje ?

MP
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 3 lata
  • Postów:29
0

Nie nie zdaję sobie sprawy. Chcę po prostu zacząć a nie moge odpalić najprostszej aplikacji!

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:dzień
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
1

To w ogóle nie jest prosta aplikacja, serwlety, tomcat..

Proste aplikacje webowe to masz tak:
http://sparkjava.com/documentation


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:11 dni
  • Postów:3561
2

a mi się wydaje, że JEDEN, słownie JEDEN servlet trzeba w życiu zrobić, aby zrozumieć co mogą, co nie mogą frameworki webowe, jakie mają zalety i mankamenty. Co to jest abstrakcja Requets i Response.
Nawet żeby zrozumieć wyższość / niższość JEE i serwować technologiami non-servlet np o niskim zużyciu wątków (tj zrozumieć co przejada wątki)

Gdybym był gorliwym krytykiem JEE, to przywołał bym ludzką mądrość, że choć raz się tzreba sparzyć i choć raz trzeba się młotkiem stuknąć. Aby wiedzieć co się krytykuje.

Albo np w moim widzeniu problemu monokultura Spring Boota jest szkodliwa, bo developer nie ma nawet wyobrażenia co jest pod maską. Na dziś Boot to jest takie webowe voodoo "kazali użyć, używam, ale nie rozumiem"

Dopóki serwery servletowe istnieją choćby w starszych projektach.


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 dni
  • Postów:3277
0

Spróbuj http://localhost:8080/HelloWorld

Ja tam ostatnio widziałem servlet w "nowym" kodzie, ale nie ukrywam, że byłem lekko zażenowany.

edytowany 1x, ostatnio: piotrpo
AK
Ja zrozumiałem Ciebie "servlet w wykonaniu ręcznym", słusznie? Bo w piwnicach każdego bardziej współczesnego fw (Wicket, Vaadin, JSF2) pracują konieczne (nieliczne) servlety (albo filtry - Filter) .Fakt - nie są widoczne.
piotrpo
Tak, o to chodziło.
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:dzień
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
0
AnyKtokolwiek napisał(a):

a mi się wydaje, że JEDEN, słownie JEDEN servlet trzeba w życiu zrobić, aby zrozumieć co mogą, co nie mogą frameworki webowe, jakie mają zalety i mankamenty. Co to jest abstrakcja Requets i Response.

Do tego servlety nie sa wcale potrzebne. Podany przeze mnie sparkjava pokazuje to o wiele przyjaźniej, bez całego syfu servletów.
Servlety sa potrzebne tylko i wylacznie do nauczenia się servletów. Faktycznie, w wielu firmach, nawet w aplikacjjach springowych można takie spotkać i czasem nawet ma to jeszcze jakiś sens!
(najczęściej spotykam servlety w jakiś dziwnych operacjach uploadu/ downloadu ).


jeden i pół terabajta powinno wystarczyć każdemu
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

@jarekr000000: akurat Spark to nie framework. Ja nie znam żadnego frameworka Javovego który nie opierałby się o servlety, no poza SpringWebfluxem ale to nawet nie jest do końca framework :P


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
jarekr000000
No właśnie. Do web/rest nie jest framework potrzebny.
S9
Ale ja tego nie neguje, tylko chodzi o to że OP powiedział ze chodzi o frameworki :P
jarekr000000
Nie. przynajmniej ja nie widzę.
S9
  • Rejestracja:prawie 13 lat
  • Ostatnio:7 miesięcy
  • Postów:415
0

@mprofitw: szukaj pod hasłem Spring boot.

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)