Я пытаюсь интегрировать SiteMesh в устаревшее приложение, использующее Tomcat 5 в качестве моего контейнера. У меня есть main.jsp
, который я украшаю простым декоратором.
В decorators.xml
, я только что определил один декоратор:
<decorators defaultdir="/decorators">
<decorator name="layout-main" page="layout-main.jsp">
<pattern>/jsp/main.jsp</pattern>
</decorator>
</decorators>
Этот декоратор работает, если я вручную перехожу на http://example.com/my-webapp/jsp/main.jsp
. Однако есть несколько мест, где сервлет вместо перенаправления на jsp forward :
getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(request, response);
Это означает, что URL-адрес остается в формате http://example.com/my-webapp/servlet/MyServlet
вместо файла jsp и поэтому не оформляется, я полагаю, поскольку он не соответствует шаблону в decorators.xml
.
Я не могу сделать <pattern>/*</pattern>
, потому что есть другие jsps, которые не нужно украшать layout-main.jsp
. Я не могу сделать <pattern>/servlet/MyServlet*</pattern>
, потому что MyServlet
может переадресовать на main.jsp
иногда и, возможно, error.jsp
в другое время.
Есть ли способ обойти это без больших изменений в том, как работают сервлеты? Поскольку это унаследованное приложение, у меня не так много свободы, чтобы что-то менять, поэтому я надеюсь на что-то в конфигурации, которое это исправит.
Документация SiteMesh действительно не так хороша. Я работал в основном на примере приложения, которое поставляется с дистрибутивом. Мне очень нравится SiteMesh, и я надеюсь, что смогу заставить его работать в этом случае.