Статьи

Учебное пособие по JSP — ULTIMATE Guide

ПРИМЕЧАНИЕ ДЛЯ РЕДАКЦИИ: Технология JavaServer Pages (JSP) позволяет легко создавать веб-контент, содержащий как статические, так и динамические компоненты. Технология JSP делает доступными все динамические возможности технологии Java Servlet, но обеспечивает более естественный подход к созданию статического контента.

Основные функции технологии JSP включают язык для разработки страниц JSP, которые представляют собой текстовые документы, описывающие, как обрабатывать запрос и конструировать ответ, язык выражений для доступа к объектам на стороне сервера и механизмы для определения расширений языка JSP. ,

Это отдельная справочная статья, представляющая основу для работы с JSP и помогающая быстро запустить собственные приложения. Наслаждайтесь!

1. Введение

Java Server Pages (JSP) используется для создания динамических веб-страниц. Java-код может быть вставлен в HTML-страницы с помощью тегов JSP. Теги используются для извлечения информации из базы данных, обмена информацией между страницами и т. Д. Обычно для запуска страниц JSP используются среды IDE NetBeansIDE и EclipseIDE.

1.1. Почему JSP предпочтительнее сервлетов?

  • JSP предоставляет более простой способ создания и управления динамическими веб-страницами.
  • Не требует дополнительных файлов, таких как файл класса java и web.xml
  • Поскольку JSP обрабатывается веб-контейнером для любого обновления в их коде, он не требует перекомпиляции, как это делают сервлеты.
  • Доступ к странице JSP можно получить напрямую, тогда как сервлет требует сопоставления с web.xml.

2. Жизненный цикл

Жизненный цикл JSP такой же, как жизненный цикл сервлета с дополнительным шагом. На этом этапе JSP компилируется в сервлет. Жизненный цикл показан на рисунке ниже:

image001

2.1. Перевод

На первом этапе веб-контейнер переводит документ JSP в эквивалентный код Java. Этот код Java является сервлетом. Перевод автоматически выполняется веб-сервером, который находит, проверяет правильность и записывает сервлет для страницы JSP.

2.2. компиляция

На этом этапе контейнер JSP компилирует исходный код Java, чтобы создать соответствующий сервлет и сгенерированный файл класса.

2,3. Загрузка и инициализация

На третьем этапе контейнер JSP загружает сервлет, созданный на предыдущих двух этапах. После правильной загрузки JSP-контейнер создает экземпляр класса сервлета. Здесь он использует конструктор без аргументов.

Теперь контейнер JSP инициализирует экземпляр объекта, вызывая метод init . Это реализуется контейнером путем вызова jspInit() .

1
2
3
public void jspInit() {
  // Initialization code...
}

2,4. выполнение

На этом этапе механизм JSP вызывает метод _jspService() . Метод имеет два параметра, а именно HttpServletRequest и HttpServletResponse, и вызывается один раз для каждого запроса. Он также отвечает за генерацию ответа на этот запрос.

1
2
3
void _jspService(HttpServletRequest request, HttpServletResponse response)
{
}

2.5. разрушающий

Последний шаг завершает жизненный цикл. В этом случае контейнер удаляет JSP с помощью jspDestroy() .

1
2
3
4
public void jspDestroy()
{
   // any cleanup code
}

3. Демо: для начала

Это пример использования JSP. Выполните следующие действия, чтобы начать работу с первым приложением JSP с использованием Eclipse IDE. Используемые технологии приведены ниже:

  • Java 1.8
  • Eclipse IDE: Eclipse Java EE IDE для веб-разработчиков 4.4.1
  • JSP
  • Apache Tomcat 8

Рисунок 1: Давайте начнем с создания нового динамического веб-проекта:

Создание нового динамического веб-проекта

Рисунок 2: Добавьте имя проекта как RankWebApplication и нажмите Next :

image003

Пропустите этот шаг для настройки проекта и нажмите « Далее», поскольку мы сосредоточены на простом демонстрационном проекте.

Рисунок 3: Настройка проекта:

image004

Рисунок 4. Настройка параметров веб-модуля. не создавайте файл web.xml, так как он не нужен в этом демонстрационном проекте.

image005

После нажатия кнопки « Готово » создается динамический веб-проект. Каталог проекта виден на левой панели под «Package Explorer»:

Рисунок 5: Структура каталогов проекта:

image006

