Веб-програмування на Java

Матеріал з Вікіпідручника
Перейти до: навігація, пошук

Для освоєння поданого матеріалу необхідно попередньо ознайомитись з мовою розмітки веб-сторінок HTML та вивчити власне саму мову програмування Java (так зване Java Core - досл. ядро Java). Для цього ви можете скористатися відповідними вікіпідручниками «HTML» та «Освоюємо Java».

Долучайтесь до покращення даного вікіпідручника. Якщо знайдете помилки або ж неточності, виправте їх або напишіть про них на сторінці обговорення.

Вступ[ред.]

Мова програмування Java розроблялася як платформа для програмування різноманітних пристроїв. Проте стрімкий розвиток інтернет-технологій змусив творців java працювати і в цьому напрямку. Початково ставка робилася на аплети, проте через певні проблеми ранніх віртуальних машин джави із швидкодією та безпекою, аплети так і не змогли скласти конкуренцію іншим дещо подібним технологіям як то flash. Проблема безпеки аплетів до цих пір актуальна. Компанія Google з 1 вересня 2015 року припинила підтримку плагінів NPAPI, в наслідок чого, плагіни на основі NPAPI (Silverlight, Java-applet и Unity) у Google Chrome працювати не будуть[1]. В 1997 році Sun розпочав роботу над новою інтернет-технологією JSP, а згодом з'явилася і успішно розвивається ціла платформа Java Enterprise Edition (JEE), яка включає цілий ряд технологій для розробки повноцінних серверних інтернет-прикладень. В результаті java змогла закріпитися у світі-веб програмування і успішно конкурувати із іншими аналогічними веб-технологіями.

Основною веб-технологій, що базуються на java є серверні сторінки джави (Java Server Pages, JSP) та сервлети (Servlets). Даний вікіпідручник фокусується саме на їх описі.

Встановлюємо Apache Tomcat[ред.]

Для розробки та виконання серверних сторінок Java (JSP) та сервлетів необхідний спеціальний засіб, так званий сервлет контейнер. Існує декілька реалізацій сервлет контейнерів як платних так і безкоштовних. Apache Tomcat безкоштовний контейнер сервлетів розроблений фірмою Apache Software Foundation, яка відома також тим що займається розробкою одного з найпопулярніших веб-серверів Apache.

Процес встановлення Apache Tomcat на вашому локальному комп'ютері доволі простий:

1. Звантажте Tomcat із офіційного сайту tomcat.apache.org. Тут зараз ідеться про встановлення Tomcat 7.

2. Якщо ви звантажили архів, розпакуйте його в каталог, наприклад, у C:\Tomcat7.

3. Запустіть командний рядок і зайдіть у каталог C:\Tomcat7\bin та наберіть:

startup

Скоріш за все ви отримаєте наступне повідомлення:

C:\tomcat7\bin>startup
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

Це означає що для запуску потрібно певним чином вказати де встановлено Java (вірніше де встановлено JDK - Java Development Kit). Це можна зробити кількома способами. Можна зайти у змінні середовища і створити змінну JAVA_HOME. Інколи в літературі так і вказують. Проте це не дуже хороший спосіб надіятись на системні змінні і ставити себе в залежність від системи. Найкращий спосіб відредагувати файл catalina.bat.

4. Тож у каталозі C:\tomcat7\bin знайдіть catalina.bat і відредагуйте його. Вписавши наступний рядок:

set JAVA_HOME=c:\jdk7

Звичайно ж потрібно вказати де у вас знаходиться JDK.

5. Спробуйте знову запустити Apache Tomcat. Повинно вийте, щось на зразок такого:

C:\tomcat7\bin>startup
Using CATALINA_BASE:   "C:\tomcat7"
Using CATALINA_HOME:   "C:\tomcat7"
Using CATALINA_TMPDIR: "C:\tomcat7\temp"
Using JRE_HOME:        "c:\jdk7"
Using CLASSPATH:       "C:\tomcat7\bin\bootstrap.jar;C:\tomcat7\bin\tomcat-juli.
jar"
C:\tomcat7\bin>catalina.bat

Паралельно повинно запуститися консольне вікно із повідомленням що сервер запустився.

6. Щоб перевірити чи дійсно усе працює. Наберіть у браузері:

http://localhost:8080/

