Описание тега jsp
JSP (JavaServer Pages)
JSP - это технология представления Java, работающая на сервере, которая позволяет вам писать текст шаблона на клиентских языках, таких как HTML, CSS, JavaScript и так далее. JSP поддерживает так называемые taglibs, которые поддерживаются фрагментами кода Java, с помощью которых вы можете управлять потоком страниц и / или выводить динамически (программно). Хорошо известный taglib - это JSTL. JSP также поддерживает Expression Language ( EL) с синтаксисом, подобным ${}
который может использоваться для доступа к данным бэкэнда (фактически, к атрибутам, доступным в областях страниц, запросов, сеансов и приложений), в основном в сочетании с метками тегов.
Жизненный цикл
Когда JSP запрашивается в первый раз или когда веб-приложение запускается, контейнер сервлета скомпилирует файл JSP в класс, расширяющий HttpServlet
и использовать его при жизни веб-приложения. Вы можете найти сгенерированный исходный код в рабочем каталоге сервера. Например, в Tomcat это /work
каталог. По запросу JSP контейнер сервлета выполнит скомпилированный класс JSP и отправит сгенерированный вывод (обычно просто HTML/CSS/JS) через веб-сервер по сети на сторону клиента, которая, в свою очередь, отобразит его в браузере.
Привет, мир
В этом примере используются JSTL и EL для отображения IP-адреса пользователя и сегодняшней даты.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<jsp:useBean id="date" class="java.util.Date" />
<!DOCTYPE html>
<html lang="en">
<head>
<title>JSP Hello World</title>
</head>
<body>
<h1>Hello</h1>
<p>Welcome, user from <c:out value="${pageContext.request.remoteAddr}" />
<p>It's now <fmt:formatDate value="${date}" pattern="MM/dd/yyyy HH:mm" />
</body>
</html>
Сохранить как /hello.jsp
и откройте его по http://localhost:8080/contextname/hello.jsp.
Если JSTL не работает (теги JSTL не анализируются / не выполняются и все еще присутствуют в сгенерированном выводе HTML при щелчке правой кнопкой мыши и просмотре исходного кода в браузере), то, вероятно, ваш контейнер сервлета не поддерживает его из коробки (например, Кот). Вы можете установить его, просто опустив jstl-1.2.jar в /WEB-INF/lib
, Если это все еще не работает, то обратитесь к странице информации JSTL для более подробной информации.
Скриплеты
Вы также можете встроить сырой код Java в файл JSP с помощью скриптлетов (те, <% %>
вещи).
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html lang="en">
<head>
<title>JSP Hello World</title>
</head>
<body>
<h1>Hello</h1>
<p>Welcome, user from <%= request.getRemoteAddr() %>
<p>It's now <%= new SimpleDateFormat("MM/dd/yyyy HH:mm").format(new Date()) %>
</body>
</html>
Однако его использование в соответствии с соглашениями о кодировании JSP не рекомендуется для других целей, кроме быстрого прототипирования.
Предварительная загрузка данных и пост-обработка формы
Для предварительной загрузки данных для отображения в JSP и последующей обработки отправки формы вы хотели бы использовать сервлет. Для получения дополнительной информации см. Страницу информации о теге Servlets.
JavaScript
Важно понимать, что JSP работает на веб-сервере, генерируя вывод HTML, и что JavaScript является частью вывода HTML, который выполняется только в браузере. Так что JSP и JavaScript не работают синхронно, как вы могли бы ожидать от кодирования. Чтобы позволить JavaScript "обращаться" к переменным JSP, все, что вам нужно сделать, это позволить JSP/JSTL/EL напечатать его, как если бы это была переменная Javascript. Таким образом, любая функция JavaScript, однажды выполненная в браузере, может получить к ней доступ. В приведенном ниже примере идентификатор сеанса на стороне сервера печатается как переменная JavaScript с использованием EL:
<script>var jsessionid = '${pageContext.session.id}';</script>
Если вы откроете эту страницу в браузере и сделаете View Source, вы увидите что-то вроде:
<script>var jsessionid = '4C147636FF923CA7EA642F2E10DB95F1';</script>
(обратите внимание, что эти одинарные кавычки были обязательными для представления строкового значения JavaScript!)
Затем, чтобы JSP "получил доступ" к переменным JavaScript, необходимо отправить переменную JavaScript обратно на сервер с помощью HTTP-запроса, поскольку это единственный способ отправки данных из браузера на веб-сервер. Вы могли бы:
- используйте HTML DOM для управления скрытым полем ввода и заполнения его данными, а при необходимости отправьте форму, используя
form.submit()
так что это доступноrequest.getParameter()
, - использование
window.location
сделать "перенаправление" на новый URL с переменной JavaScript в качестве параметра запроса. - использование
XMLHttpRequest
отправить асинхронный (ajax) запрос с переменной JS в качестве параметра запроса. - пусть JavaScript установит его как cookie, чтобы он был доступен
request.getCookies()
в последующих запросах.
Facelets
Начиная с Java EE 6, Facelet сменил JSP в качестве технологии представления по умолчанию для платформы Java EE MVC JSF (JavaServer Faces). Начиная с руководства по Java EE 6, JSP более подробно не рассматривается. Вам нужно вернуться к учебнику по Java EE 5, если вы хотите изучать JSP. Смотрите также http://stackoverflow.com/questions/4845032/wheres-the-official-jsp-tutorial.
Интернет ресурсы
- Википедия: JavaServer Pages
- Начальные и промежуточные руководства по сервлетам и JSP
- Расширенные учебники по сервлету и JSP
- Core Servlets и JavaServer Pages электронная книга
Часто задаваемые вопросы
- В чем разница между JSP, Servlet и JSF?
- Как избежать Java-кода в файлах JSP?
- Скрытые возможности JSP/Servlet
- Как внедрить Ajax в JSP? - Продолжайте
- Как загрузить файлы на сервер, используя JSP/Servlet?