Приложение JSP.A

Упаковка (Архивирование)
JSP-Страниц


В этом приложении показано два примера упаковки JSP-страницы в WAR публикации в Web-контейнере.


В первом примере JSP-страница публикуется в исходной форме. Это самый общий пример.


Во втором примере JSP-страница компилируется в Servlet, который использует только вызовы API Servlet 2.3 и JSP 1.2; Servlet затем упаковывается в WAR с таким дескриптором публикации, что он выглядит для любого клиента как оригинальная JSP-страница.


Это приложение не является нормативным. В действительности, строго говоря, Это Приложение больше относится к возможностям Servlet 2.3, чем к возможностям JSP 1.2. Приложение дано здесь, потому что эти возможности могут представлять интерес для авторов JSP-страниц и создателей авторских утилит.

A.1 Простейшая JSP-Страница

Мы начинаем с простейшей JSP-страницы HelloWorld.jsp.
 

<%@ page info="Пример предварительно скомпилированной JSP" %>

<p>

Hello World

</p>

A.2 JSP-Страница, Упакованная как Источник/source в WAR-Файл

JSP-страница может быть упакована в WAR-файл простым помещением её в "/HelloWorld.jsp", где отображение расширения JSP-страницы по умолчанию будет её получать.

Web.xml тривиален:
 

<!DOCTYPE webapp

SYSTEM "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<webapp>

<session-config>

<session-timeout> 1 </session-timeout>

</session-config>

</webapp>

A.3 Сервлет/Servlet для Откомпилированной JSP-Страницы

В качестве альтернативы мы покажем, как можно откомпилировать JSP-страницу в Servlet-класс для запуска на прогон в JSP-контейнере.


JSP-страница компилируется в Сервлет с некоторым зависящим от реализации именем _jsp_HelloWorld_XXX_Impl. Servlet-код, зависящий только от API JSP 1.2 и Servlet 2.3, таков:
 

imports javax.servlet.*;

imports javax.servlet.http.*;

imports javax.servlet.jsp.*;

class _jsp_HelloWorld_XXX_Impl

extends_PlatformDependent_Jsp_Super_Impl {

public void _jspInit() {

// ...

}

public void jspDestroy() {

// ...

}

static JspFactory_factory= JspFactory.getDefaultFactory();

public void _jspService(HttpServletRequest request,

HttpServletResponse response)

throws IOException;

{

Object page= this;

HttpSessionsession= request.getSession();

ServletConfigconfig= getServletConfig();

ServletContextapplication = config.getServletContext();

PageContextpageContext

= _factory.getPageContext(this,

request,

response,

(String)NULL,

true,

JspWriter.DEFAULT_BUFFER,

true

);

JspWriterout= pageContext.getOut();

// контекст страницы создаёт начальный JspWriter "out"

try {

out.println("<p>");

out.println("Hello World");

out.println("</p>");

} catch (Exception e) {

pageContext.handlePageException(e);

} finally {

_factory.releasePageContext(pageContext);

}

}

}

A.4 Дескриптор Web-Приложения

Servlet начинает выглядеть как JSP-страница в следующем web.xml:
 

<!DOCTYPE webapp

SYSTEM "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<webapp>

<servlet>

<servlet-name> HelloWorld </servlet-name>

<servlet-class> _jsp_HelloWorld_XXX_Impl.class </servlet-class>

</servlet>

<servlet-mapping>

<servlet-name> HelloWorld </servlet-name>

<url-pattern> /HelloWorld.jsp </url-pattern>

</servlet-mapping>

<session-config>

<session-timeout> 1 </session-timeout>

</session-config>

</webapp>

A.5 WAR для Откомпилированной JSP-Страницы

Наконец, всё это упаковывается в WAR:
 

/WEB-INF/web.xml

/WEB-INF/classes/_jsp_HelloWorld_XXX_Impl.class


Заметьте, что, если класс Servlet, сгенерированный для JSP-страницы, зависел от некоторых классов поддержки, они также должны были быть включены в WAR.