Mój pierwszy servlet uruchomiony :)

    To nie było takie oczywiste.

    Gdy oglądałem filmik instruktażowy, to wychodziło mi wszystko co na tym filmiku było, tylko nie jedno... nie działało. Oczywiście zaczerpnąłem wiedzy z innych źródeł i zacząłem intensywnie szukać odpowiedzi i realizowałem kolejne pomysły, które przyszły mi do głowy. Napisałem na grupie programistów problem i znaleźli się ludzie dobrej woli, którzy mi podpowiedzieli co zrobić, żeby działało.

    A dokładnie miałem taki problem:

póki nie mam servletu stworzonego to działa zarówno index.html w katalogu web, jak i każdy inny plik *.html i *.jsp, jednak gdy tylko stworzę servlet w lokalizacji src to już wyskakuje błąd 404 :( gdy potem usunę servlet to znowu działa html I jsp.
    Po chwili odezwał się ktoś i podpowiedział mi tak:

Jezeli masz już jakiś servlet na Tomcat-cie to aby uruchomić ten servlet adres w przeglądarce powinien wyglądać tak:
http://localhost:8080/NazwaTwojegoServletu
a adnotacja w kodzie servletu tak:
@WebServlet("/NazwaTwojegoServletu")

Drugim rozwiązaniem jest opis w pliku web.xml
Plik ten umieszczamy w drzewie projektu, w lokalizacji: main –> webapp –> WEB-INF
W pliku web.xml możemy zdefiniować listę nazw plików, które będą automatycznie wywoływane przez
serwer przy uruchomieniu programu. Serwer rozpoczyna wywoływanie plików od listy podanej w
web.xml (w kolejności, którą podamy). Jeśli nie zdefiniujemy tam żadnych plików, domyślnie serwer
będzie szukał w naszej aplikacji plików w poniższej kolejności:
1. index.html
2. index.htm
3. index.jsp
Jeżeli nie znajdzie żadnego z tych plików, zwróci błąd z kodem 404.
    Potem poprosiłem go o schematyczny servlet, żebym wiedział, że nigdzie nie mam literówki, po czym podesłał mi taki kod:

package main.java.pl.coderslab;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(value = "/Servlet11")
public class Servlet11 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//typ zwracanej wartości, kodowanie(polskie znaki)
        response.setContentType("text/html; charset=utf-8");
// wyswietla na konsoli
        System.out.println("Hello First Servlet ");

// wyswietla w przegladarce
        response.getWriter().append("Hello First Servletąęść" + "<br>");
        response.getWriter().append("Hello First Servletąęść12345");
    }
}
   

    I to przechyliło szalę na moja stronę :) Oto co napisałem niedługo po tym:

DZIAŁA! Ha ha, ale fajnie :) nie od razu, bo to, co wyżej skopiowałem, to spowodowało, że serwer się uruchamiał (co już było postępem), ale nie uruchamiał się servlet i nie wiedziałem co zrobić, żeby działał (właśnie sprawdziłem, że wystarczyło w oknie przeglądarki wpisać po "/" Servlet11 - z dużej, a ja wpisywałem z malej i nie działało). Jednak zanim to odkryłem, to znalalem w necie konfigurację web.xml na taki:
<servlet>
    <servlet-name>servlet11</servlet-name>
    <servlet-class>main.java.pl.coderslab.Servlet11</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>servlet11</servlet-name>
    <url-pattern>/servlet</url-pattern>
</servlet-mapping>


    I to działało (po wpisaniu w oknie "servlet"). Potem sprawdziłem, że jak zamienie w servlecie po @WebServlet "value" na "name" i dodan urlPattern, to też działa. No i na końcu sprawdziłem, że w Twojej wersji wystarczyło wpisać tak jak jest i też działa. Także mam 3 sposoby, w których działa :) 

Dziękuję raz jeszcze, mogę iść dalej :)
    Haaa... jak ja lubię happy endy, chociaż to nie koniec, a raczej początek, to i tak coś zrobiłem z sukcesem i mam satysfakcję.

    To tyle ode mnie na dziś, zapraszam Ciebie do dzielenia się swoim dzisiejszym odkryciem  np. w komentarzu :)

Komentarze

Popularne posty z tego bloga

IntelliJ: zmiana rozmiaru czcionki scrollem

ThunderBird: jak zrobić professional stopkę