Повинна з'явитися сторінка із привітанням. На даній сторінці можна перейти на сторінку examples (пошукайте відповідне посилання, у tomcat7 воно знаходиться у розділі Developer Quick Start) де можна запустити тестові JSP та сервлети.

7. Щоб зупинити Tomcat наберіть в командному рядку:

C:\tomcat7\bin>shutdown

IDE вам на допомогу[ред.]

На відміну від звичайного програмування на java, для написання яких цілком достатньо JDK та блокнота, веб-програмування вимагає дещо більше зусиль. Тому створення серверних сторінок java (JSP) та сервлетів користуючись лише блокнотом може бути довгим та нудним процесом. Передусім тому, що необхідне створення каталогів із певними назвами та деяких конфігураційних файлів в форматі .xml. Багато ранніх книжок розпочиналися з детального опису даних каталогів, їхнього призначення та як писати правильно відповідні .xml файли. Сучасні графічні середовища розробки, дозволяють не так детально вглиблюватися в цю тему і беруть значну кількість рутинної роботи на себе. Зокрема надають зручні графічні форми для редагування файлів конфігурації.

Ви можете вибрати, наприклад, NetBeans або ж Eclipse, або ж інше популярне графічне середовище розробки, яке дозволяє створити заготовку веб-застосунку(web application). В основному після встановлення графічного середовища розробки, все що необхідно від користувача, це вказати IDE де знаходиться Tomcat. Після чого можна працювати. В кожному IDE це робиться по своєму, тому тут не буде наводитися як це робиться. Ви просто можете пошукати відповідний опис в інтернеті чи навіть відповідний відеоурок, яких зараз чимало або ж можете розібратися самі.

Привіт JSP[ред.]

Коли ви користуєтеся браузерами і натискаєте на певному посиланні чи кнопці, ви відправляєте HTTP запит на веб-сервер. Найпростіше, коли ви маєте діло із статичними HTML сторінками, тобто, ті які описані на HTML і ви просто здійснюєте переходи з однієї html сторінки на іншу сторінку. Тоді веб-сервер (що є спеціальною програмою, а в нашому випадку його функції частково виконує Tomcat) вибирає запитану вами сторінку і пересилає її вашому браузеру, який опрацьовує її і виводить вам на екран у читабельному симпатичному вигляді. Інше діло, коли вам потрібно, щоб нова сторінка видала вам щось специфічне, в залежності від того, що ви натиснули. Наприклад, ви вводите прізвище та ім’я, а у відповідь вам необхідно одержати телефон введеної вами особи. Тоді на веб-сервері повинна бути відповідна програма/скрипт, що могла б звернутися до певного файлу чи бази даних, знайшла б необхідний телефон і сформувала б вам відповідну html сторінку із потрібними вам даними. Такі програми можуть писатися на різноманітних мовах веб-програмування. Якщо ви працювали з такими мовами як PHP чи Perl, то дана концепція не буде вам новою. Освоїти JSP та сервлети не складніше за освоєння даних мов, проте потребує попереднього вивчення власне самої Java.

Для реалізації вищенаведеної задачі з допомогою джави, можна скористатися або ж сервлетом або ж серверною сторінкою джави (JSP). Сервлет – це серверна програма написана суто на Java. JSP – це по суті HTML сторінка з розширенням .JSP, де поміж звичайними HTML тегами вставлені ще так звані JSP скриптлети (JSP scriptlets) та спеціальні JSP вирази (JSP expressions). Якщо вам не потрібно робити великих обчислень, то краще створювати JSP. Якщо ж для вашої задачі вам потрібно писати багато коду на Java, то звичайно що простіше зробити це у сервлеті.

Насправді кожна серверна сторінка джави перед виконанням перетворюється у сервлет. Це відбувається при першому зверненні до неї користувача. Здійснює перетворення і компіляцію так званий JSP процесор (JSP engine). При повторному зверненні користувача, зразу ж буде викликатись уже скомпільований сервлет.

Для прикладу, розробимо веб-прикладення, яке складатиметься з двох сторінок. Першою буде проста сторінка з формою для введення логіна та паролю (index.jsp). При натисненні кнопки «Підтвердити» відбуватиметься запит до іншої сторінки, яка просто виведе введені користувачем логін та пароль (hello.jsp).

