Wie verwenden von Standard-servlet-handler
Möchte ich konfigurieren, Spring MVC zu dienen dynamische Dateien, gemischt mit statischen Dateien, wie hier (URL => Datei):
/iAmDynamic.html => /WEB-INF/views/iAmDynamic.html.ftl
/iAmAlsoDynamic.js => /WEB-INF/views/iAmAlsoDynamic.js.ftl
/iAmStatiHtml => /iAmStatic.html
Den DispatchServlet
zugeordnet ist /
, annotation-basierten MVC-Konfiguration aktiviert ist und ich habe einen view-controller wie folgt aus (Vereinfacht):
@Controller
public class ViewController
{
@RequestMapping("*.html")
public String handleHtml(final HttpServletRequest request)
{
return request.getServletPath();
}
@RequestMapping("*.js")
public String handleJavaScript(final HttpServletRequest request)
{
return request.getServletPath();
}
}
Frühjahr config sieht wie folgt aus:
<context:component-scan base-package="myPackage" />
<mvc:default-servlet-handler />
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/views/" />
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true" />
<property name="prefix" value="" />
<property name="suffix" value=".ftl" />
</bean>
Leider funktioniert es nicht. Wenn diese <mvc:default-servlet-handler />
aktiv ist, dann kann ich nur Zugriff auf die iAmStatic.html
- Datei. Wenn ich deaktivieren Sie die default-servlet-handler dann nur das dynamische Zeug funktioniert. Aber ich will beide auf einmal und das ist genau das, was das default-servlet-handler tun soll, oder nicht? Wo ist der Fehler hier?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte ähnliches problem, keine der Anfragen wurden immer zugeordnet die Frühjahr-Controller:
Ich entdeckte, dass ich fehlte, diese im Frühjahr config xml:
Scheint es mit , dies ist notwendig. Von der Dokumentation, den Zweck, dies zu tun ist:
Will ich auch mal DefaultServlet Griff statische Inhalte-Anforderungen.
Also spring-config sollte so Aussehen:
Hoffe, das hilft!
Müssen Sie definieren zwei wichtige Konfigurationen
<mvc:annotation-driven/>
können Sie mit Ihrem Standard-Infrastruktur Bohnen, wo als<mvc:default-servlet-handler />
konfigurieren Sie einen handler für die statischen Ressourcen durch Weiterleitung an die Servlet-Containers Standard-Servlet.Vergessen Sie auch nicht die mvc-name-space ich.e
xmlns:mvc="http://www.springframework.org/schema/mvc"
Meine komplette config-Datei (mit TilesViewResolver) sieht wie folgt aus
Auch wenn Sie mehrere
HandlerMapping
unter Berücksichtigung der Bestellung von Ihnen. Für die einen, für die Sie nicht sorgen um explizit Frühjahr behandelt es mit der niedrigsten Priorität.Ich denke, dass der name der Sicht, das Sie wieder aus der
ViewController
ist ungültig. Ich erwarte, dassrequest.getServletPath()
gibt eine leere Zeichenfolge für alle URLs, weil Sie den Pfad zu Ihrem servlet ist wahrscheinlich/
- und der Java-Dokumentation sagt, dassgetServletPath()
gibt eine leere Zeichenfolge für diesen Weg. Daher die FreeMarker view-resolver ist wahrscheinlich ignorieren den Namen der Ansicht an, denn Sie würden nicht wissen, was Sie zeigen.Jedoch mit einer controller-Klasse mit
@RequestMapping
ist wahrscheinlich nicht der ideale Weg zu gehen über diese Aufgabe sowieso. Spring enthält einen ContentNegotiatingViewResolver, die bestimmt automatisch die korrekte Ansicht je nach content-type. Diese übersicht ContentNegotiatingViewResolver erklärt, wie es einzurichten.