Що таке файл JSP?
Файли JSP реалізовані як динамічні, керовані даними сторінки для ваших веб-додатків Java. JSP означає сторінки сервера Java; може бути реалізований як розширення 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
- Завантаження класів (завантажувач класів завантажує файл класу)
- Створення екземпляра (створюється об’єкт згенерованого сервлета).
- Ініціалізація (контейнер викликає метод jspInit().
- Обробка запиту (контейнер викликає метод _jspService()).
- Destroy (контейнер викликає метод 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>