JSP (JavaServer Pages)

JSP , czyli JavaServer Pages jest technologią wchodzącą w skład platformy Javy EE. Służy do tworzenia dynamicznych stron internetowych, w których oprócz statycznego kodu HTML wymagane są dynamiczne fragmenty w tym przypadku pisane w języku Java. JSP najczęściej wykorzystywane są z dwoma innymi specyfikacjami, czyli JSTL oraz Expression Language.

Problemem pojawiającym się przy tworzeniu stron internetowych jest to, że zazwyczaj od strony widoku (tego co widzi użytkownik) składają się one tak naprawdę w dwóch rzeczy:

  • statycznego kodu HTML, np. niezmiennego menu, czy stopki
  • treści zmienianej dynamicznie, np. aktualnie wyświetlany artykuł, czy film na youtube, sugestie produktów dopasowane do aktualnie przeglądanego produktu w sklepie itd.

Kurs Java EE i Jakarta EE

Istnieje możliwość generowania całego kodu HTML korzystając np. z serwletów, jednak czytelność takiego rozwiązania jest zazwyczaj bardzo niska, a sama edycja kodu uciążliwa, ponieważ to zazwyczaj kod Javy stanowi mniejszość w porównaniu do kodu HTML. Przykładowy servlet:

package pl.javastart.controller;
 
 import java.io.IOException;
 import java.io.PrintWriter;
 
 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.*;
 
 @WebServlet("/HtmlServlet")
 public class HtmlServlet extends HttpServlet {
 	private static final long serialVersionUID = 1L;
        
 	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
 	        throws ServletException, IOException {
 	    PrintWriter writer = response.getWriter();
 	    writer.println("<html>");
 	    writer.println("<head>");
 	    writer.println("<title>Tytuł strony</title>");
 	    writer.println("</head>");
 	    writer.println("<body>");
 	    writer.println("<h1>Nagłówek strony</h1>");
 	    writer.println("</body>");
 	    writer.println("</html>");
 	}
 
 }

JSP pozwala nam na definiowanie podobnego zachowania, ale w drugą stronę, czyli umieszczanie w kodzie HTML dynamicznych wstawek Javy. Można to realizować korzystając ze specjalnych znaczników zwanych skryptletami. Przykładowa strona JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
 <!DOCTYPE html>
 <html>
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 		<title>Insert title here</title>
 	</head>
 	<body>
 		<h2>Wynik dodawania 2+2 to: <% out.print(2+2); %></h2>
 	</body>
 </html>

Rozwiązanie takie też nie jest idealne, bo gdy zaczynamy przeplatać ze sobą dużą ilość kodu HTML z dużą ilością Javy, całość mocno traci na czytelności. Rozwiązaniem problemu jest korzystanie ze znaczników JSTL połączonych z wyrażeniami Expression Language lub wykorzystać niestandardowy system szablonów typu Thymeleaf.

Ważną kwestią jest zrozumienie w jaki sposób działają strony JSP i jak kod Javy jest dynamicznie wplatany w HTML. W rzeczywistości strony JSP przy pierwszy odwołaniu do nich są tłumaczone z wykorzystaniem mechanizmów kontenera serwletów na serwlet. Proces translacji zachodzi tylko raz, przy każdym kolejnym odwołaniu korzystamy już z wygenerowanego serwletu.

Translacja JSP na serwlet

Dyskusja i komentarze

Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.