Щелкните правой кнопкой мыши каталог WebContent и добавьте новый файл JSP в проект.

Рисунок 6: Теперь добавьте файл JSP в динамический веб-проект:

image007

Рисунок 7: Добавление нового файла JSP из мастера:

image008

После нажатия на Next выше, назовите новый файл как NewRankFile.jsp и нажмите Next .

Рисунок 8: добавлен NewRankFile.jsp:

image009

Рисунок 9: Установите шаблон JSP:

image010

Нажав на Finish выше, вы создадите новый файл. Теперь добавьте приведенный ниже код в листинг 1, который выводит рейтинг команд по крикету.

Листинг1: NewRankFile.jsp

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>ICC Ranking</title>
</head>
<body>
<h1>ICC ODI Ranking</h1>
  <table>
    <tr>
       <th>Rank</th><th>Country</th>
    </tr>
    <tr>
       <td>1</td><td>Australia</td>
    </tr>
    <tr>
       <td>2</td><td>India</td>
    </tr>
    <tr>
       <td>3</td><td>South Africa</td>
    </tr>
  </table>
  <!--  JSP Expression is used here for getting system date -->
  <b>Note:</b> Website updated on: <%= (new java.util.Date()).toLocaleString()%>
     
</body>
</html>

Запустите проект, щелкнув правой кнопкой мыши и выбрав Запуск от имени .

Рисунок 10: Из опций нажмите Run on Server :

image011

Выберите « Запустить на сервере» и вручную определите новый сервер «Tomcat», поскольку мы запускаем наш первый проект в EclipseIDE. Установите флажок «Всегда использовать этот сервер при запуске этого проекта», чтобы избежать повторения этого выбора:

Рисунок 11: Выберите сервер:

image012

Здесь выходные данные отображают рейтинги ICC и время обновления сайта, которое генерируется с использованием выражений JSP. Выходная ссылка: http: // localhost: 8080 / RankWebApplication / NewRankFile.jsp

Рисунок 12. Вывод с отображением рейтинга ICC ODI и времени обновления сайта:

image013

4. Директивы

Директивные теги используются для указания направлений и инструкций, используемых на этапе перевода жизненного цикла JSP.

4.1. Синтаксис

1
<%@ directive attribute="value" %>

Здесь директивы могут иметь ряд атрибутов.

4.2. Типы

Рисунок 13: Типы тегов Директивы:

image014

4.2.1. Директива страницы

Тег директивы страницы содержит инструкции, используемые переводчиком на этапе перевода жизненного цикла JSP. Это может быть включено где угодно, но согласно соглашениям это считается хорошим стилем программирования, включая его в верхней части. Синтаксис приведен ниже:

1
<%@page attribute ="value" %>

Эквивалент XML показан ниже:

1
<jsp:directive.page attribute="value" />

Давайте возьмем пример с атрибутом в качестве импорта, который будет включен вверху страницы.

1
<%@ page import="java.util.Date" %>

Атрибуты, используемые в теге директивы страницы, приведены ниже:

атрибут Значение
AutoFlush Он имеет два значения — true и false, по умолчанию — true. Он указывает, будет ли вывод очищаться автоматически при заполнении буфера.
буфер Он определяет модель буферизации с размером буфера в килобайтах.
Тип содержимого Он определяет схему кодировки символов, по умолчанию используется text / html.
Расширяет Требуется квалифицированное имя класса, расширенное классом, эквивалентным сервлету.
errorPage Он указывает URL-адрес другой страницы, на которую должен быть отправлен запрос для обработки исключений времени выполнения, выданных текущей страницей JSP.
импорт Значение — разделенный запятыми список классов Java,
Информация Он определяет строку, к которой можно получить доступ методом getServletInfo ().
isErrorPage Он указывает, является ли текущая страница страницей ошибок с двумя значениями true и false. Значение по умолчанию неверно.
pageEncoding Указывает тип кодировки.

4.2.2 Включить Директиву

Этот тег используется на этапе перевода жизненного цикла JSP для включения файла. Он объединяет содержимое еще двух файлов. Директивы включения могут быть включены в любое место на странице. Синтаксис приведен ниже:

1
<%@ include file="path/url" >

Давайте возьмем пример с файлом как newFile.jsp, который можно разместить там, где это необходимо.

1
<%@ include file="newFile.jsp" %>

4.2.3 Taglib