Для початку створіть відповідний проект для вашого веб-прикладення (web application) у вашому інтегрованому середовищі розробки. У NetBeans, наприклад, це робиться через пункт меню File->New Project після чого вибираємо у діалоговому вікні зі списку категорію Java Web та вид проекту Web Application. В результаті введення назви вашого проекту з’явиться ряд каталогів з головним файлом index.jsp. Після деякого редагування це і буде перша наша сторінка. Практично схожим чином діємо і в інших IDE.

Ось перша сторінка:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Введіть логін та пароль</h1>    
        <form name="hello" action="hello.jsp" method="post">   
            <table border="0">
      
                <tbody>
                    <tr>
                        <td>Логін: </td>
                        <td><input type="text" name="login" value="" size="15" /></td>
                    </tr>
                    <tr>
                        <td>Пароль:</td>
                        <td><input type="password" name="password" value="" size="15" /><br/></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td> <input type="submit" value="Підтвердити" name="submit" /><br/></td>
                    </tr>
                </tbody>
            </table>
        </form>  
    </body>
</html>

Якщо ви знаєте html, то практично усе вам повинно бути зрозумілим. На сторінці присутня форма для створення запиту і в таблиці розміщуються елементи форми: два текстових поля та кнопка.

Лише перший рядок може викликати запитання – це власне і є спеціальне jsp вставлення. Вона просто коротко описує нашу сторінку. Дану сторінку запросто можна написати і зберегти з розширенням .html, видаливши перший рядок. При натисненні кнопки на сервер був переданий запит з відповідними змінними та їхніми значеннями.

Якщо б у нас був не POST, а GET запит, то у браузері при переході на сторінку name.jsp ми б побачили:

http://localhost:8080/HelloApp/hello.jsp?login=volodimirg&password=qazwsx&submit=Підтвердити

Друга сторінка name.jsp буде більш цікавішою. Її створити можна у тому ж каталозі що і попередня сторінка.

 <%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h3>Ви розкриті</h3>
        <% String login=request.getParameter("login"); 
           String password=request.getParameter("password");  
           String ipAddress=request.getRemoteAddr();
        %>
        Ваш логін:<%= login %><br/>
        Ваш пароль: <%= password %><br/>
        Ваша IP адреса: <%= ipAddress %>
    </body>
</html>
Вигляд index.jsp та hello.jsp у браузері

Як бачимо у нас є JSP скриптлет оточений обмежувачами <% та  %>. Тут по суті іде звичайний java код.

Наш Scriplet витягує значення параметрів і зберігає їх у відповідних змінних. Щоб у потрібному місці вивести значення змінних, використовуються відповідні JSP вирази, наприклад, <%= login %> - вставляє в код сторінки значення змінної login.

Слід зазначити, що при використанні кирилиці можуть виникнути проблеми з правильним відображенням символів із запиту. Коли замість потрібних букв будуть зображені незрозумілі закарлючки та символи. Вся проблема у різних кодуваннях запиту і того, що використовує віртуальна машина java, tomcat, база даних і т.п. Якщо у вас в наведеному прикладі вивело саме так, то у випадку з POST запитом допоможе створення спеціального сервлета-фільтра, який викликається перед запитом певних сторінок та сервлетів. Приклад фільтру та вирішення інших проблем з кодуванням дивіться на stackoverflow.com. Даний фільтр повинен бути відповідним чином прописаний у файлі конфігурації web.xml.

    <filter>
        <filter-name>NewFilter</filter-name>
        <filter-class>ua.vova.NewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>NewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Знову ж таки, щоб не заплутатись у файлах конфігурації, популярні IDE надають графічні форми для редагування файлів конфігурації, зокрема і для web.xml.

З GET запитом складніше. В інтернеті можна знайти ряд рекомендацій як усунути цю проблему, проте роз’яснення потребує більш кращого знання теми JSP та сервлетів. Наразі, просто замініть назву типу запиту з GET на POST у відповідних прикладах, або ж застосовуйте латинські літери.

JSP скриптлети та вирази[ред.]

Отже існують JSP скриптлети та JSP вирази, що оточені відповідними JSP тегами. З скриптлетами зрозуміло — у них всередині знаходяться інструкції Java. Що ж та таке вирази? Коли ви пишете вираз ви по суті говорите, що результат його обчислення повинен виводитися на екран (тобто вставлятися в html сторінку як текст). При цьому можна обійтися і без змінної:

<%= request.getParameter("password") %>

