naukaJavy.pl

  • Zwiększ rozmiar czcionki
  • Domyślny  rozmiar czcionki
  • Zmniejsz rozmiar czcionki
Home Pierwsza aplikacja w Javie

Pierwsza aplikacja WWW

Email Drukuj

Podstawową technologią implementacji aplikacji WWW w Javie są tzw. Servlety. Jakkolwiek istnieje ogromna liczba przeróżnych technologii, które ułatwiają tworzenie aplikacji WWW, to koniec końców wszystkie one są li tylko - mniej lub bardziej sprytnym - wykorzystaniem technologii Servletów. Na dobry początek zaimplementujmy więc prosty Servlet.

Servlet to nic innego, jak pewna specyficzna klasa (fragment kodu w Javie) obsługująca żądania protokołu HTTP. Servlety, aby mogły działać, muszą być zainstalowane na Serwerze Aplikacji. Zadaniem owego serwera jest zamiana żądań HTTP na wywołania odpowiednich metod zaimplementowanych w języku Java. Implementując aplikację WWW w Javie musimy zaimplementować ową specyficzną klasę – Servlet – oraz przygotować plik konfiguracyjny XML zwany deskryptorem wdrożenia, tudzież deskryptorem instalacji (ang. deployment descriptor).

Deskryptor wdrożenia zawiera informacje opisujące w jaki sposób serwer aplikacji ma udostępniać nasz Servlet. W szczególności są to informacje określające adres HTTP naszego Servletu (tj. URL naszej aplikacji WWW).

Nasz pierwszy Servlet zaimplementujemy bez pomocy IDE. Niezbędne będzie natomiast JDK oraz serwer aplikacji Tomcat. Jak zainstalować JDK opisałem w artykule "Instalujemy JDK" a jak Tomcata w artykule "Instalujemy serwer Tomcat".

Posługując się naszym ulubionym edytorem tekstu (np. Notepad z systemu Windows) utwórzmy plik o nazwie HelloWorldServlet.java i treści:

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();
  }
}

Powyższy kod to nic innego jak klasa języka Java o nazwie HelloWorldServlet, która to klasa spełnia wszystkie wymagania specyfikacji Servletów, a więc jest Servletem.

Teraz przygotujemy deskryptor wdrożenia. Utwórzmy więc posługując się dowolnym edytorem tekstu plik o nazwie web.xml (plik ten zawsze musi się nazywać dokładnie tak) i zawartości:

<?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>

Zanim przystąpimy do instalacji aplikacji na serwerze Tomcat, musimy nasz Servlet skompilować. Wydajemy w tym celu z linii poleceń (będąc w katalogu, w którym zapisaliśmy plik HelloWorldServlet.java) komendę:

javac -cp "%CATALINA_HOME%\lib\servlet-api.jar" HelloWorldServlet.java

Zakładam, że zdefiniowaliśmy zmienną środowiskową %CATALINA_HOME% tak aby wskazywała katalog w którym zainstalowaliśmy serwer Tomcat. Ewentualnie, możemy zamiast %CATALINA_HOME% wpisać ścieżkę dostępu do katalogu bazowego Tomcata (np. C:\Program Files\Tomcat 6.0).

Pozostało jeszcze naszą aplikację zainstalować na serwerze. W tym celu w podkatalogu webapps Tomcata, tj. w katalogu %CATALINA_HOME%\webapps tworzymy katalog o nazwie WebApp. W katalogu WebApp tworzymy podkatalog WEB-INF (nazwa wydaje się być dziwna, ale taka być musi) i w tymże jeszcze podkatalog o nazwie classes. Do katalogu WebApp\WEB-INF kopiujemy deskryptor wdrożenia, tj. plik web.xml, a do katalogu WebApp\WEB-INF\classes skompilowany Servlet, tj. plik HelloWorldServlet.class. Ostateczna struktura powinna być taka jak pokazano poniżej.

