2009-03-06 15 views
5

SiteMesh'u bir kapsayıcım olarak Tomcat 5 kullanarak eski bir uygulamaya entegre etmeye çalışıyorum. Basit bir dekoratör ile dekorasyon yapıyorum bir main.jsp var. El http://example.com/my-webapp/jsp/main.jsp gidersenizSiteMesh'i RequestDispatcher'ı kullanarak kullanma()

<decorators defaultdir="/decorators"> 
    <decorator name="layout-main" page="layout-main.jsp"> 
    <pattern>/jsp/main.jsp</pattern> 
    </decorator> 
</decorators> 

Bu dekoratör çalışır: decorators.xml yılında

, sadece tanımlanmış bir dekoratör var. Ancak, servlet, bunun yerine bir jsp bir yönlendirme yapmanın yapar birkaç yer vardır bir forward:

getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(request, response); 

Bu URL yerine jsp dosyası http://example.com/my-webapp/servlet/MyServlet gibi bir şey olarak kalır ve bu nedenle olmadığı anlamına gelir dekore edilmek üzere, decorators.xml modelindeki desen eşleşmediğinden dolayı farz ediyorum.

layout-main.jsp tarafından dekore edilmesine gerek olmayan başka jsps'ler olduğu için <pattern>/*</pattern> yapamıyorum. MyServlet bazen main.jsp bazen ve belki de error.jsp diğer zamanlarda iletebileceğinden, <pattern>/servlet/MyServlet*</pattern> yapamıyorum.

Servletlerin nasıl çalıştığı konusunda kapsamlı değişiklikler yapmadan bunun üzerinde çalışmanın bir yolu var mı? Eski bir uygulama olduğundan, işleri değiştirecek kadar özgürlüğüm yok, bu yüzden bunu düzeltecek bir yapılandırma umuyoruz.

SiteMesh'in belgeleri gerçekten bu kadar iyi değil. Çoğunlukla dağıtımla gelen örnek uygulamada çalışıyorum. SiteMesh'i çok beğendim ve bu davada çalışmamı umuyordum.

cevap

9

Anlayışım, SiteMesh'in uygulamaya bir Servlet filtresi olarak entegre edilmesidir. Varsayılan olarak, sunucu filtreleri yalnızca orijinal gelen talebe karşı çalıştırılır (sizin durumunuzda, sunucuya yapılan talep). Sonraki ileriye doğru veya istekleri filtreden geçirilmez ve bu nedenle sitemesh'ten geçirilmeyecektir.

Ancak, filtre talimat verebilirsiniz böyle bir şey kullanarak, ileriye üzerinde çağrılacak: sadece İLERİ istekleri çalışmasına kabı talimatını

<filter-mapping> 
    <filter-name>sitemesh</filter-name> 
    <servlet-name>MyServlet</servlet-name> 
    <dispatcher>FORWARD</dispatcher> 
</filter-mapping> 

. Diğer seçenekler DAHİLDİR ve İSTEĞİ, birkaç öğeye sahip olabilirsiniz.

Bu nedenle, seçenekleriniz, süzgeç yapılandırmanızı FORWARD belirtmek veya filtre eşlemenizi JSP yolundan ziyade sunucu yolu eşleşmesiyle eşleştirmek üzere değiştirmek üzere değiştirmektir. Ya biri çalışmalı.

+1

Bu, filtrenin iletilen talebe uygulanmasını sağladı ve böylece site haritası dekoratörünü iletilen jsp sayfasına uyguladı. Teşekkürler! –

+1

Teşekkürler skaffman, bu sadece bana çok yardımcı oldu! –

+1

Bu yeni direktifleri görmüştüm ama henüz onlara ihtiyaçları yoktu. Harika tavsiye. –

İlgili konular