Учебники

6) Неявные объекты JSP

Что такое неявный объект JSP?

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

Сколько неявных объектов доступно в JSP?

В контейнере доступно 9 типов неявных объектов:

  1. вне
  2. запрос
  3. ответ
  4. конфиг
  5. применение
  6. сессия
  7. PageContext
  8. страница
  9. исключение

Давайте изучать один за другим

вне

  • Out — это один из неявных объектов для записи данных в буфер и отправки вывода клиенту в ответ
  • Объект Out позволяет нам получить доступ к выходному потоку сервлета
  • Out является объектом класса javax.servlet.jsp.jspWriter
  • При работе с сервлетом нам нужен объект printwriter

Пример:

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Implicit Guru JSP1</title>
  8. </head>
  9. <body>
  10. <% int num1=10;int num2=20;
  11. out.println("num1 is " +num1);
  12. out.println("num2 is "+num2);
  13. %>
  14. </body>
  15. </html>

Explanation of the code:

Code Line 11-12– out is used to print into output stream

When we execute the above code, we get the following output:

Действия JSP: неявные объекты JSP, директива Page, директива Include, директива Taglib

Output:

  • In the output, we get the values of num1 and num2

Request

  • The request object is an instance of java.servlet.http.HttpServletRequest and it is one of the argument of service method
  • It will be created by container for every request.
  • It will be used to request the information like parameter, header information , server name, etc.
  • It uses getParameter() to access the request parameter.

Example:

Implicit_jsp2.jsp(form from which request is sent to guru.jsp)

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Implicit Guru form JSP2</title>
  8. </head>
  9. <body>
  10. <form action="guru.jsp">
  11. <input type="text" name="username">
  12. <input type="submit" value="submit">
  13. </form>
  14. </body>
  15. </html>

Guru.jsp (где выполняется действие)

Действия JSP: неявные объекты JSP, директива Page, директива Include, директива Taglib

Объяснение кода:

Строка кода 10-13: в implicit_jsp2.jsp (form) отправляется запрос, следовательно, переменная username обрабатывается и отправляется в guru.jsp, который является действием JSP.

Guru.jsp

Строка кода 10-11: это действие jsp, в котором обрабатывается запрос, а имя пользователя берется из формы jsp.

Когда вы выполните приведенный выше код, вы получите следующий вывод

Вывод:

Действия JSP: неявные объекты JSP, директива Page, директива Include, директива Taglib

Когда вы пишете тест и нажимаете кнопку «Отправить», вы получаете следующий вывод «Welcome Test».

Действия JSP: неявные объекты JSP, директива Page, директива Include, директива Taglib

отклик

  • «Response» — это экземпляр класса, который реализует интерфейс HttpServletResponse
  • Контейнер генерирует этот объект и передает его методу _jspservice () в качестве параметра
  • «Объект ответа» будет создаваться контейнером для каждого запроса.
  • Он представляет собой ответ, который может быть дан клиенту
  • Неявный объект ответа используется для типа контента, добавления cookie и перенаправления на страницу ответа.

Пример:

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Implicit Guru JSP4</title>
  8. </head>
  9. <body>
  10. <%response.setContentType("text/html"); %>
  11. </body>
  12. </html>

Пояснение к коду:

Строка кода 11: в объекте ответа мы можем установить тип содержимого

Здесь мы устанавливаем только тип содержимого в объекте ответа. Следовательно, для этого нет выхода.

конфиг

  • «Config» имеет тип java.servlet.servletConfig
  • Он создается контейнером для каждой страницы JSP
  • Используется для получения параметра инициализации в web.xml

Пример:

Web.xml (указывает имя и отображение сервлета)

Действия JSP: неявные объекты JSP, директива Page, директива Include, директива Taglib

Implicit_jsp5.jsp (получение значения имени сервлета)

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Implicit Guru JSP5</title>
  8. </head>
  9. <body>
  10. <% String servletName = config.getServletName();
  11. out.println("Servlet Name is " +servletName);%>
  12. </body>
  13. </html>

Пояснение к коду:

В web.xml

Строка кода 14-17: в web.xml у нас есть отображение сервлетов на классы.

Implicit_jsp5.jsp

Строка кода 10-11: чтобы получить имя сервлета в JSP, мы можем использовать config.getServletName, который поможет нам получить имя сервлета.

Когда вы выполните приведенный выше код, вы получите следующий вывод:

Действия JSP: неявные объекты JSP, директива Page, директива Include, директива Taglib

Вывод:

  • Имя сервлета — «GuruServlet», так как имя присутствует в web.xml

заявка

  • Объект приложения (строка кода 10) является экземпляром javax.servlet.ServletContext и используется для получения контекстной информации и атрибутов в JSP.
  • Объект приложения создается контейнером один на приложение, когда приложение развертывается.
  • Servletcontext объект содержит набор методов, которые используются для взаимодействия с контейнером сервлета. Мы можем найти информацию о контейнере сервлета