Struktura katalogowa aplikacji WWW

Jeśli Tomcat był wyłączony, to teraz go uruchamiamy (patrz artykuł "Instalujemy serwer Tomcat"). Jeśli postępowaliśmy dokładnie tak, jak opisano w niniejszym artykule, to aplikacja dostępna jest pod adresem http://localhost:8080/WebApp/HelloWorld. Uruchamiamy przeglądarkę żeby przekonać się czy działa. Efekt powinien być podobny do tego pokazanego poniżej.

Pierwsza aplikacja WWW

Jeśli zamiast tego widzimy komunikat o błędzie, to odczekajmy chwilkę i odświeżmy jeszcze raz stronę. Ewentualnie, jeśli to nie pomoże, zrestartujmy serwer. Problemy tego typu nie powinny wystąpić, jeśli Tomcat był początkowo wyłączony i uruchomiliśmy go dopiero po zainstalowaniu aplikacji.

Może wydawać się, że skoro tak słaby efekt wymaga tak dużej ilości pracy, to jest to gra nie warta świeczki. Śpieszę więc z wyjaśnieniami - można to wszystko zrobić dużo prościej. Dowiemy się jak, jeśli tylko zdecydujemy się zainwestować w naukę Javy wystarczającą ilość czasu. No i oczywiście, nade wszystko, Java nie służy do implementacji tego typu trywialnych aplikacji.

 

Komentarze  

 
+4 Sławomir Kuglarz 2015-06-19 16:42
Hmmm... Co robię źle?

wynik kompilacji servlet'a:



E:\java>javac -cp "%CATALINA_HOME%\lib\servlet-api.jar" HalloWorldServl et.java
HalloWorldServl et.java:1: error: package javax.servlet does not exist
import javax.servlet.ServletExceptio n;
^
HalloWorldServl et.java:2: error: package javax.servlet.http does not exist
import javax.servlet.http.HttpServlet;
^
HalloWorldServl et.java:3: error: package javax.servlet.http does not exist
import javax.servlet.http.HttpServletRequ est;
^
HalloWorldServl et.java:4: error: package javax.servlet.http does not exist
import javax.servlet.http.HttpServletResp onse;
^
HalloWorldServl et.java:9: error: cannot find symbol
public class HalloWorldServl et extends HttpServlet {
^
symbol: class HttpServlet
HalloWorldServl et.java:12: error: cannot find symbol
protected void doGet(HttpServl etRequ est request,
^
symbol: class HttpServletRequ est
location: class HalloWorldServl et
HalloWorldServl et.java:13: error: cannot find symbol
HttpServletResp onse response)
^
symbol: class HttpServletResp onse
location: class HalloWorldServl et
HalloWorldServl et.java:14: error: cannot find symbol
throws ServletExceptio n, IOException {
^
symbol: class ServletExceptio n
location: class HalloWorldServl et
8 errors



Przy czym sprawdziłem czy się nie kopnąłem i wszędzie konsekwentnie mam Hallo zamiast Hello - więc raczej nie tu problem :)

Z góry dzięki!
 

Reklama

Wiadomości

Oracle złożył pozew sądowy przeciwko firmie Google, oskarżając o naruszenie patentów i praw autorskich dotyczących platformy Java.

Kością niezgody jest platforma Google Android a zwłaszcza Wirtualna Maszyna Dalvik, zaimplementowana w oparciu o Wirtualną Maszynę Javy, ale niezgodna ze standardem Java SE czy Java ME.

Co to jest

Apache Lucene Java to biblioteka open-source napisana w języku Java. Lucene służy do implementacji mechanizmów wyszukiwania pełnotekstowego – taki mały Google, który możemy mieć we własnej aplikacji.


© Wszelkie prawa zastrzeżone dla Mariusza Lipińskiego

kontakt: mariusz.lipinski@naukajavy.pl | strona domowa: www.mariuszlipinski.pl