Зверніть увагу, що на відміну від інструкцій скриптлету, вираз не закінчується крапкою з комою. Виводити можна як примітивні типи так і об’єкти. Якщо результатом виразу є об’єкт, то ви повинні бути впевнені, що в ньому присутній метод toString. В іншому разі буде викликаний метод toString класу Object, що є предком усіх класів Java. Результатом цього буде виведено лише ім’я класу та хеш-код.

Можна комбінувати скриптлети та вирази. Наприклад, в одному скриптлеті ви стартуєте цикл. Далі після нього йде вираз, який виводить значення змінної, а далі знову скриптлет, який збільшує змінну і завершує цикл. Це працює по тій при чині, що вкінці-кінців при першому звернені JSP сторінка спочатку перетворюється в сервлет, а далі уже сервлет при кожному зверненні формує HTML сторінку.

П’ять типів JSP тегів[ред.]

Теги Назва Застосування
<%      %> JSP скриптлет для вставлення блоку інструкцій java
<%=     %> JSP вираз для показу string значення виразу
<%@     %> JSP директива для встановлення умови, що стосується усього JSP
<%--     --%> JSP коментар cказати JSP процесору, щоб ігнорував код
<%!      %> JSP оголошення для оголошення екземплярів змінних та методів для JSP

Якщо нам потрібно імпортувати певні класи, необхідно вставити наступну JSP директиву (директива сторінки, page directive):

<%@ page import="java.util.Date, ua.mylibrary.*" %>

Різниця між html-коментарем та JSP коментарем <%-- --%> в тому, що html коментар є частиною html сторінки і пересилається користувачу, лишень не виводиться при перегляді її браузером, а JSP коментар суто для розробника. Він не опрацьовується при компіляції JSP сторінки і відповідно не включається в html-код сторінки, яку користувач переглядає у браузері. Зауважте, що якщо у html коментарі присутні JSP теги, то вони будуть скомпільовані і опрацьовані. Тобто якщо там передбачається створення певного об’єкту, то об’єкт на сервері буде створений. Якщо там є JSP вираз, то він буде опрацьований і у html коментар буде вставлено відповідний текст. JSP ж коментарі не компілюються, не опрацьовуються і відповідно нічого не створюється, нікуди не вставляється і не відсилається.

Тож, щоб уникнути сюрпризів і неправильного виконання, у випадку з JSP скриптлетами, виразами, директивами, тощо, використовуйте JSP коментарі, html-коментарі в цьому вам не допоможуть .

В середині скриптлету можна застосовувати звичайні коментарі джави (// та /* */ ).

JSP оголошення дозволяють оголошувати змінні та методи, проте це не дуже добре робити в JSP сторінках. Основна причина в тому, що такі змінні не є безпечними з точки зору багатонитковості. Використання таких змінних та методів може призвести до ряду проблем, пов’язаними з використанням їх різними нитками. Оголошені в JSP змінні і методи є глобальними і потрібно вживати спеціальних заходів, щодо безпечної роботи із ними.

JSP помилки[ред.]

При роботі з JSP найчастіше в браузері можна побачити помилку 404 та 500.

Error 404 означає, що JSP не знайдено. Необхідно перевірити чи працює Tomcat і чи коректна URL адреса.

Error 500 означає, що JSP знайдено, проте не скомпільовано через помилку в середині. Уважно читайте інформацію відображену в браузері, за якою можна визначити, що це за помилка і де в коді вона.

Привіт сервлет[ред.]

Тож наступна наша задача написати сервлет, щоб робив те ж саме, що і hello.jsp. Кожен сервлет повинен розширювати клас HttpServlet. Для того, щоб обробляти запити нам потрібно замістити два методи doPost та doGet. Оскільки обом методам найчастіше потрібно робити одне і те ж, то ж визначають цю роботу у одному методі, а в іншому методі просто його викликають. Також можна визначити інший, власний метод, який би викликався із методів doPost та doGet. Останнє і зроблено в нашому прикладі.

package ua.volodimirg;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloFirstServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            //витягуємо параметри із http запиту
            String login=request.getParameter("login"); 
            String password=request.getParameter("password");  
            String ipAddress=request.getRemoteAddr();
            //відсилаємо html-сторінку
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet HelloFirstServlet</title>");            
            out.println("</head>");
            out.println("<body>");
      
            out.println("<h3>Ви розкриті</h3>");
            out.println("Ваш логін: "+ login +"<br/>");
            out.println("Ваш пароль: " + password +"<br/>");
            out.println("Ваша IP адреса: "+ipAddress);
            
            out.println("</body>");
            out.println("</html>");
        } finally {            
            out.close();
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }


    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
}