Он используется для определения библиотеки пользовательских тегов на странице JSP. Это сделано для того, чтобы связанные теги можно было использовать на одной странице. Синтаксис приведен ниже:

1
<%@ taglib uri="URI" prefix="TagPrefix" %>

5. Скриптовые теги

Теги сценариев JSP позволяют добавлять код сценария в код Java сгенерированной страницы JSP. Эта страница создана переводчиком JSP.

5.1. Типы

Существует три типа тегов Scriptlet или элементов Scriptlet, как показано ниже:

5.1.1. Тег сценария

Тег Scriptlet реализует функциональность метода _jspService путем написания сценария / кода Java. Он используется для написания кода Java на странице JSP. Синтаксис приведен ниже:

1
<% Java code %>

XML-эквивалент:

1
script code

Пример приведен ниже:

1
<% out.println(value); %>

5.1.2. Декларативный тег

Декларативный тег используется для объявления переменных класса и реализации методов класса jspInt и jspDestroy . Синтаксис приведен ниже:

1
2
3
<%!
   Declaration
%>

XML-эквивалент:

1
2
3
<jsp:declaration>
     script code
</jsp:declaration>

Пример приведен ниже:

1
2
3
<%!
   int value = 25;
%>

5.1.3. Выражение тега

Тег выражения используется для написания Java-выражения. Никогда не заканчивайте выражение точкой с запятой (;) внутри тега выражения. Синтаксис приведен ниже:

1
<%= Java Expression %>

XML-эквивалент:

1
2
3
<jsp:expression>
     script code
</jsp:expression>

Примеры приведены ниже:

1
<%= --value %>
1
<%= (3*9) %>

5.2. пример

Это пример, показывающий три типа тегов сценариев. Следуйте инструкциям в разделе «Демо», чтобы создать проект в EclipseIDE. Используемые технологии одинаковы.

Давайте начнем с создания приложения- примера Dynamic Web Project в Eclipse IDE:

Рисунок 14: Создание примера приложения:

image015

Рисунок 15: Создание exampleCalculation.jsp:

image016

Листинг 2: example.jsp

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Scriptlet Tag Example</title>
</head>
<h1>Example to print k iterations</h1>
  <%!
       int k;
   %>
  <body>
  <%
         for(k=1;k<=10;++k) {
           out.println(k);
         }
%>
<br>
<%
  out.println("The value of --k is:");
  %>
  <%= --k %>
  <br>
  Updated on: <%= (new java.util.Date()).toLocaleString() %>
</body>
</html>

Рисунок 16. Вывод на печать k итераций и даты обновления сайта:

image017

6. Язык выражения

Язык, который позволяет разработчикам JSP получать доступ к данным приложения, хранящимся в компонентах JavaBeans. Это было введено в JSP2.0

Выражения EL заключаются в символы «$» и «}».

6.1. операторы

6.1.1. Арифметические Операторы

Эти арифметические операторы могут использоваться в выражениях EL: _, -, /, *,%

6.1.2. Операторы отношений

Реляционные операторы, используемые в выражениях EL, могут быть обозначены приведенными ниже символами и краткой текстовой формой:

операторы Краткая текстовая форма Описания пример
> GT Лучше чем $ {150> 5}
< л Меньше, чем $ {15 <65}
> = GE Больше чем равно $ {20> = 20}
<= ле Меньше чем равно $ {15 <= 15}
== уравнение Равно $ {5 == 5}
знак равно Небраска Не равно $ {15! = 65}

6.1.3. Логические Операторы

Логическими операторами являются && (оператор И), || (Или оператор) и! (НЕ оператор)

6.2. Неявные объекты

Неявные объекты могут напрямую использоваться в выражении EL. Пользователи могут использовать эти объекты для получения атрибутов из разных областей и значений параметров. Некоторые из типов неявных объектов приведены ниже:

объект Описание
PageContext Управляет атрибутами страницы.
PageScope Он отображает имена атрибутов в области страницы на их значения.
requestScope Он сопоставляет имена атрибутов в области запроса с их значениями.
sessionScope Он отображает имена атрибутов в рамках сеанса на их значения.
applicationScope Он сопоставляет имена атрибутов в области приложения с их значениями.
Param Он отображает имена параметров в одно значение параметра String.
paramValues Он отображает имена параметров в строку [].
заголовок Он отображает имена заголовков в одно значение заголовка String.
HeaderValues Он отображает имена заголовков в строку [].

