Meine Controller sind derzeit so etwas wie http://example.com/fix.go zugeordnet, und natürlich denke ich, das ist idiotisch und will etwas Schöneres wie http://example.com/fix oder http://example.com/mmm/fix ohne Erweiterung. Wenn ich versuche, dies zu konfigurieren, kann ich es jedoch nicht zum Laufen bringen. Mir fehlt eindeutig ein Schlüssel zum Verständnis des gesamten Mappings. Ich verwende Spring 3.x, Tomcat und Anmerkungen für die Controller.Wie konfiguriere ich Spring Controller URLs, um keine Erweiterung zu haben?
Mein web.xml ist wie folgt:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>BooBoo</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>BooBoo</servlet-name>
<url-pattern>*.*</url-pattern> <!-- was *.go when it worked -->
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
BooBoo-servlet.xml ist:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.foofoo.booboo"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
Und einer meiner Controller als solche konfiguriert:
@Controller
public class BangBangController extends BaseController {
// Used to be fix.go when it worked
@RequestMapping(value="fix", method=RequestMethod.GET)
public ModelAndView choose(
HttpSession session,
@RequestParam(value="fixId", required=false, defaultValue="-1") Integer fixId,
@RequestParam(value="forkId", required=false, defaultValue="-1") Integer forkId
)
throws Exception { ... }
}
Ich habe versucht, das Mapping in web.xml zu/mmm/* zu ändern, das erwartet, dass URLs wie http://example.com/mmm/fix funktionieren, aber das hat auch nicht funktioniert ed. Ich bekomme "fehlende Ressourcen" -Fehler, wenn ich die richtigen URLs im Browser eintrage.
Was vermassele ich hier? Welches kritische Verständnis fehlt mir? Ich habe versucht, die No-Extension-Sache an einem anderen Projekt bei der Arbeit arbeiten zu lassen und konnte es auch nicht dorthin bringen. Mir fehlt offensichtlich etwas.
+1 für die Erklärung, warum/** ist keine gute Idee, ich habe auch nie das gesehen ** vor oder dokumentiert. Dies ist, wie ich dachte, es sollte mehr oder weniger funktionieren, aber leider funktioniert das nicht für mich: "Die angeforderte Ressource (/ booboo/webapp/fix) ist nicht verfügbar." – Marvo
Ich wünschte, es gäbe einen Weg, auf dem ich die Entscheidungen des Dispatchers durchgehen könnte, wenn er entscheidet, welchen Controller er aufrufen wird (oder nicht aufrufen). Ich meine, kurz davor, Spring selbst zu bauen. – Marvo
@Marvo Ich entschuldige mich, ich lag falsch mit der Syntax. Ich arbeitete aus dem Gedächtnis und ich verwechselte es mit einem anderen Mustervergleicher. Die obigen Änderungen sollten funktionieren. –