1.1 Introduktion til JSP

Der er to populære måder at skrive en servlet på: imperativ og deklarativ . Vi har allerede behandlet den første - dette er faktisk en Servlet. Den anden hedder JSP (Java Server Pages), og den stifter vi bekendtskab med nu.

Servlet JSP eksempel:


<html> 
    <body> 
        <% out.print(2*5); %> 
    </body> 
 </html> 

Ikke meget lig den klassiske Servlet, vi er vant til, vel? Det er rigtigt. JSP er en HTML-side med Java-kodeindsættelser (markeret med grønt) .

Ser du, hvis du har meget Java-kode i en servlet og lidt HTML-kode, så er du mere tryg ved at bruge en klassisk servlet . Men hvad hvis du har brug for en stor HTML-side, hvor kun et par linjer ændres af serveren?

I dette tilfælde ville den enkleste ting være at oprette denne HTML-side og på en eller anden måde udføre Java-koden på serveren lige i den.

1.2 Kompilering af JSP'er

Lad os se på et andet eksempel:


<html> 
  <body> 
    <%
        double num = Math.random();
        if (num > 0.95) {
     %>
         <h2>You are lucky, user!</h2><p>(<%= num %>)</p>
    <%
        }
    %> 
  </body> 
</html> 

Vi får et tilfældigt tal, og hvis det er større end 0,95, udskriver vi teksten "Du er heldig, bruger!"

Java-kode er fremhævet her med blåt . Normal (ikke fremhævet) - HTML-kode og rød - service-tags , som hjælper med at forstå, hvor Java-koden er, og hvor HTML-koden er.

Lægger du mærke til noget mærkeligt? Den afsluttende krøllede bøjle "}"er i en anden "code block". Hvad er den rigtige måde at skrive sådan kode på? Hvordan virker det overhovedet?

Svaret bliver super enkelt :)

Efter at webserveren har fundet en JSP-fil, kompilerer den til en klassisk servlet. Baseret på ovenstående JSP-side vil denne Servlet blive genereret:

public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  throws Exception {
    PrintWriter out = response.getWriter();
    out.print("<html> ");
    out.print("<body>");
        double num = Math.random();
        if (num > 0.95) {
            out.print("<h2>You're lucky user! </h2><p>(" + num + ")</p>");
        }
    out.print("</body>");
    out.print("</html>");
    }
}

Webcontaineren har lige genereret servlet-koden, hvor HTML'en blev til tekst, og Java-kodeindlæggene blev almindelig Java-kode!