Курсы javascript
Здравствуйте!
На мобильных браузерах (например, в Chrome на планшете) при прокрутки длинных страниц вся шапка браузера со строкой адреса уезжает вверх при прокручивании и скрывается. Как я понял браузер делает это сам, т.е. автоматически.
Но у меня на простой тестовой странице, где в специально добавил много записей (чтобы точно нужно было скролить) так не происходит.
Добавлял . Не помогает.
Есть решения самому скрывать JavaScript-ом, но на других сайтах я в исходниках не вижу подобного, а шапка браузера при прокрутки уезжает.
Не могу понять, что у них сделано.
18.07.2014, 13:13
Регистрация: 19.01.2010
Сообщений: 354
Интересный вопрос. Погуглил немного, в большинстве случаев, на форумах отвечают «никак». Нашел вот такой пост: http://davidwalsh.name/hide-address-bar Т.е. нужно просто проскроллить контент, чтобы адрессбар спрятался сам.
18.07.2014, 13:15
Регистрация: 10.07.2008
Сообщений: 3,873
Последний раз редактировалось Octane, 18.07.2014 в 13:22 .
23.07.2014, 16:40
Регистрация: 02.07.2010
Сообщений: 642
Скрыть адресную строку
Раньше адресную строку прятали такой техникой:
window.addEventListener('load', function()< setTimeout(scrollTo, 0, 0, 1); >, false);
Сейчас на последних айфонах с iOS версии 7. это перестало работать.
Также рекомендована такая запись в META:
Лично я убедился, что адресная строка будет железно убираться, если высота контента превышает высоту экрана. Вы писали, что специально вставили много строк и.. ничего. А есть ли вообще вертикальный скроллер? Посмотрите, еще бывает ошибка в том, что блоку (и даже тегу HTML/BODY) задают высоту 100% — тогда строка не скрывается.
Вообще конечно если есть ссылка, то могу посмотреть на своем смартфоне в трех браузерах. Или код покажите.
Скрытое поле
Часто возникает ситуация, когда требуется передать в форме некоторые промежуточные данные, которые не должны изменяться пользователем. Более того, такие данные не должны показываться пользователю, поскольку носят технический характер и обычно служат для передачи некоторой информации от страницы к странице. Для этой цели применяется скрытое поле, оно не отображается на странице и прячет своё содержимое от пользователя. Посетитель не может в него ничего внести или напечатать.
Синтаксис создания скрытого поля.
Атрибуты перечислены в табл. 1.
| Атрибут | Описание |
|---|---|
| name | Имя поля для его идентификации обработчиком формы. |
| value | Значение поля, определяющее, какая информация будет отправлена на сервер. |
Пример использования скрытых полей приведен в примере 1.
Пример 1. Использование скрытого поля
HTML5 IE Cr Op Sa Fx
Скрытое поле Напишите любимое слово и нажмите кнопку Отправить (никакие данные не будут передаваться на сервер!):
В данном примере показано создание двух скрытых полей, одно из них носит имя name и получает значение Vasya , а второе именуется password со значением pupkin . В результате отправки формы обработчику, указанному в атрибуте action , программа может легко прочитать эти данные и интерпретировать их по усмотрению разработчика.
Цикл в JSP
Имеется jsp страница, вызываемая двумя параметрами action(одна на оба параметра). Внутри нее хочу сделать два разных блока, в зависимости от пришедшего в адресную строку action — затем изменить его и совершить определенное действие(последние действия уже в сервлете, работают как надо)
На текущий момент у меня 500 ошибка со следующим содержимым:
org.apache.jasper.JasperException: /WEB-INF/jsp/clear.jsp (line: [13], column: [23]) Attribute value [request.getParameter("action").equals("submitClear")] is quoted with ["] which must be escaped when used within the value
Подскажите — как исправить?
Что такое JSP? Разбираемся с возможностями на практике


JSP или Java Server Pages — это технология Java, которая позволяет создавать динамические веб-страницы для Java приложений. В этой статье мы подробнее поговорим о том, что такое JSP, обсудим некоторые возможности данной технологии, рассмотрим структуру JSP страниц, а также попробуем на практике взглянуть на то, что представляют собой эти Java Server Pages. Но для начала поговорим о преимуществах и важности JSP. JSP позволяет разработчику:
- получать данные из веб-страницы в Java-код;
- отправлять данные из Java кода на веб-страницу;
- писать Java-код, прямо внутри html (однако злоупотреблять этим не стоит).
Необходимость знания JSP можно оценить довольно высоко по нескольким причинам:
- JSP — одна из основных Java web-технологий;
- JSP широко используется в большинстве компаний и проектов;
- JSP бесшовно интегрируется с сервлетами Java внутри контейнера сервлетов.
JSP — определение
Приведу определение с Википедии: JSP (JavaServer Pages) — технология, позволяющая веб-разработчикам создавать содержимое, которое имеет как статические, так и динамические компоненты. Страница JSP содержит текст двух типов: статические исходные данные, которые могут быть оформлены в одном из текстовых форматов HTML, SVG, WML, или XML, и JSP-элементы, которые конструируют динамическое содержимое. Кроме этого могут использоваться библиотеки JSP-тегов, а также Expression Language (EL) для внедрения Java-кода в статичное содержимое JSP-страниц. Код JSP-страницы транслируется в Java-код сервлета с помощью компилятора JSP-страниц Jasper, и затем компилируется в байт-код виртуальной машины Java (JVM). Контейнеры сервлетов, способные исполнять JSP-страницы, написаны на платформенно-независимом языке Java. Технология JSP является платформенно-независимой, переносимой и легко расширяемой технологией для разработки веб-приложений.
Структура JSP страницы

В общем случае под JSP понимаются динамические веб-страницы, в которых динамическая часть генерируется с помощью Java, а статическая формируется за счет языков разметки, чаще всего HTML. Такая страница представляет собой текстовый документ с расширением .jsp, написанный на одном из языков разметки (таких как HTML, SVG, WML и XML), c вкраплениями JSP элементов (или jsp тегов). Внутри данных тегов содержатся обращения к серверному коду (данным), а также выполняются некоторые вычисления. Данные файлы обрабатываются на сервере, в результате чего все JSP теги преобразуются в html теги, и на выходе получается обычная html страница. На схеме ниже представлена диаграмма структуры JSP страницы и ее взаимодействия с сервером. Пример простейшей JSP страницы:
$ равно 4
В данном примере внутрь html кода “внедрено” JSP выражение, написанное на специальном языке Expression Language (EL). Он предоставляет важный механизм взаимодействия слоя представления (веб-страниц) со слоем бизнес-логики приложения (Java-кода). Как видно из примера, JSP выражение заключено в фигурные скобки, с ведущим знаком доллара — $ <. >. Все, что находится внутри фигурных скобок, вычисляется на сервере, и результат этого выражения приводится в html, в то место, где изначально определено JSP выражение. После обработки всех тегов страница приобретет следующий вид:
4 равно 4
Установка и запуск контейнера сервлетов
Так как код JSP транслируется в код Java-сервлета, нам нужно где-то раздобыть какой-нибудь контейнер сервлетов, чтобы мы могли говорить о работе JSP. Иначе, без контейнера, JSP не заработает. Но для начала, приведем определение контейнера сервлетов. Контейнер сервлетов — программа, представляющая собой сервер, который занимается системной поддержкой сервлетов и обеспечивает их жизненный цикл в соответствии с правилами, определенными в спецификациях. Может работать как полноценный самостоятельный веб-сервер, быть поставщиком страниц для другого веб-сервера или интегрироваться в Java EE сервер приложений. Одним из самых популярных контейнеров сервлетов является Apache Tomcat.
Стоит оговориться, что Tomcat — это не полноценный Java EE сервер приложений. Однако для жизненных нужд сервлетов и JSP-страниц, сервера Tomcat более чем достаточно. Приступим к установке. Скачать Tomcat можно с официальной страницы. Для ОС Windows установить томкат можно следующим образом:
- Скачиваем 32-bit/64-bit Windows Service Installer.
- Запускаем файл.
- Далее следуем обычной процедуре установки:
- не забываем отметить галочку Examples на соответствующем окне инсталлятора:

- и указать путь до предустановленной JRE:

- не забываем отметить галочку Examples на соответствующем окне инсталлятора:
- После установки запускаем Tomcat и открываем браузер. Переходим на http://localhost:8080/.
Если вы видите стартовую страницу томката, значит, установка выполнена успешно и сервер запущен. Для запуска и остановки Tomcat в ручном режиме, можно запустить один из двух исполняемых файлов в директории bin. Она находится внутри директории, в которую инсталлирован Tomcat: 
Демонстрационные приложения. Скрытые объекты
Давайте посмотрим на некоторые возможности JSP в действии. Одна из них — доступ к так называемым скрытым объектам (Implicit Objects). Это объекты, к которым можно получить доступ, используя язык выражений EL (Expression Language). Примером таких объектов могут служить HTTP заголовки или же параметры URL. Раскроем (или же освежим в памяти) что такое параметры URL. В примере ниже представлен URL с параметрами. Параметры выделены жирным шрифтом: http://example.net/foo/bar ?param1=value1¶m2=value2&a=1&name=Tom Параметры всегда начинаются с символа вопроса (?). Далее следует имя параметра, после — через знак равенства — определяется значение параметра. Параметров может быть несколько либо один. Если их несколько, каждая пара имя-значение разделяется символом амперсанда (&). В примере выше были определены несколько параметров и их значения:
| Имя параметра | Значение параметра |
|---|---|
| param1 | value1 |
| param2 | value2 |
| a | 1 |
| name | Tom |
Взглянем на то, как можно получить доступ к скрытым объектам в JSP, в том числе и параметрам URL. Для этого запустим Tomcat и откроем браузер на странице http://localhost:8080/ Затем перейдем на страницу Examples:
После чего перейдем по ссылке JSP Examples:
На странице примеров перейдем по ссылке Implicit Objects -> Execute:
На этой странице можно увидеть пример использования скрытых объектов. Ниже — скрин страницы с подробными разъяснениями:
Попробуйте изменить значение параметра foo , используя для этого соответствующее поле на странице, после чего обратите внимание на то, что значение данного параметра изменилось также и в адресной строке. Представленная страница не обладает большим функционалом, однако она является хорошим справочником, к которому можно обращаться в дальнейшем, когда нужно будет получить доступ к тому или иному скрытому объекту. На данной странице приведен перечень скрытых объектов, к которым можно получить доступ. А ниже, в таблице, демонстрируется, как можно получить доступ к тому или иному объекту.
JSP функции

Теперь вернемся на предыдущую страницу, и взглянем на исходный код страницы “скрытые объекты”: Вот он:
- pageContext — the PageContext object
- pageScope — a Map that maps page-scoped attribute names to their values
- requestScope — a Map that maps request-scoped attribute names to their values
- sessionScope — a Map that maps session-scoped attribute names to their values
- applicationScope — a Map that maps application-scoped attribute names to their values
- param — a Map that maps parameter names to a single String parameter value
- paramValues — a Map that maps parameter names to a String[] of all values for that parameter
- header — a Map that maps header names to a single String header value
- headerValues — a Map that maps header names to a String[] of all values for that header
- initParam — a Map that maps context initialization parameter names to their String parameter value
- cookie — a Map that maps cookie names to a single Cookie object.
Если вы знакомы с HTML, исходный код страницы должен быть вам вполне понятен. Обратите внимание на эти строки:
Значение выводится через использование JSP функции fn:escapeXml() . JSP функции инкапсулируют в себе некоторую функциональность, которую можно переиспользовать. В данном случае это экранирование XML. Технология JSP предоставляет широкий набор функций на выбор, а также возможность создавать свои собственные функции. Чтобы использовать в JSP функцию, необходимо импортировать в JSP файл соответствующую библиотеку, в которой определена данная функция.
Библиотеки тегов
Взглянем на еще одну строку исходного кода (вторая строка), представленного выше:
- taglib (tag library — библиотеку тегов);
- url , по которому располагается данная библиотека;
- префикс (в данном случае fn ) через который можно будет вызывать функции определенные в данной библиотеке.
Как и в случае с fn , обозначение c опциональное и общепринятое. Такое обозначение можно встретить практически везде, где используются данные библиотеки. Приведем пример функции из библиотеки core:
Данная функция просто выведет тег
Редактирование JSP

Теперь, вооружившись новыми знаниями, попробуем внести изменения в демонстрационное приложение внутри Tomcat. Для этого найдем исходный код данной страницы внутри папки, в которую был установлен данный контейнер сервлетов. Данный файл можно найти по следующему адресу: . \Apache Software Foundation\Tomcat 9.0\webapps\examples\jsp\jsp2\el Затем откроем в любом текстовом редакторе файл implicit-objects.jsp Добавим импорт библиотеки core, а затем с её помощью осуществим вывод какого-нибудь текста: Теперь обновим страницу скрытых объектов и взглянем на внесенные изменения:
Итоги
- что такое JSP;
- структуру JSP страницы;
- процедуру установки и запуска контейнера сервлетов Tomcat;
- демонстрационное приложение по доступу к скрытым объектам, которое входит в поставку дистрибутива сервера Tomcat;
- JSP функции и библиотеки тегов.
Что дальше?
- Повторить все описанное в данной статье.
- Рассмотреть другие демонстрационные приложения входящие в поставку сервера Tomcat.
- Написать самостоятельно приложение и задеплоить его в контейнер сервлетов. В качестве руководства можно воспользоваться статьей Создание простейшего веб-проекта в IntelliJ Idea Enterprise. Пошагово, с картинками.