Якщо ви знаєте джаву, то нічого складного у вищенаведеному коді для вас немає. Нове тут з’явилося, хіба що наступний рядок:

PrintWriter out = response.getWriter();

Тут ми створюємо потік виводу, який відсилатиме назад у браузер необхідний html-код. Далі просто іде запис необхідного коду у потік виводу.

Щоб створити сервлет у IDE, необхідно натиснути на проекті праву кнопку миші і ввести назву сервлету, та псевдонім за яким до нього будуть звертатися. Наприклад, в даному прикладі повна назва HelloFirstServlet, а звертатися до нього будемо просто HelloServlet. Щоб це зробити, нам потрібно зробити декілька дій.

Перш за все зробити відповідне мапування (англ. mapping) у файлі web.xml. Скоріш за все IDE само створить вам відповідний файл і пропише усе потрібне (у NetBeans необхідно всього лиш поставити відповідну галочку при створенні сервлету). Для вищенаведених прикладів було створено наступний web.xml файл:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <filter>
        <filter-name>NewFilter</filter-name>
        <filter-class>ua.volodimirg.NewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>NewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>HelloFirstServlet</servlet-name>
        <servlet-class>ua.volodimirg.HelloFirstServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloFirstServlet</servlet-name>
        <url-pattern>/HelloFirst</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

Якщо ви не створювали фільтра сервлетів з метою правильного читання кирилиці, то тегів із його згадкою у вашому web.xml не буде. Зверніть увагу як вказано як потрібно звертатися до сервлету в URL-адресі:

<url-pattern>/HelloFirst</url-pattern>

Друге, що нам потрібно, це модифікувати index.jsp. У тегу form, замість посилання на hello.jsp, поставте HelloFirst.

<form name="hello" action="HelloFirst" method="post">

Якщо усе правильно зроблено, то у браузері ви отримуватимете те ж саме, що і при використанні hello.jsp. Лишень рядок адреси у браузері при переході на нову сторінку виглядатиме так:

http://localhost:8080/HelloApp/HelloFirst

Зауважте, як іде зверненні до сервлету. Використовується не точна назва сервлету, а коротка, яку ми написали в web.xml файлі в тегові <url-pattern>.

Загалом, найкращий спосіб програмування веб-прикладень на java – це комбінація сервлетів та jsp.

І на останок, як вже було сказано будь-яка сторінка jsp компілюється і створюється відповідний сервлет, який і опрацьовує запити від користувача. Якщо ви написали jsp і щось йде не так, хоча ніби все правильно, ви завжди можете глянути на код створеного сервлету. Для цього, після того як викликали в браузері відповідну jsp, скористайтесь пошуком в каталогах tomcat і ви обов’язково знайдете скомпільовані файли з розширенням .class та вихідні файли з розширенням .java. Останні файли можна відкрити і переглянути код створеного сервлету. Так, для вищенаведеного прикладу, при запуску index.jsp, файл index_jsp.java знаходився за адресою C:\tomcat\work\Catalina\localhost\HelloApp\org\apache\jsp. І звичайно ж ви можете скористатися засобами зневадження у вашому інтегрованому середовищі розробки для пошуку вад у коді.

Сесії[ред.]

Менеджер прикладень Tomcat 7

Коли ви відкриваєте JSP сторінку у браузері на сервері відбувається відкриття сесії. Ви можете подивитися на відкриті сесії Томкету відвідавши відповідну сторінку: на основній сторінці Tomcat 7 необхідно натиснути кнопку Manager App. Вам буде запропоновано ввести логін та пароль. У файлі C:\tomcat\conf\tomcat-users.xml повинен бути описаний відповідний користувач. У Tomcat 7 на відміну від Tomcat 6 використовується декілька користувачів для доступу до різних сторінок і можливостей Tomcat. Так в даному випадку необхідний користувач manager-gui. Для нашого випадку, для доступу до менеджера прикладень, необхідно, щоб були присутні такі рядки у tomcat-users.xml:

<tomcat-users>
  <role rolename="manager-gui" /> 
  <user password="55" roles="manager-gui" username="tomcat1" /> 
</tomcat-users>

Тож при такому описі користувача, на запит пароля необхідно ввести tomcat1 та пароль 55. Ви можете задати у файлі tomcat-users.xml власну назву користувача і пароль. Загалом Tomcat інформуватиме вас, які користувачі потрібні для доступу до його службових сторінок.

Утримавши доступу до менеджера прикладень, ви зможете побачити скільки сесій запущено для певного веб-прикладення.

Термін Сесія застосовується до взаємодії сервера і користувача від моменту перегляду першої сторінки на сервері до закриття браузера або ж до закінчення часу відведеного для сесії з користувачем від останнього його звернення до сервера (переважно 30 хв.).

Коли користувач працює з вашим сайтом, сервер підтримує сесію за посередництвом кукі (англ. cookie – дослівно. печиво, коржик, ще є пропозиція перекладати як "реп'яшок"). Коли Tomcat отримує HTTP запит від клієнта, він перевіряє чи запит містить кукі за назвою по замовчуванню JSESSIONID. Якщо кукі не знайдено, то створюється кукі з унікальним значенням і воно додається до HTTP-відповіді. Це і знаменує собою початок сесії. Все це відбувається автоматично і не потрібно реалізовувати самому. Якщо браузер приймає куки, він додаватиме їх до усіх наступних запитів до цього серверу.

Також кукі можна створювати самому, вони використовуються для збереження і передачі часто вводимих даних на стороні користувача, проте у браузері користувач може відключати можливість використання кукі, тому потрібно або попереджати користувача, щоб увімкнув їх, або ж писати код сторінок так, щоб можна було обходитися без кукі. Переглянути ID сесії можна так:

<%
    HttpSession session1=request.getSession();
    String s=session1.getId();
    out.println(s);
%>

В результаті в браузері буде виведено ряд чисел, на зразок: E873633EC113311CA0306882A0143936

Що дає нам сесія? Основна мета сесії – це передача певних даних між різними JSP сторінками та сервлетами, що пов’язані з певним користувачем. З програмної точки зору, сесія – це спеціальний об’єкт в якому ми можемо зберігати ім’я змінної та її значення, або ж навіть цілий об’єкт. Наступний рядок демонструє як зберегти певне значення:

session.setAttribute("MyAppOperator", "");

І коли потрібно отримати значення можна скористатися відповідним методом getAttribute:

boolean isOperator = (session.getAttribute("MyAppOperator")  != null);
if (isOperator) { ...

Наступний приклад демонструє використання сесійної змінної для підрахування звернень до сторінки під час сесії:

<%
            
      String s=request.getSession().getId(); 
      out.println("ID="+s);    
      Long k=(Long)session.getAttribute("Counter");

      if (k==null) k=1L; 
          else k=k+1L;
      
      session.setAttribute("Counter", k);
      k=(Long)session.getAttribute("Counter");
      out.println("<br/> k="+k);

 %>

Просто вставте даний код у JSP сторінку.

Зауважте, що лічильник збільшується при кожному зверненні до сторінки, допоки браузер не буде закритий.

Якщо вкінці добавити рядок:

session.invalidate();

то кожного разу буде відкриватися нова сесія. Метод invalidate так би мовити «вбиває» сесію. Також можна встановити максимальний інтервал неактивності. Як вже було сказано по замовчування через пів години бездіяльності користувача, сесію буде закрито. Проте це можна змінити:

  session.setMaxInactiveInterval(60*60*24);  // один день
  session.setMaxInactiveInterval (-1); // допоки не буде закритий браузер

При необхідності можна перебрати усі атрибути, що зберігає сесія таким чином:

  Enumeration names=session.getAttributeNames();
  while (names.hasMoreElements())
  {
	out.println((String) names.nextElement());
  }

Рекомендована література[ред.]

  • Murach's Java Servlets and JSP (2nd Edition) by J. Murach, A. Steelman . 2008. - 729 p.
  • Head First Servlets and JSP, 2nd Edition by Bryan Basham, Kathy Sierra, Bert Bates. 2008. - 912 p.
  • Java Web Programming with Eclipse by David A Turner, Jinseok Chae
  • Beginning JSP, Jsf and Tomcat: Java Web Development by Giulio Zambon. 2012. - 436 p.