Consider Using Filters to Simplify URLs
One drawback with the simple templating solution implemented by a layout page is that all links to the JSP pages must include the layout page name plus a query string—e.g., layout.jsp?page=page1. Example 9-6 shows parts of the navigation menu page with this type of link.
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<table bgcolor="lightblue">
<tr>
<td>
<c:choose>
<c:when test="${param.page = = 'page1'}">
<b>Page 1</b>
</c:when>
<c:otherwise>
<a href="<c:url value="layout.jsp?page=page1" />">Page 1</a>
</c:otherwise>
</c:choose>
</td>
</tr>
. . .
</table>If you want to be able to use more traditional URLs instead, you can use a filter. The filter component type was introduced in the Servlet 2.3 specification. A filter is invoked before a request is delivered to the target servlet or JSP page and is a powerful tool for applying request and response processing to a group of web application resources. The filter shown in Example 9-7 converts URLs of the form pageName.jsp to URLs of the form layout.jsp?page=pageName, which are behind the scenes at runtime.
package com.ora.j2eebp.jsp; import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; public class URLConversionFilter implements Filter { private static final String LAYOUT_PAGE = "/layout.jsp"; private static final ...