В этом приложении показано два примера упаковки JSP-страницы в WAR публикации в Web-контейнере.
В первом примере JSP-страница публикуется в исходной форме. Это самый общий пример.
Во втором примере JSP-страница компилируется в Servlet, который использует
только вызовы API Servlet 2.3 и JSP
1.2; Servlet затем упаковывается в WAR с таким дескриптором публикации, что он
выглядит для любого клиента как оригинальная JSP-страница.
Это приложение не является нормативным.
В действительности, строго говоря, Это Приложение больше относится к возможностям Servlet 2.3,
чем к возможностям JSP 1.2. Приложение дано здесь, потому что эти возможности
могут представлять интерес для авторов JSP-страниц и создателей авторских утилит.
Мы начинаем с простейшей JSP-страницы HelloWorld.jsp.
<%@ page info="Пример предварительно скомпилированной JSP" %>
<p>
Hello World
</p>
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>
В качестве альтернативы мы покажем, как можно откомпилировать 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);
}
}
}
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>
Наконец, всё это упаковывается в WAR:
/WEB-INF/web.xml
/WEB-INF/classes/_jsp_HelloWorld_XXX_Impl.class
Заметьте, что, если класс Servlet, сгенерированный для JSP-страницы, зависел от
некоторых классов поддержки, они также должны были быть включены в WAR.