Proste z pozoru zadanie pt. jak napisać i uruchomić prostą stronę w JSP i servlet w serwerze Tomcat korzystając z wbudowanych ułatwień w IntelliJ Idei okazuje się dosyć trudnym zadaniem dla początkujących programistów Java. Poniżej znajduje się uproszczony przepis jak zrobić to w kilkudziesięciu (!) prostych krokach. Przepis bazuje na systemie Linux ale większość kroków powinna być identyczna na innych OS-ach.
Wymagania na starcie
- JDK 1.8 lub nowsze, polecenie „
java -version
” powinno zwracać wynik zbliżony do ’java version "1.8.0_111"
’ - Gradle 3.1 lub nowsze, polecenie „
gradle -version
” powinno zwracać wynik zbliżony zawierający...Gradle 3.1...
, - IntelliJ Idea Utimate (nie mam pewności czy wsparcie do Tomcata jest w Community).
Utworzenie projektu
- Robimy nowy projekt w Idei: File -> New -> Project -> Empty project -> Next -> wskazujemy katalogi, np. w katalogu
~/projects/example-gradle-war/
- Robimy nowy moduł typu „Gradle”:
- File -> Project Structure -> Modules -> (+) -> New module -> Gradle -> zaznaczamy „Additional Libraries and Frameworks”: Java i Web,
- podajemy GroupId:
mberkan.pl
, ArtifactId:examplewar
, VersionId:1.0-SNAPSHOT
-> Next, - na ekranie konfiguracji gradle nic nie zmianiamy, klikamy Next,
- zostawiamy „Module name” =
examplewar
i podane ścieżki, klikamy Finish i „Ok” -> jako wynik mamy plikbuild.gradle
i katalogsrc/main/webapp
z plikiemindex.jsp
- File -> Project Structure -> Modules -> (+) -> New module -> Gradle -> zaznaczamy „Additional Libraries and Frameworks”: Java i Web,
- Instalacja serwera Tomcat:
- ściągamy binarkę z http://tomcat.apache.org/download-80.cgi i rozpakowujemy do katalogu
~/opt/apache-tomcat-8.5.6/
- w Idei wchodzimy na Run -> Edit configuration
- klikamy (+) i wybieramy „Tomcat Server” -> „Local”
- jako nazwę podajemy „Tomcat 8.5.6”, klikamy Configure i wskazujemy powyższy katalog
~/opt/apache-tomcat-8.5.6/
- przy ostrzeżeniu na dole pt. „No artifacts marked for deployment” klikamy „Fix” i wybieramy „examplewar-1.0-SNAPSHOT.war (exploded)”
- klikamy OK
- ściągamy binarkę z http://tomcat.apache.org/download-80.cgi i rozpakowujemy do katalogu
- Odpalamy skonfigurowanego Tomcata przyciskiem „Debug”
- na konsoli powinno się pojawić coś w rodzaju:
[2016-12-13 11:22:22,095] Artifact Gradle : mberkan.pl : examplewar-1.0-SNAPSHOT.war (exploded): Artifact is deployed successfully
- Otwieramy przeglądarką URL http://localhost:8080/ i powinien pojawić się napis „
$END$
” (lub inna treść strony JSP wygenerowana z szablonu). - Wprowadzamy zmianę w pliku JSP, np. za znacznikiem $END$ dodając „XXX”,
- Sprawdzamy że zwykłe przeładowanie strony w przeglądarce nic nie daje :-(,
- Wybieramy Run -> Update 'Tomcat 8.5.6′ application (CRTL-F10) -> zaznaczamy „Update classes and resources” -> OK,
- Przeładowujemy strony w przeglądarce -> widzimy zmianę :-).
- W pliku
build.gradle
w sekcji dependencies dodajemy:compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
(inaczej nie znajdzie się klasa HttpServlet)
- W widoku „Gradle” klikamy pierwszą ikonkę ze strzałkami „Refresh all gradle projects”
- Zaznaczamy w sekcji „Project” katalog
src/main
i dodajemy (CRTL-Insert) „Directory” o nazwiejava
- Klikamy na stworzony katalog i dodajemy „Package” o nazwie
pl.mberkan.examplewar
- Klikamy na stworzony pakiet i dodajemy „Class” o nazwie
ExampleServlet
- Wygenerowanej klasie dodajemy
extend HttpServlet
, dodajemy ciało metody i mapowanie na URL:package pl.mberkan.examplewar; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author Marek Berkan */ @WebServlet("/servlet") public class ExampleServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.getWriter().println("Hello"); } }
- Wybieramy Run -> Update 'Tomcat 8.5.6′ application (CRTL-F10) -> zaznaczamy „Redeploy” -> OK
- Otwieramy przeglądarką URL http://localhost:8080/servlet i widzimy „Hello”.
- Wprowadzamy zmianę w pliku ExampleServlet, np. za „Hello” dodając „XXX”,
- Sprawdzamy że zwykłe przeładowanie strony w przeglądarce nic nie daje :-(,
- Wybieramy Build -> Recompile 'ExampleServlet.java’ (CRTL-Shift-F9),
- Przeładowujemy strony w przeglądarce -> widzimy zmianę.
„Fast-development” plików JSP
Fast-development to określenie szybkiego osiągania efektu zmian w kodzie JSP widocznego w przeglądarce – standardowo trzeba budować projekt i restartować serwer aplikacyjny co jest szalenie nieefektywne przy komercyjnym tworzeniu oprogramowania. Chcemy aby wyniki naszych zmian były widoczne niemal od razu, jak w PHP.
Pierwszy servlet
Fast development servletów
Podsumowanie
Mam nadzieję że ten przepis ułatwi start nowego projektu początkującym programistom Java.
Kod opisanej aplikacji znajduje się pod adresem https://github.com/.