- •Основні відомості про сервлети і JavaServer Pages
- •Базова структура сервлетів
- •Життєвий цикл сервлета
- •Метод init
- •Метод service
- •Інтерфейс SingleThreadModel
- •Метод destroy
- •Обробка клієнтських запитів
- •Заголовки http-запиту
- •Коди станів http
- •Заголовки http-відповіді
- •Обробка cookies
- •Атрибути cookie
- •Відслідкування сеансу
- •Отримання інформації про сеанс
- •Перегляд інформації про сеанс
- •Кодування адрес url, надісланих клієнту
- •Елементи сценарію jsp
- •Вирази jsp
- •Скриплети jsp
- •Оголошення jsp
- •Інші наперед визначенізмінні
- •Директива сторінки jsp
- •Включення файлів і аплетів у документи jsp
- •Використання JavaBeans з jsp
- •Основи використання bean-компонентів
- •Доступ до властивостей bean-компонентів
- •Сумісне використання bean-компонентів
- •Робота з базами даних
- •Завантаження тареєстрація драйвера
- •Визначення url для встановлення з’єднання
- •Встановлення з’єднання
- •Створення об’єкту для передачі операторів sql
- •Формування запиту для виконання
- •Виконання запиту
- •Обробка результатів
- •Завершення з’єднання
- •Попередньо відкомпільовані (підготовлені) запити
- •Пакетне виконання sql запитів
- •Виконання внутрішніх процедур
- •Інтегрування сервлетів і jsp-сторінок Перенаправлення запитів із сервлетів
- •Передача інформації на сторінки призначення
- •Перенаправлення запитів з jsp-сторінок
- •Використання аплетів у якості клієнтських інтерфейсів сервлетів
Завершення з’єднання
Для явного завершення з’єднання викликається методи closeкласів ResultSet, Statement, Connection. Якщо в подальшому необхідно виконати ще які-небудь дії з БД, цей етап слід відкласти, оскільки витрати на відкриття з’єднання порівняно великі.
Важливість закриття з’єднань являється важливим питанням, оскільки для кожного сервера баз даних існує деяка максимальна кількість одночасних з’єднань з базою.mysql дозволяє безболісно плодити незакриті з'єднання (він їх самзнищуєз часом), Oracle навпаки - число Connection у нього обмежено (це обмеження на к-ть клієнтів), тому вичерпавши к-ть Connection'ів Ви можете "повісити" свій додаток. Лікується така ситуація лише пере запуском служб сервера баз даних (як правило перезапуском сервера-компю’тера).
Приклад:
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.sql.*;
public class AutoCatalog extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
Class.forName("org.gjt.mm.mysql.Driver"); //назва класу для драйвера
}
catch (ClassNotFoundException e) {
out.println("Error loading driver: " + e);
}
String host = "localhost";
String dbName = "AutoBase";
int port = 3306;
String URL = "jdbc:mySQL://" + host + ":" + port + "/" + dbName;
String username = "root";
String password = "SuperPass";
try {
Connection connection = DriverManager.getConnection(URL, username, password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * from Autos");
while(resultSet.next()) {
//ваші дії з елементами результуючої таблиці
}
resultSet.close();
statement.close();
connection.close();
}
catch (SQLException e) {
out.println(e);
}
}
}
Попередньо відкомпільовані (підготовлені) запити
При необхідності виконання схожих SQL-операторів декілька разів використання підготовлених операторів виявляється більш ефективнішим, ніж виконання кожного разу одного і того ж оператора із різними значеннями параметрів. Створюється параметризований оператор стандартного виду, який надсилається БД на компіляцію перед тим, як він використовуватиметься.Для позначення місць у запиті, де підставлятимуться реальні значення параметрів, використовують знаки питання. Кожного разу при використанні підготовлених операторів достатньо замінити один з параметрів за допомогою методів setXxx. Потім викликається метод executeQuery або executeUpadate.
Приклад:
Connection connection = DriverManager.getConnection(URL, username, password);
String Template = “UPDATE employees SET Salary = ? WHERE id = ?”;
PrearedStatement statement = connection.prepareStatement(template);
Float[] newSalaries = getNewSalaries();
Int[] employeeIDs = getIDs();
for(int i=0; i<employeeIDs.length; i++) {
statement.setFloat(1, newSalaries[i]);
statement.setInt(2, employeeIDs[i]);
statement.execute();
}