5 ответов
или
или полный пример
Примечание: очистите ввод перед его рендерингом, он может открыть множество возможностей XSS
Самый чистый способ, насколько я знаю:
- добавьте переменную JSP к атрибуту data- * элемента HTML
- затем прочитайте это значение через Javascript, когда потребуется
Мое мнение относительно текущих решений на этой странице SO: чтение «непосредственно» значений JSP с использованием java-скрипта внутри фактического кода javascript, вероятно, самая отвратительная вещь, которую вы могли бы сделать. Заставляет меня рвать ха-ха. Серьезно, постарайтесь не делать этого.
HTML-часть без JSP:
HTML-часть при использовании JSP:
Часть javascript (для простоты используется jQuery):
А вот jsFiddle, чтобы увидеть это в действии http://jsfiddle.net/6wEYw/2/
Ресурсы
- атрибут HTML 5 data- *: https: //developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes
- Включить JavaScript в HTML-файл. Включить файл JavaScript в HTML-код. не работает как <script …. />
- CSS-селекторы (также можно использовать при выборе с помощью jQuery) https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started/Selectors
- Получить атрибут HTML-элемента с помощью jQuery http://api.jquery.com/attr/
Предположим, вы говорите о JavaScript в документе HTML.
Вы не можете сделать это напрямую, поскольку в отношении JSP он выводит текст, а в отношении страницы — просто получение HTML-документа.
Вы должны сгенерировать код JavaScript для создания экземпляра переменной, стараясь экранировать любые символы со специальным значением в JS. Если вы просто сбросите данные (как предложено некоторыми другими ответами), вы обнаружите, что они падают, когда данные содержат новые строки, символы кавычек и т. Д.
Самый простой способ сделать это — использовать библиотеку JSON (в нижней части http: //json перечислены группы. .org /), а затем получите вывод JSP:
Это даст вам объект, к которому вы можете получить доступ как:
в JS.
Прежде всего, java-скрипт — это язык сценариев на стороне клиента, в то время как jsp — это язык на стороне сервера, к которому вы не можете получить доступ, обрабатывайте любую переменную на стороне клиента на стороне сервера, не отправляя запрос на сервер
только после запроса, полученного на сервере, вы можете получить доступ к языковым переменным на стороне клиента
так что есть только один способ пройти запрос
Другое дело, что «Как отправить эти переменные на сервер»
есть два варианта …
Либо используйте скрытое поле
Или пользовательский объект window.location из js ……
тогда вы сможете получить доступ к данным на стороне клиента в jsp
Страницы сервера Java
JSP или Java Server Pages – это технология, которая используется для создания веб-приложений точно так же, как технология сервлетов. Это расширение Servlet – поскольку оно предоставляет больше функциональных возможностей, чем сервлет, такой как язык выражений, JSTL и т. Д. Страница JSP состоит из тегов HTML и тегов JSP. Страницы JSP легче поддерживать, чем сервлет, потому что мы можем разделить проектирование и разработку.
Элементы сценариев
Элементы сценариев предоставляют возможность вставлять Java-код в JSP. Существует три типа элементов сценариев:
Тег скриптлета
Используется для выполнения исходного кода Java в JSP.
Синтаксис: <% Java-код%>
Syntax : <% java source code %>
В этом примере мы создали два файла index.html и welcome.jsp. Файл index.html получает имя пользователя от пользователя, а файл welcome.jsp печатает имя пользователя с приветственным сообщением. Теперь давайте посмотрим на код.
Файл: index.html
<html> <body> <formnbsp;action="welcome.jsp"> <inputnbsp;type="text"nbsp;name="uname"> <inputnbsp;type="submit"nbsp;value="go"> </form> </body> </html>
Файл: welcome.jsp
<html> <body> <% Stringnbsp;name=request.getParameter("uname"); print("welcomenbsp;"+name); %> </form> </body> </html>
Тег выражения
Код, помещенный в тег выражения JSP, записывается в выходной поток ответа. Поэтому вам не нужно записывать out.print() для записи данных. Он в основном используется для печати значений переменной или метода.
Синтаксис: <% = оператор%>
Syntax : <%= statement %>
Теперь давайте возьмем небольшой пример отображения текущего времени. Чтобы отобразить текущее время, мы использовали метод getTime() класса Calendar. GetTime() является методом экземпляра класса Calendar, поэтому мы вызвали его после получения экземпляра класса Calendar методом getInstance().
Файл: index.jsp
<html> <body> Currentnbsp;Time:nbsp;<%=nbsp;java.util.Calendar.getInstance().getTime()nbsp;%> </body> </html>
Тег объявления
Используется для объявления полей и методов. Код, написанный внутри тега объявления JSP, размещается вне метода service() автоматически сгенерированного сервлета. Так что он не получает память при каждом запросе.
Синтаксис: <%! объявление поля или метода%>
Syntax: <%! field or method declaration %>
В приведенном ниже примере тега объявления JSP мы определяем метод, который возвращает куб с заданным числом, и вызываем этот метод из тега выражения JSP. Но мы также можем использовать тег скриптлета JSP для вызова объявленного метода. Посмотрим как. Файл: index.jsp
<html> <body> <%! intnbsp;cube(intnbsp;n){ returnnbsp;n*n*n*; } %> <%=nbsp;"Cubenbsp;ofnbsp;3nbsp;is:"+cube(3)nbsp;%> </body> </html>
Объекты запросов и ответов
Запрос JSP – это неявный объект типа HttpServletRequest, который создается для каждого запроса JSP веб-контейнером. Он может использоваться для получения информации запроса, такой как параметр, информация заголовка, удаленный адрес, имя сервера, порт сервера, тип содержимого, кодировка символов и т. Д. Он также может использоваться для установки, получения и удаления атрибутов из области запроса JSP.
Пример неявного объекта запроса JSP
Файл: index.html
<formnbsp;action="welcome.jsp"> <inputnbsp;type="text"nbsp;name="uname"> <inputnbsp;type="submit"nbsp;value="go"> </form>
Файл: welcome.jsp
<% Stringnbsp;name=request.getParameter("uname"); print("welcomenbsp;"+name); %>
Неявный объект ответа JSP
В JSP ответ является неявным объектом типа HttpServletResponse. Экземпляр HttpServletResponse создается веб-контейнером для каждого запроса JSP. Он может использоваться для добавления или манипулирования ответами, такими как перенаправление ответа на другой ресурс, ошибка отправки и т. д.
Пример ответа неявного объекта
Файл: index.html
<formnbsp;action="welcome.jsp"> <inputnbsp;type="text"nbsp;name="uname"> <input type="submit"nbsp;value="go"> </form>
Файл: welcome.jsp
<% sendRedirect("http://www.google.com"); %>
О получении полного спектра знаний – что лучше выбрать
Основы программирования поможет освоить любой учебник, посвященный данной тематике. Но пользователи, которые решили полноценно работать с JSP и HTML, должны изучить направление более развернуто. В данном случае предстоит выбрать грамотный подход:
- Обучение в ВУЗе. Ученик узнает, что такое input type и изучит основы программирования на Джаве. Долгий подход, зато по выпуску человеку будет выдан диплом.
- Самообразование. Никаких подтверждений наличия знаний не будет. Вариант хорош для тех, кто хочет быть самоучкой и не претендует на звание опытного разработчика в крупной компании.
- Обучение в техникуме. В России найти среднее профессиональное образование по направлению Java проблематично. Но такой вариант сгодится, если хочется продолжить после обучение в ВУЗе.
Лучший выход out of situation – это прохождение узкоспециализированных курсов с выдачей сертификатов. Можно учиться в любом месте и в любое время. Срок обучения – до года. Есть предложения и для новичков, и для опытных разработчиков.
Listening for Servlet Container Events
Sometimes it is useful to know when certain events occur within the application server container. This concept can be useful under many different circumstances, but most often it would likely be used for initializing an application upon start-up or cleaning up after an application upon shutdown. A servlet listener can be registered with an application to indicate when it has been started up or shut down. Therefore, by listening for such events, the servlet has the opportunity to perform some actions when they occur.
To create a listener that performs actions based upon a container event, you must develop a class that implements the interface. The methods that need to be implemented are and . Both of the methods accept a as an argument, and they are automatically called each time the servlet container is initialized or shut down, respectively.
To register the listener with the container, you can use one of the following techniques:
1) Utilize the annotation. 2) Register the listener within the web.xml application deployment descriptor. 3) Use the methods defined on .
Please note that is not the only listner in servlet API. There are some more e.g.
- javax.servlet.ServletRequestListener
- javax.servlet.ServletRequestAttrbiteListener
- javax.servlet.ServletContextListener
- javax.servlet.ServletContextAttributeListener
- javax.servlet.HttpSessionListener
- javax.servlet.HttpSessionAttributeListener
They can be implemented by your listner class based on choice that which all events you want to listen to; e.g. will be notified everytime a new user session is created or destroyed.
6.JSP nine built-in objects
- page
- pagecontext
- session
- request
- response
- appliction
- out
- config
- exception
-
Built-in objects Detailed
-
PageContext, page global objects
Types of:
Dynamic access to the path of the current project:
-
Request, request object
Types of:
-
ReSponse, the response object
Types of:
-
Config, Configuration
Types of:
-
Out, page output target
Types of:
-
Session, a session object
Types of:
-
Object Page, description of the page
Types of:
-
Application, Server Object
Types of:
-
Exception, exception handling objects
Types of:
The role of the exception object is to display exception information, containing only can be used isErrorPage = «true» page, use the object in general will not compile JSP page JSP file.
-
-
Four built-in objects in the scope object
- Scope Scope size sorting objects: Application> Session> Request> PageContext
- PageContext
- Request
- Session
- Application
Arquitectura
JSP puede considerarse como una manera alternativa, y simplificada, de construir servlets. Es por ello que una página JSP puede hacer todo lo que un servlet puede hacer, y viceversa. Cada versión de la especificación de JSP está fuertemente vinculada a una versión en particular de la especificación de servlets.
El funcionamiento general de la tecnología JSP es que el Servidor de Aplicaciones interpreta el código contenido en la página JSP para construir el código Java del servlet a generar. Este servlet será el que genere el documento (típicamente HTML) que se presentará en la pantalla del Navegador del usuario.
JSP -> Servidor Aplicaciones (Servlets) -> Cliente (Navegador)
Es posible enriquecer el lenguaje de etiquetas utilizado por JSP. Para ello debemos extender la capa de alto nivel JSP mediante la implementación de Bibliotecas de Etiquetas (Tags Libraries). Un ejemplo de estas bibliotecas son las propocionadas por Sun bajo la denominación de JSTL o las distribuidas por Apache junto con el Framework de Struts.
TagLibs -> JSP -> Servidor Aplicaciones (Servlets) -> Cliente (Navegador)
El rendimiento de una página JSP es el mismo que tendría el servidor equivalente, ya que el código es compilado como cualquier otra clase Java. A su vez, la máquina virtual compilará dinámicamente a código de máquina las partes de la aplicación que lo requieran. Esto hace que JSP tenga un buen desempeño y sea más eficiente que otras tecnologías web que ejecutan el código de una manera puramente interpretada.
JSP in a web application
On the Implicit Objects page, click the back arrow, followed by the Source link. This will lead you to the JSP code for the Implicit Objects web app, which is shown in Listing 2.
Listing 2. JSP code for the Implicit Objects web app
JSP functions
If you’re familiar with HTML, then Listing 2 should look pretty familiar. You have the expected HTML elements, followed by the JSP expression syntax introduced in Listing 1. But notice the value for : . The «» is a JSP function.
A JSP function encapsulates a chunk of reusable functionality. In this case, the functionality is to escape XML. JSP offers a variety of functions, and you can also create functions yourself. To use a function, you import its library into your JSP page, then call the function.
In Listing 2, the function is included with the line:
The syntax is pretty clear: it imports the required functions and assigns them a prefix (in this case «fn») that can be used in all following expressions.
Как контейнер сервлетов управляет жизненным циклом сервлета, когда и какие методы вызываются?
Контейнер сервлетов управляет четырьмя фазами жизненного цикла сервлета:
- Загрузка класса сервлета — когда контейнер получает запрос для сервлета, то происходит загрузка класса сервлета в память и вызов его конструктора без параметров.
- Инициализация класса сервлета — после того как класс загружен контейнер инициализирует объект для этого сервлета и внедряет его через метод. Это и есть место где сервлет класс преобразуется из обычного класса в сервлет.
- Обработка запросов — после инициализации сервлет готов к обработке запросов. Для каждого запроса клиента сервлет контейнер порождает новый поток и вызывает метод путем передачи ссылки на объекты ответа и запроса.
- Удаление — когда контейнер останавливается или останавливается приложение, то контейнер сервлетов уничтожает классы сервлетов путем вызова метода.
Таким образом, сервлет создаётся при первом обращении к нему и живёт на протяжении всего времени работы приложения (в отличие от объектов классов, которые уничтожаются сборщиком мусора после того как они уже не используются) и весь жизненный цикл сервлета можно описать как последовательность вызова методов:
- – используется контейнером для инициализации сервлета. Вызывается один раз за время жизни сервлета.
- – вызывается для каждого запроса. Метод не может быть вызван раньше выполнения метода.
- – вызывается для уничтожения сервлета (один раз за время жизни сервлета).
Настройка nginx
Данный раздел понадобится тем, кто запускает своё приложение на порту, отличными от 8080. А я вам советую, на первое время поменять порт вашего приложения в application.properties, например на server.port=8099. Так как порт 80 по умолчанию занят nginx, либо apache.
Существуют способы редиректа через htaccess.
В случае, если у вас только apache, то необходимо найти гайд для перенаправления портов.
Подключаемся заново по shh к нашему серверу по root.
Для начала проверим папку с файлами, они должны существовать(Не забудьте поменять название YOURUSER на вашего пользователя, у которого вы создали сайт в Vesta panel):
У вас должен быть примерно такой список файлов(Вместо yourdomain будет имя вашего домена, без www и http):
Необходимо добавить редирект с http на https. Открываем файл nginx.conf(Не забудьте поменять YOURUSER на вашего пользователя и YOURDOMAIN на ваш домен без www и http, например mysite.ru):
В конец файла, перед закрывающейся скобкой, вставьте редирект(Не забудьте поменять YOURDOMAIN на ваш домен без www, например mysite.ru):
Сделаем перенаправление портов в файле nginx.ssl.conf(Не забудьте поменять YOURUSER на вашего пользователя и YOURDOMAIN на ваш домен без www и http, например mysite.ru):
В файле меняем в location /, в поле proxy_pass порт на тот, на котором будет запускаться java приложение, например 8099(IP адрес не меняем. В примере он указан вымышленный):
Аналогично меняем в location @fallback proxy_pass порт
Сохраняемся и выходим.
Перезапускаем процессы apache2, vesta, nginx:
Если возникнут трудности с редиректом, в некоторых случаях добавление в файл nginx.conf помогает следующий код(Вставляем перед закрывающейся скобкой):
Опишите общие практические принципы работы с JSP.
Хорошей практикой работы с технологией JSP является соблюдение следующих правил:
- Следует избегать использования элементов скриптлетов на странице. Если элементы action, JSTL, JSP EL не удовлетворяют потребностям, то желательно написать собственный тег.
- Рекомендуется использовать разные виды комментариев: так JSP комментарии необходимы для уровня кода и отладки, т.к. они не будут показаны клиенту.
- Не стоит размещать какой-либо бизнес логики внутри JSP страницы. Страницы должны использоваться только для создания ответов клиенту.
- Для повышения производительности лучше отключать создание сессии на странице, когда это не требуется.
- Директивы , в начале JSP страницы улучшают читабельность кода.
- Следует правильно использовать директиву и элемент . Первая используется для статических ресурсов, а второй для динамических ресурсов времени выполнения.
- Обработку исключений нужно производить с помощью страниц ошибок. Это помогает избегать запуска специальных служебных методов и может повысить производительность.
- Использующиеся CSS и JavaScript должны быть разнесены в разные файлы и подключаться в начале страницы.
- В большинстве случаев JSTL должно хватать для всех нужд. Если это не так, то в начале следует проанализировать логику своего приложения, и попробовать перенести выполнения кода в сервлет, а далее с помощью установки атрибутов использовать на JSP странице только результат.
Что такое Java Server Pages?
JSP означает Java Server Pages, является технология динамического веб-разработки. Он использует JSP-тегов для вставки Java-код в HTML-страницах. Метки обычно <% начинаются с конца с%>.
JSP является сервлет Java, в основном используется для реализации секции пользовательского интерфейса веб-приложения Java. Веб-разработчики, которые с помощью комбинации HTML кода, XHTML, XML-кодов элементов и встроенной операционной JSP и команд для написания JSP.
JSP получить пользовательский ввод данных, доступ к базам данных и другим источникам данных через веб-формы, а затем динамически создавать веб-страницы.
JSP тег имеет множество функций, таких как доступ к базе данных, пользователь выбирает записи информации, посещение JavaBeans компонентов и т.д., а также может передавать управляющую информацию и обмениваться информацией на разных страницах.
Первый проект – tutorial
Для того, чтобы лучше разобраться в HTML и динамических страницах, созданных через рассматриваемую технологию, рекомендуется создать первый проект. Приведенный пример будет реализован через Eclipse.
Чтобы воспользоваться первым приложением JSP, необходимы следующие «компоненты»:
- Java;
- JSP;
- Apache Tomcat 8;
- Eclipse IDE.
Разобраться с соответствующей технологией HTML не составляет никакого труда, если действовать последовательно.
Создание проекта
Для того, чтобы создавать страницы JSP и подобного рода приложения, можно действовать следующим образом:
Создать новый проект динамического характера.
Добавить имя разработки. Пусть будет RankWebApplication.
- Нажать на кнопку Next.
- Далее предстоит осуществить настройку проекта. Шаг рекомендуется пропустить, так как в примере речь идет лишь о демонстрационной разработке.
- Создавать web.xml не нужно. Этот факт требуется подтвердить в настройках веб-модуля.
- Щелкнуть по кнопке с надписью «Готово».
- Составить структуру каталогов имеющегося проекта.
Нажать ПКМ по каталогу «Веб Контент» и добавить новый файл JSP в разработку.
- Назвать файл как NewRankFile.jsp.
- Подтвердить операцию.
Установить шаблон JSP.
После того, как описанные действия останутся позади, произойдет создание нового файла. В «листинг 1» необходимо добавить html body, предложенное ниже. Он отвечает за выведение рейтинга команд по крикету.
- Запустить проект, кликнув ПКМ по оному. Далее предстоит щелкнуть по надписи «Запуск от имени».
- Выбрать «Запустить на сервере». После этого необходимо собственноручно определить новый сервер Tomcat. Это необходимо для первого проекта в Эклипсе. Требуется поставить отметку около «Всегда использовать данный server для этого проекта». При подобных обстоятельствах не придется осуществлять повторный выбор.
- На экране появится рейтинги UCC и время обновления HTML. Оно будет сгенерировано через JSP выражение. Выходной ссылкой выступает http://localhost:8080/RankWebApplication/NewRankFile.jsp.
По итогу на экране появится картинка, представленная выше. Это – первый ознакомительный проект, наглядно показывающий принцип работы JSP.
Wildfly
WildFly, более известный как JBoss AS – это сервер приложений, созданный JBoss, но в настоящее время постоянно развивающийся Red Hat. WildFly написан на Java и реализует спецификацию Java Platform, Enterprise Edition (Java EE) отдельно от JBoss Enterprise Application Platform.
WildFly – это бесплатное программное обеспечение с открытым исходным кодом, доступное по лицензии GNU Lesser General Public License (LGPL), версия 2.1. Wild Fly в настоящее время находится в 8.2.0 Final и 9.0.0Beta2 Release.
Некоторые из функциональных возможностей и функций, включенных в WildFly: кластеризация, API развертывания, распределенное кеширование (с использованием Infinispan, автономный проект), распределенное развертывание, Enterprise JavaBeans версий 3 и 2.1, отказоустойчивость (включая сеансы Web и EJB), постоянное программирование, аутентификацию Java и Служба авторизации (JAAS), интеграция Java EE Connector Architecture (JCA), расширения Java Management, интеграция службы сообщений Java (JMS), интерфейс именования и каталогов Java (JNDI), API транзакций Java (JTA), контракт авторизации Java для контейнеров, (JACC) интеграция JavaMail, Java Server Faces 1.2 (Mojarra) Java Server Pages (JSP) / Java Servlet 2.1 / 2.5
Wildfly также поддерживает веб-сервисы, такие как балансировка JAX-WSJDBCLoad, и включает в себя API-интерфейс управления, OSGi frameworkRMI-IIOP и может выполняться в двух режимах сервера: традиционный, одиночная JVM, автономный режим и вариант с несколькими JVM, режим домена, который синхронизирует конфигурацию между любым количеством процессов и хостов.
Заключение о JSP
Этот раздел является только кратким обзором JSP, и даже с тем,
что рассмотрено здесь (наряду с тем, что вы выучите о Java в остальной части книги,
и вместе с вашим знанием HTML), вы можете начать писать замысловатые web страницы с
помощью JSP. Синтаксис JSP не предназначен быть таинственным или сложным, так что
если вы понимаете что было представлено в этом разделе, вы готовы к продуктивной
работе с JSP. Вы можете найти больше информации в большинстве имеющихся книг о
сервлетах или на java.sun.com.
Это особенно удобно иметь доступ к JSP, даже если вашей целью
является только создание сервлетов. Вы обнаружите, что если у вас есть вопрос
относительно поведения функции сервлета, гораздо легче и быстрее написать
тестовую программу на JSP, чтобы получить ответ, чем писать сервлет. Часть
удобства состоит в том, что нужно писать меньше кода и можно смешивать отображаемый
HTML с Java кодом, но это преимущество становится особенно явным, когда вы увидите,
что JSP Контейнер обрабатывает всю перекомпиляцию и перезагрузку JSP за вас в
любое время, когда меняется исходный код.
Однако весь ужас JSP состоит в том, что необходимо учитывать,
что создание JSP требует большего уровня умения, чем простое программирования на
Java или просто создание Web страниц. Кроме того, отладка неработающего JSP не такое
простое дело, как в случае Java программы, так как (в настоящее время) сообщения об
ошибках более непонятны. Это должно измениться с улучшением систем разработки, но мы
можем также видеть другие технологии, основанные на Java и Web, которые лучше
адаптированы к умениям дизайнеров Web сайтов.