6.2.1. пример

Это пример, показывающий неявный параметр объекта. Следуйте инструкциям в разделе «Демо» для создания проекта в EclipseIDE. Используемые технологии одинаковы.

Давайте начнем с создания динамического веб-проекта UserApplication в Eclipse IDE:

Рисунок 17: Создание UserApplication :

image018

Рисунок 18. Создание нового jsp-файла home.jsp

Рисунок 18

Листинг 3: home.jsp

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Welcome</title>
</head>
<body>
<h1>Fill the form given below:</h1>
<form method="post" action="success.jsp">
User : <input type="text" name="userName"><br>
Email: <input type="email" name="emailID">
<input type="submit" value="submit">
</form>
 
</body>
</html>

Рисунок 19: Создайте новый JSP-файл success.jsp :

image016

Листинг 4: success.jsp

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Email Successfully sent</title>
</head>
<body>
<h1>Success</h1>
<br>
<p>Hi ${param.userName}, thanks for giving the details.</p>
<p>Your unique password has been sent to you on <b>${param.emailID}</b></p>
</body>
</html>

Теперь мы запустим UserApplication в EclipseIDE. Адрес локального хоста: http: // localhost: 8080 / UserApplication / home.jsp

Рисунок 20: home.jsp после запуска приложения:

image019

Здесь вы можете добавить свой собственный адрес электронной почты. Я рассмотрел электронную почту, demo@email.com

Рисунок 21: Добавление имени пользователя и электронной почты:

image020

Рисунок 22: Вывод показан здесь после нажатия на кнопку отправки:

image021

7. Обработка исключений

7.1. Вступление

Исключением является ненормальное / непредвиденное условие в нормальном потоке выполнения программы. Эти исключения могут возникать из-за неправильного ввода, доступа к недоступным файлам на диске и т. Д.

Обработка этих исключений во время выполнения называется обработкой исключений. Пользователь может испытывать следующие типы ошибок в коде JSP:

7.1.1. ошибки

Это проблемы, которые находятся вне контроля пользователей. Например, переполнение стека приведет к ошибке.

7.1.2. Проверенные исключения

Это исключения, которые нельзя игнорировать во время компиляции и рассматриваются как ошибка пользователя. Например, IOException

7.1.3. Исключения во время выполнения / непроверенные исключения

Эти исключения могут быть проигнорированы во время выполнения. Например, NullPointerException

7.2. методы

Вот список важных методов, доступных в классе Throwable. Вы можете сослаться на полный список из официальной документации оракула .

методы Описание
public Throwable getCause () Возвращает причину этого броска. Возвращает ноль, если причина неизвестна.
public String getMessage () Возвращает строку сообщения этого метода.
public String toString () Возвращает описание этого броска.
public void printStackTrace () Он печатает трассировку стека.
public Throwable fillInStackTrace () Заполняет трассировку стека выполнения.

7.3. ErrorPage и isErrorPage

Атрибут ErrorPage директивы page используется для настройки страницы ошибки. Для этого используйте приведенную ниже директиву. Любая страница JSP может быть установлена ​​в качестве страницы ошибки, здесь это « DisplayError.jsp «:

1
<%@ page errorPage="DisplayError.jsp" %>

Атрибут isErrorPage используется для генерации переменной экземпляра исключения путем включения следующей директивы. Вы также должны написать DisplayError.jsp:

1
<%@ page DisplayError="true">

7.3.1. пример

Это пример, показывающий использование обеих директив, обсужденных выше. Следуйте инструкциям в разделе «Демо» для создания проекта в EclipseIDE. Используемые технологии одинаковы.

Давайте начнем с создания динамического веб-проекта ErrorHandlingApplication в Eclipse IDE:

Рисунок 23: Создание ErrorHandlingApplication:

image022

Рисунок 24: Создание jsp файла conditionChecker.jsp:

image023

Здесь errorPage устанавливается как DisplayError.jsp:

Листинг 5: conditionChecker.jsp

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page errorPage="DisplayError.jsp" %>
 
<html>
<head>
   <title>Error Handling Example</title>
</head>
<body>
<%
   // Throw an exception to invoke the error page
   int s = 10;
   if (s < 5) {
      out.println("Bingo!!well done!! You're right");
   }
   else {
      throw new RuntimeException("Error found - ");
   }
%>
</body>
</html>

