На сегодняшний день в JSP существует четыре механизма абстрагирования: тег jsp: include, директива <% @ include>, библиотеки пользовательских тегов и файлы пользовательских тегов.
jsp: include вставляет результаты выполнения другой страницы JSP, так что вы можете сделать:
<jsp:include "page_naviagtor.jsp"/>
<table id="results">...</table>
<jsp:include "page_navigator.jsp"/>
<% @ include> аналогичен jsp: include, за исключением того, что он на самом деле не выполняет код, а просто печатает его в исходном источнике JSP и компилирует с остальной частью страницы.
Пользовательские библиотеки тегов дают вам (почти) всю мощь тегов JSP, поэтому вы можете сделать что-то вроде:
<tag:wrap_in_page_nav>
<table id="results"> ... </table>
</tag:wrap_in_page_nav>
Однако для этого требуется написать собственный код Java.
Последний и, честно говоря, лучший вариант для большинства случаев - это файл тегов JSP 2.0.
Файлы тегов представляют собой нечто среднее между jsp: include и пользовательскими тегами. Они позволяют вам делать что-то похожее на тег "wrap_in_page_nav", но вы фактически создаете тег с использованием разметки JSP.
Таким образом, во многих случаях вы можете просто вырезать часть, которую хотите реорганизовать, вставить ее в файл тегов, а затем просто использовать тег.
page.tag
<%@tag description="put the tag description here" pageEncoding="UTF-8"%>
<%@ taglib prefix="t" tagdir="/WEB-INF/yourtags" %>
<%@attribute name="startPage" required="true"%>
<%@attribute name="endPage" required="true"%>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<tag:page_nav startPage="${startPage}" endPage="${endPage}"/>
<jsp:doBody/>
<tag:page_nav startPage="${startPage}" endPage="${endPage}"/>
</body>
</html>
page_nav.tag
<%@tag description="put the tag description here" pageEncoding="UTF-8"%>
<%@ taglib prefix="t" tagdir="/WEB-INF/yourtags" %>
<%@attribute name="startPage" required="true"%>
<%@attribute name="endPage" required="true"%>
<div>${startPage} .. ${endPage}</div>
Наконец, ваш JSP
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib prefix="t" tagdir="/WEB-INF/yourtags" %>
<tag:page startPage="1" endPage="4">
<table> ... </table>
</tag:page>
Каждый из файлов тегов обладает полной мощью JSP, единственным ограничением является то, что при использовании собственного файла пользовательских тегов вы не можете включать код скриптлета между своими тегами файла пользовательских тегов (вы можете использовать обычные теги JSP, только сейчас теги файлов тегов).
Файлы тегов - очень мощный инструмент абстракции для использования в JSP.