2010-02-25 13 views
5

Flash banner içeren bir Spring 2.5 uygulamasına sahibim. Flash bileşeni için kaynağım yok, ancak .html ile biten belirli sayfalara kodlanmış bağlantılar var. Bu sayfaları .html sayfalarını mevcut jsp sayfalarına yeniden yönlendirebiliyorum. Spring'in birkaç .html sayfasını .jsp sayfalarına nasıl çözebilirim?Spring - Bir URL'yi başka bir URL'ye yeniden yaz

WebContent 
| 
-sample.jsp 
-another.jsp 
    WEB-INF 
    | 
    -myapp-servlet.xml 
    -web.xml 

Ben bu bahar da yapabilir misin localhost:8080/sample.jsp

localhost:8080/offers.html yönlendirmek istiyorum: gibi

Projem görünüyor? Zaten zaten var olan sayfaları sunmaya devam etmek zorunda olan myapp-servlet.xml içinde tanımlanan bir SimpleUrlHandlerMapping ve UrlFilenameViewController var. Benim web.xml olarak

, ben burada Güncelleme

<servlet-mapping> 
    <servlet-name>myapp</servlet-name> 
    <url-pattern>*.htm</url-pattern> 
</servlet-mapping> 

URL mapper var. Bir denetleyici eklerseniz, görüntü çözümleyicisi/WEB-INF/jsp dizinini içerdiğinden WebContent dizinindeki jsp görünümünü nasıl döndürürüm.

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
    <props> 
     <prop key="/page1.htm">page1Controller</prop> 
     <prop key="/page2.htm">page2Controller</prop> 
    </props> 
    </property> 
</bean> 

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 
+0

UrlFilenameViewController sadece dosya adına bir URL kalıbı çözecektir, farklı bir dosyaya url "map" olamaz. /offers.html dosyasını sample.jsp dosyasına eşlemek istiyorsanız, /offers.html desenini işleyen ve örnek olarak sample.jsp döndüren bir denetleyiciye ihtiyacınız olacaktır. SimpleUrlHandlerMapping'inizi myapp-servlet.xml adresinden gönderir misiniz? –

+0

@Rob Beardow - SimpleUrlHandlerMapping ve InternalResourceViewResolver – George

cevap

16

Açık kaynak kodlu URL yeniden yazma kitaplığından tuckey.org tarafından yararlanabileceğinizi düşünüyorum. SpringSource'daki çocuklar bu kütüphaneyi onaylar, çünkü bir proje oluşturmak için Spring Roo'yu kullanırsanız otomatik olarak kurulur, bu yüzden iyi kalitede olur. Çok sayıda projede başarılı bir şekilde kullandım.

onun ana sayfası için here bakınız. Ve Skaffman haklı, varsayılan davranış olan yönlendirme yerine 'iletmek' istiyorsun.Böyle Web.xml

yapılandır it:

<rule> 
    <from>offers.html</from> 
    <to>offers.jsp</to>  
</rule> 
+0

@ mirror303 ile güncellendi - Teşekkürler. Bu mükemmel çalıştı ve yapılandırmak için yaklaşık 10 saniye sürdü. – George

1

İlk olarak, "yönlendirme" dediğinizde gerçekten "ileri" anlamına geldiğinizi varsayıyorum. HTTP Yönlendirmeleri burada uygun olmaz.

SO, burada denemek için bazı şeyler göz önüne alındığında:

  • sadece /WEB-INF/jsp/ içine WebContent gelen JSP dosyaları taşınamaz? O zaman ViewResolver tanımını değiştirmeniz gerekmez.

  • Sen kontrolörleri ../../another.jsp gibi bir şeyin bir görünüm adını döndürür ve servlet konteyner /another.jsp için /WEB-INF/jsp/../../another.jsp için giderir umut var deneyebilirsiniz. kontrolörler bir görünümün adını dönerseniz

  • ViewResolver

    sadece danışılır. Denetleyicileriniz 'un bir görünümün adını döndürmek için'a sahip olmadığından, bir View nesnesini doğrudan bu durumda bir JstlView döndürürler. Bu, beğendiğiniz JSP'yi işaret edebilir. Bazı denetleyiciler görünüm adlarını döndürür ve bazıları View nesnesini döndürür.
  • görünümünüzü çözücüden prefix özelliğini kaldırın. Bu, mevcut tüm denetleyicileri de /WEB-INF/jsp/ ile döndürdüğü her görünüm adını önek olarak değiştirmeniz gerektiği anlamına gelir. Ardından, WebContent'un altındaki JSP'lere isme başvurabilirsiniz.

5

Ben OCPsoft PrettyFaces veya OCPsoft kullanırsınız:

<filter> 
     <filter-name>UrlRewriteFilter</filter-name> 
     <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
</filter> 

Sonra WEB-INF/böyle bir öğe var urlrewrite.xml Bu yeniden yazımı:

PrettyFaces olarak:

Rewrite ile WEB-INF/tatlı-config.xml

<url-mapping> 
    <pattern value="/offers.html" /> 
    <view-id value="/offers.jsp" /> 
</url-mapping> 

oluşturun:

ConfigurationBuilder.begin() 
    .addRule(Join.path("/offers.html").to("/offers.jsp")); 

umarım bu yardımcı olur.

~ Lincoln

+0

Ayrıca varolan Tuckey yapılandırmanızı Rewrite ile yeniden yazma-entegrasyon-tuckey modülü üzerinden de kullanabilirsiniz. – Lincoln

+0

Lincoln, PrettyFaces ve Rewrite'ın yazarı OCPsoft'un kurucusudur. Cevabınızın önyargılı olduğundan bahsetmelisin. – Janning

+4

Cevabım önyargılı. – Lincoln

İlgili konular