Рисунок 25: Создание файла ошибок DisplayError.jsp:

image024

Здесь атрибут isErrorPage устанавливается как true:

Листинг 6: DisplayError.jsp

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page isErrorPage="true" %>
<html>
<head>
<title>Error Page</title>
</head>
<body>
<h1>Sorry :Error occurred</h1>
<b>Stack trace:</b>
<pre>
<% exception.printStackTrace(response.getWriter()); %>
</pre>
</body>
</html>

7.4. в web.xml

<Error-page> может быть включен в дескриптор развертывания, например, web.xml. Благодаря этому пользователи также могут настраивать разные страницы ошибок для разных типов исключений и даже для кодов ошибок HTTP.

Файл jsp anyErrorPage.jsp вызывается, когда возникает ошибка с кодом состояния 404, как показано ниже:

Листинг 7: Для кода ошибки 404

1
2
3
4
<error-page>
  <error-code>404</error-code>
  <location>/anyErrorPage.jsp</location>
</error-page>

Если приложение выдает IOException, то вызывается anyErrorPage.jsp:

Листинг 8: Для Exception-TypeIOException

1
2
3
4
<error-page>
  <exception-type>java.io.IOException</exception-type >
  <location>/HandlerClass</location>
</error-page>

Если вы хотите избежать дополнительных затрат на добавление отдельных элементов, используйте java.lang.Throwable в качестве типа исключения:

Листинг 9: Для всех исключений упомяните java.lang.Throwable:

1
2
3
4
<error-page>
  <exception-type>java.lang.Throwable</exception-type >
  <location>/HandlerClass</location>
</error-page>

8. Интернационализация

К веб-приложениям обращаются люди со всего мира; это поднимает необходимость интернационализации. Интернационализация позволяет веб-приложению работать в разных странах и регионах без изменений и перекомпиляции кода.

8.1. Класс Locale

Международные Java-приложения используют класс java.util.Locale . Локаль определяет язык и географический регион.

8.1.1. Конструкторы класса Locale

У него есть три конструктора, с помощью которых можно построить объект локали:

Конструктор Описание
Locale (String lang) Создает объект Locale с кодом языка
Locale (Струнный язык, Струнная страна) Он создает объект Locale с кодом языка и кода страны.
Locale (String lang, String country, String вариант) Он создает объект Locale с кодом языка, кодом страны и вариантом.

Это пример интернационализации. Следуйте инструкциям в разделе «Демо» для создания проекта в EclipseIDE. Используемые технологии одинаковы.

Давайте начнем с создания динамического веб-проекта LocaleApplication в Eclipse IDE

Рисунок 26: Динамический веб-проект LocaleApplication :

image025

Рисунок 27: Создание нового jsp файла LocaleFile.jsp :

image026

Листинг 10: LocaleFile.jsp

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
   // get the user's Locale
   Locale userLocale = request.getLocale();
   String userCountry = userLocale.getCountry();
%>
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Finding the Locale of user</title>
</head>
<body>
<%
   out.println("Your Country  : " + userCountry);
%>
 
</body>
</html>

Рисунок 28: Вывод, как показано на http: // localhost: 8080 / LocaleApplication / LocaleFile.jsp :

image027

9. Сессии

Сеанс представляет собой набор HTTP-запросов между клиентом и сервером. Эти 3 способа используются для поддержания сеанса между сервером и клиентом, т.е. куки, перезаписи URL и скрытых полей формы. JSP также использует интерфейс HttpSession, предоставляемый сервлетами. Некоторые методы перечислены ниже с описанием:

9.1. методы

Некоторые важные методы в объекте сеанса:

методы Описание
открытый объект getAttribute (имя строки)

Возвращает объект, связанный с указанным именем в этом сеансе, или ноль, если объект не связан с именем.

public String getId () Возвращает строку, содержащую уникальный идентификатор, назначенный этому сеансу.

public long getLastAccessedTime () Возвращает последний раз, когда клиент отправил запрос, связанный с этим сеансом, в виде количества миллисекунд с полуночи 1 января 1970 года по Гринвичу.

public void invalidate () Делает недействительным этот сеанс и отменяет привязку любых объектов, связанных с ним

public void removeAttribute (String name) Удаляет объект, связанный с указанным именем, из этого сеанса.

public void setAttribute (имя строки, значение объекта) Привязывает объект к этому сеансу, используя указанное имя.

