Baza Wiedzy

JSP (JavaServer Pages)

JSP, czyli JavaServer Pages jest technologią wchodzącą w skład specyfikacji 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.

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.

    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

    Komentarze

    Dodawanie komentarzy jest aktualnie wyłączone.