2010-04-20 7 views
5

Ich habe eine Zeit Auflösung URLs mit Spring 3.0 MVC. Ich baue gerade eine HelloWorld, um zu testen, wie man eine REST-konforme Webapp im Frühling baut, nichts theoretisch Kompliziertes.Wie erstelle ich eine Spring 3 + Tiles 2-Webanwendung mit REST-full-URLs?

Alle Beispiele, die ich finden konnte, basieren auf Konfigurationen, die Dateierweiterungen beachten ("* .htm" oder "* .do"), enthalten ein künstliches Verzeichnisnamenpräfix ("/ foo") oder sogar Präfix-Pfade mit einem Punkt (hässlich), alle Ansätze, die ein künstliches Regex-Muster als ein Signal für den Resolver verwenden. Für einen REST-Ansatz möchte ich all diesen Muck vermeiden und nur die natürlichen URL-Muster meiner Anwendung verwenden. Ich würde (vielleicht fälschlicherweise) annehmen, dass ich in web.xml ein URL-Muster von "/ *" gesetzt habe und alles zur Auflösung an das DispatcherServlet übergebe, dann verlassen Sie sich einfach auf URL-Muster in meinem Controller.

Ich kann nicht zuverlässig meine Resolver die URL-Muster zu fangen, und in allen meinen Versuchen führt dies zu einer Ressource nicht gefunden Fehler, einen Stapelüberlauf (Schleife) oder eine Art undurchsichtige Spring 3 ServletException Stack-Trace — Einer meiner anhaltenden Frustrationen mit Spring ist, dass die Fehlermeldungen oft nicht sehr hilfreich sind.

Ich möchte mit einem Tiles 2 Resolver arbeiten. Ich habe meine * .jsp-Dateien in WEB-INF/views/gefunden und habe eine einzelne Zeile index.jsp-Datei im Anwendungsstamm, die auf die von meiner layout.xml (dem Tiles 2-Konfigurator) festgelegten Indexdatei umleitet.

ich alles tun, die normale Feder 3 High-Level-Konfiguration:

<mvc:annotation-driven /> 

<mvc:view-controller path="/" view-name="index"/> 

<context:component-scan base-package="com.acme.web.controller" /> 

... gefolgt von allen möglichen Kombinationen und Konfigurationen von UrlBasedViewResolver, InternalResourceViewResolver, UrlFilenameViewController usw. mit allerlei variantions in meinem Kachel 2 Konfigurationsdatei. Dann versuche ich in meinem Controller meine URL-Muster zu erkennen. Problem ist, ich kann nicht zuverlässig sogar den/die Resolver dazu bringen, die Muster zu fangen, die an meinen Controller gesendet werden.

Dies hat sich jetzt zu mehreren Tagen ohne wirklichen Fortschritt auf etwas ausgedehnt, von dem ich dachte, dass es sehr einfach zu implementieren wäre. Ich versuche vielleicht zu viel auf einmal zu tun, obwohl ich denke, dass dies eine einfache (fast eine Standard) Konfiguration sein sollte. Ich versuche nur, eine einfache HelloWorld-Anwendung zu erstellen, ich würde nicht erwarten, dass dies Raketenwissenschaft ist.

Anstatt meine eigenen Konfigurationen (die über die Karte verteilt sind) zu posten, weiß jemand von einem Online-Beispiel, das: eine einfache Spring 3 MVC + Tiles 2-Webanwendung zeigt, die REST-ful URLs verwendet Vermeiden Sie erzwungene URL-Muster wie Dateierweiterungen, hinzugefügte Verzeichnisnamen oder Punkte) und verlassen Sie sich ausschließlich auf Spring 3-Code/Annotationen (dh nichts außerhalb von Spring MVC selbst), um dies zu erreichen? Gibt es einen einfachen Weg, dies zu tun?

Vielen Dank für jede Hilfe.

+0

auch ich versuche Frühling 3 Web MVC mit Apache Tiles mit Spring RESTful URLs zu verwenden. Ich kann eine Seite zum Rendern bekommen, aber ich bekomme eine unendliche Rekursion von Tomcat, die vermutlich von der Root-Servlet-Mapping '/' stammt. –

Antwort

0

Die Federbeispielanwendung: petcare hat die in einer ruhigen Art und Weise definiert Verknüpfungen. Sie können herunterladen diese aus: https://src.springframework.org/svn/spring-samples/ Die Schritte sind: 1.Definieren die Fliesen Konfiguration Bohne (XML-Konfigurationsdatei)

<!-- Initializes the Apache Tiles CompositeView system --> 
    <beans:bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
     <beans:property name="definitions"> 
      <beans:value> 
       /WEB-INF/**/tiles.xml 
      </beans:value> 
     </beans:property> 
     <beans:property name="checkRefresh" value="true" /> 
    </beans:bean> 
  1. definieren die Fliesen Klasse Resolver in UrlBasedViewResolver

    value = "org.springframework.web.servlet.view.tiles2 verschachtelt anzuzeigen. TilesView“/>

  2. definieren Sie die tiles.xml Definitionsdateien für jedes Layout/Seite usw.

1
<bean id="tilesviewResolver" class="org.springframework.web.servlet.view.tiles2.TilesViewResolver" 
      p:order="0"/> 

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
     <property name="definitions"> 
      <list> 
       <value>/WEB-INF/tiles-defs/tilesConfig.xml</value> 
      </list> 
     </property> 
</bean> 

Siehe TilesViewResolver

Verwandte Themen