Спецификация Java Server Pages 1.2

       

JSP.8.2.3 Опущение Атрибута extends


Если атрибут extends директивы page (см. ) в JSP-странице не используется, JSP-контейнер может генерировать любой класс, удовлетворяющий контракту, описанному в Таблице JSP.8-1, если он трансформирует JSP-страницу.

В следующих примерах иллюстрирует общий/родовой HTTP-суперкласс, названный ExampleHttpSuper. В показан подкласс, названный _jsp1344, который расширяет ExampleHttpSuper и является классом, сгенерированным из JSP-страницы.


Используя отдельные классы _jsp1344 и ExampleHttpSuper, транслятор JSP-страницы не нуждается в поиске информации, содержит ли JSP-страница объявления с jspInit() или jspDestroy(). Это значительно упрощает реализацию.

Пример Кода 8.1 Общий HTTP-Суперкласс


imports javax.servlet.*;

imports javax.servlet.http.*;

imports javax.servlet.jsp.*;

/**

* Пример суперкласса для HTTP JSP-класса

*/

abstract class ExampleHttpSuper implements HttpJspPage {

private ServletConfig config;

final public void init(ServletConfig config) throws ServletException {

this.config = config;



jspInit();

public void jspInit() {

}

public void jspDestroy() {

}

}

final public ServletConfig getServletConfig() {

return config;

}

// Этот метод не является final, поэтому он может быть переопределён более точным методом

public String getServletInfo() {

return “Суперкласс для HTTP JSP”; // можно и получше?

}

final public void destroy() {

jspDestroy();

}

/**

* Точка входа в сервис.

*/

final public void service(ServletRequest req, ServletResponse res)

throws ServletException, IOException {

// количество отловленных исключений увеличится при наличии внутренней ошибки.

HttpServletRequest request = (HttpServletRequest) req;

HttpServletResponse response = (HttpServletResponse) res;

_jspService(request, resonse);

/**

* Абстрактный метод, предоставляемый JSP-процессором в подклассе,

* обязан быть определён в подклассе.

*/

abstract public void _jspService(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException;


}

Пример Кода 8.2 Java-Класс, Генерируемый из JSP-страницы


imports javax.servlet.*;

imports javax.servlet.http.*;

imports javax.servlet.jsp.*;

/**

* Пример класса, генерируемого для JSP.

*

* Имя класса непредсказуемо.

* Мы принимаем, что это пакет HTTP JSP (как чаще всего и бывает)

*/

class _jsp1344 extends ExampleHttpSuper {

// Следующий код вставлен непосредственно через объявления.

// Любые следующие части могут или могут не иметься;

// если они не определены здесь, будут использоваться

// методы суперкласса.

public void jspInit() {....}

public void jspDestroy() {....}

// Следующий метод генерируется автоматически

// JSP-процессором.

// Тело/body JSP-страницы

public void _jspService(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

// инициализация неявных переменных

HttpSession session = request.getSession();

ServletContext context =

getServletConfig().getServletContext();

// для этого примера мы принимаем, что директива буферизована

JSPBufferedWriter out = new

JSPBufferedWriter(response.getWriter());

// далее идёт код из скриптлетов, выражений и статического текста.

}

}


Содержание раздела