2.1 JSP-директивы

Раз уж мы выяснили, что JSP-файл преобразовывается в обычный сервлет, то в нем можно писать обычный Java-код. И в этом Java-коде можно использовать различные классы (Math из примера). Это еще лучше! Но мы видим, что весь код был перенесен в метод doGet() сервлета. А отсюда сразу возникает несколько вопросов:

  • Как сделать так, чтобы код был перенесен в метод doPost()?
  • Как добавить свой код в метод init()?
  • Как в конце концов прописать импорты классов?

Отличные вопросы, и, конечно же, на них есть ответ — JSP-директивы. Весь не-HTML-код внутри JSP должен быть обрамлен в специальные скобки <% и %>. Все JSP-директивы задаются шаблоном:


        <%@ directive %>
        

Вот список самых популярных атрибутов директивы страницы:

Пример Описание
1 import <%@ page import="java.util.Date" %> Импортирует класс
2 contentType <%@ page contentType=text/html %> Задает contentType
3 extends <%@ page extends="Object" %> Можно задать базовый класс
4 info <%@ page info="Автор: Пётр Иванович; версия:1.0" %> Задает данные для getServletInfo()
5 buffer <%@ page buffer="16kb" %> Задает размер буфера ответа
6 language <%@ page language="java" %> Задает язык, по умолчанию Java
7 isELIgnored <%@ page isELIgnored="true" %> Позволяет отключить EL скрипты
8 isThreadSafe <%@ page isThreadSafe="false" %> Указывает на threadsafe
9 autoFlush <%@ page autoFlush="false" %> Управляет записью в буфер
10 session <%@ page session="false" %> Можно отключить сессию для страницы
11 pageEncoding <%@ page pageEncoding="UTF-8"%> Можно задать кодировку страницу
12 errorPage <%@ page errorPage="errorpage.jsp" %> Можно задать страницу для ошибок

2.2 Импорты

Давай ради интереса добавим в наш JSP-файл несколько импортов и зададим базовый класс.

Пример JSP-файла:


    <%@ page import="java.util.Date" %> 
    <%@ page import="java.lang.Math" %> 
    <%@ page extends="com.javarush.MyHttpServlet" %> 
 
    <html> 
    <body> 
    <%
        double num = Math.random();
        if (num > 0.95) {
     %>
         <h2>Ты счастливчик, user!</h2><p>(<%= num %>)</p>
    <%
    }
    %> 
  </body> 
   </html> 

И вот что из него получится:


import java.util.Date;
import java.lang.Math;
 
public class HelloServlet extends com.javarush.MyHttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  throws Exception {
    PrintWriter out = response.getWriter(); 
    out.print("<html>  "); 
    out.print("<body> "); 
        double num = Math.random();
        if (num >  0.95) {
             out.print("<h2> Ты счастливчик, user! </h2> <p> (" + num + ")</p> ");
        }
    out.print("</body> "); 
    out.print("</html> "); 
    }
}

Работает. Отлично!