Пример:

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Guru Implicit JSP6</title>
  8. </head>
  9. <body>
  10. <% application.getContextPath(); %>
  11. </body>
  12. </html>

Пояснение к коду:

  • В приведенном выше коде атрибут приложения помогает получить контекстный путь страницы JSP.

сессия

  • Сеанс содержит объект «httpsession» (строка кода 10).
  • Объект сеанса используется для получения, установки и удаления атрибутов в области сеанса, а также для получения информации о сеансе.

Пример:

Implicit_jsp7 (атрибут установлен)

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Implicit JSP</title>
  8. </head>
  9. <body>
  10. <% session.setAttribute("user","GuruJSP"); %>
  11. <a href="implicit_jsp8.jsp">Click here to get user name</a>
  12. </body>
  13. </html>

Implicit_jsp8.jsp (getAttribute)

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>implicit Guru JSP8</title>
  8. </head>
  9. <body>
  10. <% String name = (String)session.getAttribute("user");
  11. out.println("User Name is " +name);
  12. %>
  13. </body>
  14. </html>

Пояснение к коду:

Implicit_jsp7.jsp

Code Line 11: we are setting the attribute user in the session variable, and that value can be fetched from the session in whichever jsp is called from that (_jsp8.jsp).

Code Line 12: We are calling another jsp on href in which we will get the value for attribute user which is set.

Implicit_jsp8.jsp

Code Line 11: We are getting the value of user attribute from session object and displaying that value

When you execute the above code, you get the following output:

Действия JSP: неявные объекты JSP, директива Page, директива Include, директива Taglib

When you click on the link for the username. You will get the following output.

Действия JSP: неявные объекты JSP, директива Page, директива Include, директива Taglib

Output:

  • When we click on link given in implicit_jsp7.jsp then we are redirected to second jsp page, i.e (_jsp8.jsp) page and we get the value from session object of the user attribute (_jsp7.jsp).

pageContext:

  • This object is of the type of pagecontext.
  • It is used to get, set and remove the attributes from a particular scope

Scopes are of 4 types:

  • Page
  • Request
  • Session
  • Application

Example:

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Implicit Guru JSP9</title>
  8. </head>
  9. <body>
  10. <% pageContext.setAttribute("student","gurustudent",pageContext.PAGE_SCOPE);
  11. String name = (String)pageContext.getAttribute("student");
  12. out.println("student name is " +name);
  13. %>
  14. </body>
  15. </html>

Explanation of the code:

Code Line 11: we are setting the attribute using pageContext object, and it has three parameters:

  • Key
  • Value
  • Scope

В приведенном выше коде ключ «студент», а значение «gurustudent», а область действия — область страницы. Здесь область действия — «страница», и она может использоваться только с областью действия страницы

Строка кода 12: мы получаем значение атрибута, используя pageContext

Когда вы выполните приведенный выше код, вы получите следующий вывод:

Действия JSP: неявные объекты JSP, директива Page, директива Include, директива Taglib

Вывод:

  • На выходе будет напечатано «имя студента — gurustudent».

страница

  • Неявная переменная страницы содержит текущий исполняемый объект сервлета для соответствующего jsp.
  • Действует как этот объект для текущей страницы JSP.

Пример:

В этом примере мы используем объект страницы, чтобы получить имя страницы с помощью метода toString.

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Implicit Guru JSP10</title>
  8. </head>
  9. <body>
  10. <% String pageName = page.toString();
  11. out.println("Page Name is " +pageName);%>
  12. </body>
  13. </html>

Пояснение к коду:

Строка кода 10-11: в этом примере мы пытаемся использовать метод toString () объекта страницы и пытаемся получить строковое имя страницы JSP.

При выполнении кода вы получите следующий вывод:

Действия JSP: неявные объекты JSP, директива Page, директива Include, директива Taglib

Вывод:

  • Вывод — это строковое имя над страницей jsp

исключение

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

    Пример:

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1" isErrorPage="true"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Implicit Guru JSP 11</title>
  8. </head>
  9. <body>
  10. <%int[] num1={1,2,3,4};
  11. out.println(num1[5]);%>
  12. <%= exception %>
  13. </body>
  14. </html>

Пояснение к коду:

Строка кода 10-12 — имеет массив чисел, т.е. num1 с четырьмя элементами. В выводе мы пытаемся распечатать пятый элемент массива из num1, который не объявлен в списке массивов. Таким образом, он используется для получения объекта исключения из JSP.

Вывод:

Действия JSP: неявные объекты JSP, директива Page, директива Include, директива Taglib

Мы получаем ArrayIndexOfBoundsException в массиве, где мы получаем массив num1 пятого элемента.