1. Введение в JSP
JSP (Java Server Pages) — это язык сценариев на стороне сервера. Это технология, которая добавляет язык Java к страницам HTML для создания динамических страниц: добавляются новые теги (<%, %>,...).
JSP — это технология создания динамических веб-страниц, разработанная на основе Java и сервлетов. Ее базовой реализацией является Java Servlet.
Страницы JSP состоят из кода HTML и встроенного в него кода Java. Сервер обрабатывает эти коды Java после того, как страница запрашивается клиентом, а затем возвращает сгенерированную HTML-страницу в браузер клиента.
2. Процесс выполнения JSP Клиент запрашивает страницу JSP -> JSP Parser анализирует *.jsp и компилирует его в *.java -> команда javac компилирует его в *.class -> выполняет файл класса -> отвечает и возвращает результат клиент
Код JSP содержит две категории: элементы JSP и данные шаблона. Данные шаблона относятся к той части, которую механизм JSP не обрабатывает, то есть механизм JSP будет напрямую передавать части, отличные от тегов <%...%>, без какой-либо обработки.
Когда JSP выполняется в первый раз или после изменения файла JSP, он вызывает JSP Parser для компиляции файла *.jsp в программу сервлета, поэтому он будет работать медленнее.
3. Базовый синтаксис JSP
1. Два типа аннотаций
(1) HTML-комментарий. Вы можете добавить комментарий в формате HTML к коду JSP. Этот комментарий отправляется клиенту, но не отображается на странице. Синтаксис следующий:
<!-- Комментарии в формате HTML, видимые при просмотре исходного кода на клиенте -->
<!-- Этот комментарий добавил <%=programmer%>-->
Если программист является хакиллером, клиенту возвращается комментарий <!-- Этот комментарий добавляется хакиллером -->
(2) Комментарии JSP записываются в коде JSP, но не отправляются клиенту.
<%-- комментарий JSP, этот комментарий будет игнорироваться при компиляции JSP --%>
<%-- /*Многострочные комментарии в скриптлете*/ --%>
<%-- /**Многострочные комментарии в Scriptlet, которые можно извлечь из Java-файлов с помощью javadoc*/ --%>
<%-- однострочный комментарий JSP--%>
2. 3 элемента сценария
(1) Объявление глобальных переменных
<%! int i=0; String str="Привет, мир!" %>
(2)Выражение
В коде JSP выражения часто используются для вывода значения переменной, которая может находиться где угодно.
<%! int a=1; int b=2; String str="Привет, мир!";
<%=a+b%> <%=str>
PS: Вы не можете использовать символ «;» в качестве признака завершения выражения. Но в скриптлете одно и то же выражение должно заканчиваться точкой с запятой.
(3)Скриптлет
Сегмент сценария используется для хранения допустимого сегмента программы Java.
<% int b=3 %>локальная переменная;
3. 3 командных элемента
(1)команда страницы
<%@ page contentType="text/html;charset=utf-8"%>
Определите глобальные атрибуты файла JSP, включая: язык, расширения, импорт, сеанс, буфер, автосброс, isThreadSafe, информация, errorPage, isErrorPage, contentType (формат вывода от сервера к клиенту).
Его расположение может быть в любом месте страницы, но рекомендуется размещать его вверху страницы.
язык: объявляет тип языка сценариев. В настоящее время можно использовать только «java».
расширяет: указывает полное имя класса Java, который необходимо добавить при компиляции JSP. Это ограничит возможности компиляции JSP, поэтому используйте его с осторожностью.
импорт: список пакетов Java, которые необходимо импортировать.
сеанс: укажите, требует ли клиент сеанс HTTP. По умолчанию верно.
буфер: размер буфера используется объектом out для обработки вывода выполненного JSP в клиентский браузер. Значение по умолчанию — 8 КБ.
autoFlush: устанавливает, следует ли принудительно выводить данные в случае переполнения буфера. Если оно определено как true (значение по умолчанию), вывод будет нормальным; если оно определено как false, произойдет непредвиденная ошибка.
isThreadSafe: определяет, можно ли использовать файл JSP в нескольких потоках. По умолчанию верно.
информация: текстовая информация. Его можно получить с помощью метода Servlet.getServletInfo().
errorPage: установите файл JSP, который обрабатывает события исключений.
sErrorPage: укажите, является ли эта страница страницей, обрабатывающей события исключения. Если установлено значение true, можно использовать объект исключения.
contentType: установите тип MIME и набор кодировок символов. Тип MIME по умолчанию — text/html, а набор символов по умолчанию — charset=ISO-8859-1.
На странице можно использовать несколько директив < %@page %>, но другие атрибуты, за исключением атрибута import, можно использовать только один раз.
Пакеты, импортированные JSP по умолчанию Следующие пакеты были импортированы во время компиляции JSP, поэтому нет необходимости использовать директиву страницы для их добавления в файл JSP:
java.lang.*
javax.сервлет.*
javax.servlet.jsp.*
javax.servlet.http.*
(2) включить директиву
HTML-код
<%@ include file = "относительный путь" %>
Используйте директиву include, чтобы включить статический файл в JSP и проанализировать операторы JSP в этом файле.
Если путь начинается с «/», то этот путь в основном относится к контекстному пути приложения jsp.
Если путь открывается как имя файла или каталог файла, то этот путь является текущим путем к используемому файлу JSP.
(3) команда taglib
HTML-код
<%@ taglib uri = префикс "TagLibrary" = "mypfx" %>
Используйте директиву taglib для определения библиотеки тегов и ее пользовательского префикса.
uri: универсальный идентификатор ресурса дает уникальное имя пользовательской метке на основе префикса метки, который может быть относительным или абсолютным путем.
префикс: префикс пользовательской метки. Не используйте jsp, jspx, java, javax, servlet, sun, sunw в качестве префиксов, они объявлены зарезервированными Sun.
4. 8 команд действий
(1) Переход на страницу: <jsp:forward>
Тег <jsp:forward> передает объект запроса, содержащий запрос пользователя, из одного файла jsp в другой.
Всего содержит 2 атрибута
Атрибут страницы — это выражение или строка, описывающая файл или URL-адрес, на который нужно направить.
<jsp:param>Отправить один или несколько параметров в динамический файл. Если используется тег <jsp:param>, целевой файл должен быть динамическим файлом (например, сервлетом или JSP и т. д.).
HTML-код
<jsp:forward page=test.jsp>
<jsp:param name="username" value="<%=user%>"/>
<jsp:param name="password" value="12345678"/>
</jsp:вперед>
Получите имя пользователя через request.getParameter("username")
(2) Включить страницу: <jsp:include>
<jsp:include> позволяет включать статические и динамические веб-ресурсы, и результаты этих двух включений различны.
Если включены только статические файлы, то это включение только добавляет содержимое включенного файла в файл JSP, аналогично < %@include% >;
Если включен динамический веб-ресурс, включенный файл также будет выполнен компилятором JSP.
Если этот включаемый файл является динамическим, вы также можете использовать <jsp:param> для передачи параметров и значений параметров.
(3) Создать компонент: <jsp:useBean>
Создайте экземпляр Bean и укажите его имя и область действия.
<jsp:useBean id="beanInstanceName"scope="page|request|session|application" class="package.className"/>
Содержит 5 атрибутов.
id: подтвердите переменную Bean в определенной области и используйте идентификатор для использования этого экземпляра Bean в программе. Значение id чувствительно к регистру.
Область: область, в которой существует компонент, и допустимая область действия имени переменной id. Значение по умолчанию — страница.
class: используйте новое ключевое слово и конструктор класса для создания экземпляра bean-компонента из класса. Класс не может быть абстрактным и должен иметь открытый конструктор без аргументов.
type: Если этот Bean уже существует в указанной области, использование type присвоит этому Bean тип данных. Если тип используется без class или beanName, экземпляр bean-компонента не будет создан.
beanName: beanName может быть строкой package.class или выражением jsp, и его значение будет передано в метод Beans.instantiate. Значение типа может совпадать со значением beanName, его базового класса или реализуемого им интерфейса.
(4) Установите свойства компонента: <jsp:setProperty>
<jsp:setProperty name="beanInstanceName" property="*"|property="propertyName" value="string|<%=expression%>"|param="parameterName"/>
name: указывает имя экземпляра Bean, созданного в <jsp:useBean>, то есть id.
свойство: Сопоставьте свойства в компоненте.
param: ссылается на имя параметра в объекте запроса и устанавливает соответствующее значение атрибуту Bean.
значение: используйте указанное значение для установки свойства Bean. Это значение может быть строкой или выражением. Если это строка, она будет преобразована в тип атрибута Bean (например, «0,98» будет преобразовано в двойной тип 0,98). Если это выражение, его тип должен соответствовать типу атрибута Bean.
PS: Атрибуты Param и атрибуты значений не могут использоваться одновременно в одном и том же <jsp:setProperty>.
(5) Получить свойства компонента: <jsp:getProperty>
Получите значение атрибута в существующем объекте Bean и отобразите его на странице.
<jsp:getProperty name="beanInstanceName property="propertyName"/>
имя: то же имя, что и у существующего экземпляра объекта.
свойство: имя свойства в объекте
(6) Используйте плагин апплета: <jsp:plugin>
HTML-код
<jsp:plugin type="applet" code="MeidaPlay.class" codebase="../classes">
<jsp:пармас>
<jsp:param name="way" value="Hall"/>
</jsp:парамсы>
<jsp:резервный вариант>
<p>Невозможно загрузить апплет!</p>
</резервный>
</jsp:плагин>
Используйте <jsp:plugin>, чтобы вставить апплет или компонент, и при необходимости загрузите плагин Java для его выполнения.
(7) Определите параметры: <jsp:param>
Может использоваться в <jsp:include>, <jsp:forward>, <jsp:plugin>.
(8) Сообщение об ошибке подключаемого модуля: <jsp:fallback>
Если плагин <jsp:plugin> не может отображаться нормально, отображается сообщение с подсказкой.
3. Встроенные объекты JSP
1. Запрос: объект запроса. Этот объект инкапсулирует информацию, предоставленную пользователем. Инкапсулированную информацию можно получить, вызвав соответствующий метод объекта.
Когда объект запроса получает китайские иероглифы, предоставленные клиентом, символы появляются искаженно, и необходимо выполнить специальную обработку.
Часто используемые методы:
getParameter(String имя параметра): Получите информацию об отправке формы.
getProtocol(): Получить протокол, используемый клиентом.
getServletPath(): Получить страницу, на которой клиент предоставил информацию.
getMethod(): метод получения информации, предоставленной клиентом.
getHeader(String str): Получите значения Accept, Accept-encoding и Host в файле заголовка HTTP.
getRermoteHost(): получить IP-адрес клиента.
getServerName: получить имя сервера.
getServerPort: получить номер порта сервера.
getParameterNames(): Получите имена всех параметров, отправленных клиентом.
2. Ответ: объект ответа динамически отвечает на запрос клиента и отправляет данные клиенту.
(1) Динамически реагировать на атрибут contentType. Используйте команду page, чтобы статически установить атрибут contentType страницы. При динамической настройке этого атрибута используйте response.setContextType("text/html;charset=utf-8");
(2) Перенаправление ответа
response.sendRedirect("index.jsp");
3. Сеанс: объект сеанса.
(1) Что такое объект сеанса?
Объект Session автоматически создается при загрузке первой страницы JSP для завершения управления сеансом.
Он начинается, когда клиент открывает браузер и подключается к серверу, и заканчивается, когда клиент закрывает браузер и покидает сервер. Это называется сеансом.
(2) Идентификатор объекта сеанса
Когда клиент впервые посещает страницу JSP на сервере, механизм JSP генерирует объект Session и назначает идентификационный номер типа String. Механизм JSP также отправляет этот идентификационный номер клиенту и сохраняет его в файле cookie. таким образом, объект сеанса. Только после того, как клиент закроет браузер, объект сеанса клиента не будет изменен сервером, и соответствие сеанса с клиентом исчезнет.
(3)Общие методы
public String getId(): Получите номер объекта Session.
public void setAttribute(String str,Object obj): добавьте объект параметра в объект сеанса.
public Object getAttribute(): Получите атрибуты объекта Session на основе имени атрибута.
public boolean isNew(): определяет, является ли это новым клиентом.
4. Приложение: объект приложения.
(1) Что такое объект приложения?
Этот объект приложения создается после запуска сервера. Когда клиент просматривает различные страницы посещаемого веб-сайта, объект приложения один и тот же, и все клиенты используют этот встроенный объект приложения.
(2)Общие методы
setAttribute(String key,Object obj): добавьте объект параметра к объекту приложения.
getAttibute(String key): получить атрибуты в объекте приложения на основе имени атрибута.
5. Выход: выходной объект
Объект out — это выходной поток, используемый для вывода данных клиентам.
out.print(): вывод различных типов данных.
out.newLine(): выводит символ новой строки.
out.close(): Закрыть поток.
6. Config: объект конфигурации. Обычно мы используем объект Config для получения некоторой информации о конфигурации инициализации. Обычно используемые методы — getInitParameter и getInitParameterNames для получения параметров во время инициализации сервлета.
7. Страница: объект страницы.
Объект страницы представляет собой объект текущего класса, созданный файлом JSP, и не рекомендуется для обычных читателей.
8.PageContext: объект контекста страницы.
Класс PageContext, представленный JSP, позволяет получить доступ ко многим свойствам страницы. Переменная pageContext хранит значение объекта PageContext, связанного с текущей страницей. Класс PageContext имеет такие методы, как getRequest, getResponse, getOut и getSession.
9.Исключение: объект исключения
Объект исключения представляет собой объект исключения, создаваемый при запуске файла JSP. Этот объект нельзя использовать непосредственно в обычных файлах JSP, а можно использовать только в нем.
< %@page isErrorPage="true"%> используется в файлах JSP. Это связано с тем, что объект ошибки, сгенерированный при запуске файла JSP, выбрасывается и может быть перехвачен только JSP, который использует тег < %@pageisErrorPage="true"% > для перехвата объекта ошибки. Наиболее часто используемый метод — getMessage, используемый для получения информации об ошибках.
4. Страница входа в экземпляр: index.jsp.
HTML-код
<%@ page Language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<html>
<голова>
<title>Вход в систему</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="css/vbulletin.css" rel="stylesheet" type="text/css">
<style type="text/css">
.btn {
семейство шрифтов: «Tahoma», «宋体»;
размер шрифта: 9pt;
цвет: #001E3C;
ГРАНИЦА-НИЖНЯЯ: #6794BC 1 пиксель, сплошной;
СЛЕВА-ГРАНИЦА: #8BB8E0 1 пиксель, сплошной;
ПРАВАЯ ГРАНИЦА: #6794BC 1 пиксель, сплошной;
BORDER-TOP: #8BB8E0 1 пиксель, сплошной;
фоновое изображение: URL (изображение/buttonbg.gif);
КУРСОР: рука;
стиль шрифта: нормальный;
отступ слева: 3 пикселя;
отступ справа: 3 пикселя;
}
</стиль>
<тип сценария="текст/javascript">
функция doLogin(){
вар vform = document.loginform;
if(!loginform.username.value){
alert("Пожалуйста, введите имя пользователя!")
возвращаться;
}
если(!loginform.password.value){
alert("Пожалуйста, введите пароль!")
возвращаться;
}
vform.submit();
}
</скрипт>
</голова>
<body topmargin="0" leftmargin="0" >
<form action="receive.jsp" name="longinForm" метод="post">
<ширина таблицы="100%" высота="100%">
<тр>
<td align="center" valign="middle">
<ТАБЛИЦА id="form1"
cellpacing="0" cellpadding="0" border="0" style="width: 500;">
<CAPTION style="display: none">
</КАПЦИЯ>
<ТР>
<ТД>
<TABLE width="100%" height="100%" cellpacing="0"
cellpadding="0" border="0" style="table-layout: fixed">
<ТР>
<TD valign="top">
<FIELDSET id="form1_group0" style="width: 100%;">
<LEGEND>Вход в систему</LEGEND>
<ДЕЛ>
<DIV style="ширина: 100%; высота: 100%">
<TABLE width="100%" cellpacing="0"
cellpadding="4" border="0" style="table-layout: fixed;">
<COLGROUP>
<COL width="100"></COL>
<COL width="50%"></COL>
<COL width="100"></COL>
<COL width="50%"></COL>
</COLGROUP>
<ТР>
<TD align="right">
имя пользователя
</ТД>
<TD class="InnerTableContentCell">
<input type="text" name="имя пользователя"
стиль="ширина: 100%;">
</ТД>
<TD align="right">
пароль
</ТД>
<ТД>
<input type="пароль" name="пароль"
стиль="ширина: 100%;" />
<input type="hidden" name="action2" value="0">
</ТД>
</TR>
<ТР>
<TD colSpan="4"
выровнять="справа">
<input type="button" name="login" value="Login" onclick="this.form.submit();" class="btn"/>
</ТД>
</TR>
</ТАБЛИЦА>
</DIV>
</DIV>
</НАБОР ПОЛЯ>
</ТД>
</TR>
</ТАБЛИЦА>
</ТД>
</TR>
</ТАБЛИЦА>
</td>
</tr>
</таблица>
</форма>
</тело>
</html>
Страница получения данных: get.jsp
HTML-код
<%@ page Language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" info="action tag"%>
<jsp:useBean id="userVo" class="exercision.vo.UserVo"scope="request">
<jsp:setProperty name="userVo" property="name" param="username"/>
<jsp:setProperty name="userVo" property="password" param="password"/>
</jsp:useBean>
<html>
<голова>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >
<link href="css/vbulletin.css" rel="stylesheet" type="text/css">
</голова>
<тело>
Это моя страница JSP <br>.
<hr>Используйте <jsp:getProperty> чтобы получить значение, отправленное в форму<br>
name:<jsp:getProperty property="name" name="userVo"/><br>
пароль:<jsp:getProperty property="password" name="userVo"/>
<br><br><hr>
<%
out.println("Получить непосредственно из объекта vo:<br> name:"+userVo.getName()+
"<br>пароль:"+userVo.getPassword()+"<br>");
String serviceName = request.getServerName(); // объект запроса внутри 1.jsp
out.println("<br><hr>Имя сервера: "+serviceName);
out.println("<br>MIME-тип: "+response.getContentType());//2.jsp внутренний объект ответа
session.setAttribute("sessionName","объект сеанса внутри jsp");//3.jsp внутренний объект сеанса
out.println("<br>объект сеанса: "+session.getAttribute("sessionName"));//4.jsp внутренний объект вывода
pageContext.setAttribute("pageContext","Ссылка на контекстную среду");//объект pageContext внутри 5.jsp
//6.приложение
//7. Конфигурация экземпляра ServletConfig
//8. Экземпляр страницы java.lang.Object.
//9. Исключение должно использовать экземпляр java.lang.Throwable на странице с isErrorPage=true в директиве страницы.
Информация о строке = pageContext.getServletContext().getServerInfo();
out.println("Получите атрибут info в команде страницы: "+info);
%>
</тело>