Какво е JSP файл?
JSP файловете се реализират като динамични, управлявани от данни страници за вашите Java уеб приложения. JSP означава Java Server Pages; може да се реализира като разширение на Servlet, тъй като позволява повече функционалност от сървлета, като например език за изразяване. JSP и Servlet вършат една и съща работа заедно в по-стари Java уеб приложения. От гледна точка на програмирането, най-ясната разлика между тях е, че със сървлетите пишете програма на Java и след това вграждате статично маркиране (като HTML) в този код, докато JSP започва със скрипта или маркирането от страна на клиента, след което вграждате JSP тагове в свържете страницата си към бекенда на Java.
JSP файлов формат
Файл, записан с файлово разширение jsp, съдържа следните секции в реда, в който са изброени:
- Начални коментари
- Директива(и) за JSP страница
- Директива(и) за библиотека с етикети по избор
- Незадължителна JSP декларация(и)
- HTML и JSP код
Начални коментари
JSP файл или фрагментен файл започва с коментар в стила на сървъра:
<%-- - Author(s): - Date: - Copyright Notice: - @(#) - Description: --%> Коментарът по-горе се появява само от страна на сървъра, тъй като се премахва при изобразяване на страницата в браузъра. Коментарът може да съдържа информация за автора(ите), датата и известието за авторски права на редакцията, идентификатор и описание на JSP страницата за разработчици. Комбинирането на знаците " @(#)" се разпознава от определени програми като указващо началото на идентификатор.
Директива(и) за JSP страница
Директива за JSP страница дефинира атрибути, свързани с JSPF страницата по време на превод. JSP спецификацията не налага ограничение за това колко JSP директиви за страница могат да бъдат записани в една страница. Вижте следния пример:
<%@ page session="false" %> <%@ page import="java.util.*" %> <%@ page errorPage="/common/errorPage.jsp" %> Ако директива за страница надвишава нормалната ширина на JSP страница, директивата се разделя на няколко реда:
<%@ page session="false" import="java.util.*" errorPage="/common/errorPage.jsp" %> Директива(и) за библиотека с етикети по избор
В JSP страницата директива за библиотека с етикети декларира персонализирани библиотеки с етикети. Кратка директива може да бъде декларирана в един ред. Множество директиви на библиотека с етикети са подредени заедно на едно и също място в тялото на JSP страницата:
<%@ taglib uri="URI1" prefix="tagPrefix1" %> <%@ taglib uri="URI2" prefix="tagPrefix2" %> ... Незадължителна JSP декларация(и)
Методите и променливите, декларирани в JSPF файл, трябва да съществуват в JSP декларации. Тези методи и променливи са подобни на декларациите в езика за програмиране Java и затова трябва да се следват съответните конвенции в кода. Декларациите обикновено се пишат в единичен < %! … %> JSP декларационен блок, за централизиране на декларации в една област от тялото на JSP страницата. вижте следните примери:
Различни декларационни блокове:
<%! private int hitCount; %> <%! private Date today; %> ... <%! public int getHitCount() { return hitCount; } %> Предпочитан декларационен блок:
<%! private int hitCount; private Date today; public int getHitCount() { return hitCount; } %> HTML и JSP код
Този раздел на JSP страница съдържа HTML тялото на JSP страницата и JSPF кода, като JSP изрази, скриптове и инструкции на JavaBeans.
Жизнен цикъл на JSP страница
Потокът на JSP страницата по фазите е даден тук:
- Превод на JSP страница
- Компилация на JSP страница
- Classloading (зареждането на класове зарежда файла на класа)
- Инстанциране (Създава се обект на генерирания сървлет).
- Инициализация (контейнерът извиква jspInit() метод).
- Обработка на заявка (контейнерът извиква метода _jspService()).
- Унищожаване (контейнерът извиква jspDestroy() метод).

Пример за JSP
Научаването за JSP технологиите е много лесно в днешно време, защото много JSP уроци са достъпни в интернет. Следният JSP пример е за обработка на поръчката чрез актуализиране на съответните записи в базата данни.
<html> <head> <title>Order Book</title> </head> <body> <h1>Another E-Bookstore</h1> <h2>Thank you for ordering...</h2> <% String[] ids = request.getParameterValues("id"); if (ids != null) { %> <%@ page import = "java.sql.*" %> <% Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:8888/ebookshop", "myuser", "xxxx"); // <== Check! // Connection conn = // DriverManager.getConnection("jdbc:odbc:eshopODBC"); // Access Statement stmt = conn.createStatement(); String sqlStr; int recordUpdated; ResultSet rset; %> <table border=1 cellpadding=3 cellspacing=0> <tr> <th>Author</th> <th>Title</th> <th>Price</th> <th>Qty In Stock</th> </tr> <% for (int i = 0; i < ids.length; ++i) { // Subtract the QtyAvailable by one sqlStr = "UPDATE books SET qty = qty - 1 WHERE id = " + ids[i]; recordUpdated = stmt.executeUpdate(sqlStr); // carry out a query to confirm sqlStr = "SELECT * FROM books WHERE id =" + ids[i]; rset = stmt.executeQuery(sqlStr); while (rset.next()) { %> <tr> <td><%= rset.getString("author") %></td> <td><%= rset.getString("title") %></td> <td>$<%= rset.getInt("price") %></td> <td><%= rset.getInt("qty") %></td> </tr> <%} rset.close(); } stmt.close(); conn.close(); } %> </table> <a href="query.jsp"><h3>BACK</h3></a> </body> </html>