public void setMaxInactiveInterval (int interval) Указывает время в секундах между клиентскими запросами, прежде чем контейнер сервлета аннулирует этот сеанс.

9.2. пример

Это пример обработки сеанса в jsp. Следуйте инструкциям в разделе «Демо» для создания проекта в EclipseIDE. Используемые технологии одинаковы.

Создайте проект «SessionApplication» с помощью jsp-файла SessionHandling.jsp »

Листинг 11: SessionHandling.jsp

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 
<%@ page import="java.io.*,java.util.*" %>
<%
   // creation time of session
   Date create = new Date(session.getCreationTime());
 
   Integer visitCount = new Integer(0);
   String key = new String("visitCount");
    
   // for new visitor
   if (session.isNew()){
      session.setAttribute(key, visitCount);
   }
   visitCount = (Integer)session.getAttribute(key);
   visitCount = visitCount + 1;
   session.setAttribute(key,  visitCount);
%>
<html>
<head>
<title>Session Tracking</title>
</head>
<body>
<h1>Session Tracking</h1>
<table border="1">
<tr>
   <th>Session Information</th>
   <th>Value</th>
</tr>
<tr>
   <td>id</td>
   <td><% out.print(session.getId()); %></td>
</tr>
<tr>
   <td>Creation Time</td>
   <td><% out.print(create); %></td>
</tr>
 
<tr>
   <td>Number of visits</td>
   <td><% out.print(visitCount); %></td>
</tr>
</table>
</body>
</html>

Рисунок 29: Вывод информации о сеансе — визит 1:

image028

Рисунок 30: Вывод информации о сеансе — visit2:

image028

Рисунок 31: Вывод информации о сеансе — визит 3:

image029

10. JavaBean

JavaBeans — это классы Java, написанные на Java для разработки динамического контента. Он отделяет бизнес-логику от логики представления.

Код представления и бизнес-логика могут управляться отдельно. JavaBeans также обеспечивает связь между ними.

10.1. Свойства JavaBean

Свойство JavaBean — это именованный атрибут, который может иметь любой тип данных. Эти свойства могут быть доступны с помощью следующих методов:

  • setPropertyName (): Атрибут только для записи будет иметь только метод setPropertyName ().
  • getPropertyName (): Атрибут только для чтения будет иметь метод getPropertyName ().

10,2. тег useBean

Синтаксис <jsp: useBean>:

1
2
3
<jsp:useBean attributes>
      <!--  content -->
</jsp:useBean>

Атрибуты приведены ниже:

10.3. Атрибуты тега

10.3.1. мне бы

Это представляет имя переменной, назначенное атрибуту id и используется для поиска существующего экземпляра компонента.

10.3.2. сфера

Этот атрибут представляет область, в которой должен находиться экземпляр компонента. Области действия перечислены ниже, здесь по умолчанию используется область страницы:

  • область страницы
  • объем запроса
  • объем сеанса
  • область применения

10.3.3. класс

Это имя класса для создания экземпляра компонента, но класс не должен быть абстрактным классом.

10.3.4. beanName

Требуется квалифицированное имя класса или выражение.

10.3.5. тип

Требуется квалифицированное имя класса или интерфейс.

10.4. пример

Это пример обработки bean-компонента в jsp, который включает фрагменты кода для создания и доступа к bean-компонентам.

10.4.1. Создание бобов

Листинг 12: EmployeeClass.java

Здесь EmployeeClass показывает создание Beans с некоторыми свойствами для имени сотрудника и рабочих точек.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.io.Serializable;
 
public class EmployeeClass implements Serializable
{
   private int points = 0;
   private String name = null;
     
   public EmployeeClass() {
   }
   public String getName(){
      return name;
   }
   public int getPoints(){
      return points;
   }
   public void setName(String firstName){
      this.name = name;
   }
   public void setPoints(Integer points){
      this.points = points;
   }
}

10.4.2. Доступ к бобам

action используется для доступа к методам get, а action используется для доступа к методам set. Они могут быть использованы с действием.

Листинг 13: BeansApplication.jsp

Пример, показывающий, как осуществляется доступ к свойствам JavaBeans.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<html>
<head>
<title>Employee Work Report</title>
</head>
<body>
 
<!-- setProperty -->
<!-- name attribute under setProperty references the id of beans in useBean action -->
<jsp:useBean id="emp" class="com.new.EmployeeClass">
   <jsp:setProperty name="emp" property="name" value="Mahendra"/>
   <jsp:setProperty name="emp" property="points" value="50"/>
</jsp:useBean>
 
<!-- getProperty -->
<!-- name attribute under getProperty references the id of beans in useBean action -->
<p>Name of the Employee:
<jsp:getProperty name="emp" property="name"/>
</p>
<p>Work Performance Points:
<jsp:getProperty name="emp" property="points"/>
</p>
 
</body>
</html>

Листинг 13: Вывод, показывающий реализацию bean-компонентов

1
2
Name of the Employee: Mahendra
Work Performance Points: 50

11. Объекты запроса и ответа

11.1. Запрос

Веб-страница запрашивает веб-браузер для отправки информации на веб-сервер. Эта информация заголовка включает в себя следующее:

принимать Accept-Charset
Accept-Encoding Accept-Language
авторизация соединение
Content-Length печенье
хозяин User-Agent

11.2. HttpServletRequest

Это экземпляр объекта javax.servlet.http.HttpServletRequest. Эти методы доступны с объектом HttpServletRequest и используются для получения информации заголовка HTTP в программе JSP; некоторые из них приведены ниже с описанием:

метод Описание
Cookie [] getCookies () Возвращает массив, содержащий все объекты Cookie, которые клиент отправил с этим запросом.

Перечисление getHeaderNames () Возвращает перечисление всех имен заголовков, которые содержит этот запрос.

Перечисление getParameterNames () Возвращает перечисление объектов String, содержащих имена параметров, содержащихся в этом запросе.

Объект getAttribute (String name) Возвращает значение именованного атрибута в виде объекта или ноль, если атрибута с указанным именем не существует.

Строка getCharacterEncoding () Возвращает имя кодировки символов, используемой в теле этого запроса.

Строка getMethod () Возвращает имя метода HTTP, с помощью которого был сделан этот запрос, например, GET, POST или PUT.

Строка getPathInfo () Возвращает любую дополнительную информацию о пути, связанную с URL-адресом, отправленным клиентом при выполнении этого запроса.

Строка getQueryString () Возвращает строку запроса, которая содержится в URL запроса после пути.

Строка getRemoteAddr () Возвращает IP-адрес клиента, отправившего запрос.

Строка getRequestedSessionId () Возвращает идентификатор сеанса, указанный клиентом.

11.3. HttpServletResponse

Это экземпляр объекта javax.servlet.http.HttpServletResponse. Эти методы доступны с объектом HttpServletResponse и используются для установки заголовка ответа HTTP в программе сервлета.

метод Описание
логическое содержит заголовок (строковое имя) Кодирует указанный URL-адрес путем включения в него идентификатора сеанса или, если кодирование не требуется, возвращает URL-адрес без изменений.

логическое содержит заголовок (строковое имя) Возвращает логическое значение, указывающее, был ли заданный заголовок ответа уже установлен.

void addCookie (Cookie cookie) Добавляет указанный файл cookie в ответ.

void addHeader (имя строки, значение строки) Добавляет заголовок ответа с указанным именем и значением.

void setContentLength (int len) Устанавливает длину тела контента в ответе. В сервлетах HTTP этот метод устанавливает заголовок HTTP Content-Length.

void setContentType (тип String) Устанавливает тип содержимого ответа, отправляемого клиенту, если ответ еще не был зафиксирован.

void setHeader (String name, String value) Устанавливает заголовок ответа с указанным именем и значением.

void setLocale (Locale loc) Устанавливает локаль ответа, если ответ еще не зафиксирован.

void setIntHeader (String name, int value) Устанавливает заголовок ответа с заданным именем и целочисленным значением.

12. Ссылки

12.1. Веб-сайт

12.2. Книга

  • Head First Servlets и JSP: сдача сертификационного экзамена Sun для сертифицированных веб-компонентов. Авторы: Bryan Basham, Kathy Sierra, Bert Bates
  • Jdbc, сервлеты и черная книга JSP, мягкая обложка нового издания — 2008, Сантош Кумар

13. Резюме

Java Server Pages (JSP) используется для создания динамических веб-страниц. С помощью этого руководства вы можете легко изучить концепции, связанные с JSP. Коды проекта разрабатываются в EclipseIDE, так что вы получите представление о некоторых из его удивительных удобных функций.

14. Скачать

Это было руководство по JavaServer Pages (JSP).