Esto es algo que creo que debe ser muy fácil, pero hasta ahora no he sido capaz de llegar al trabajo.

Lo que quiero hacer es el mapa de mi ruta de acceso raíz a un Resorte de Controlador MVC. Con una normal Servlet, sólo quiero agregar una asignación para «/» en mi web.xml, y que iba a recogerlo bastante bien. Pero con Spring MVC, no tanto.

He probado muchas combinaciones, pero ninguno parece funcionar. Creo que el siguiente debería funcionar.

En web.xml:

<servlet-mapping>
    <servlet-name>myDispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

En mi contextConfigLocation de archivo:

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="alwaysUseFullPath" value="true"/>
    <property name="mappings">
        <util:map>
            <entry key="/" value-ref="rootController"/>
        </util:map>
    </property>
</bean>

<bean id="rootController" class="my.package.RootController">

Entonces, evidentemente, no es el caso del controlador de sí mismo. No tengo ni idea de cómo asignar el método de la raíz real de la ruta. Mi intento es algo como esto:

public class RootController extends MultiActionController {

    @RequestMapping("/")
    public ModelAndView display(HttpServletRequest request, HttpServletResponse response) throws Exception {

        final Map<String, Object> model = new HashMap<String, Object>();
        model.put("someVariable", "Hello, MVC world.");
        return new ModelAndView("rootPage", model);
    }
}

Así que digamos que mi aplicación se ejecuta en http://localhost:8080/app/, quiero que la URL exacta para ejecutar el método display. No quiero escribir nada después de /app/. De hecho, algunas de las cosas después de /app/ se asignan a otros controladores, y que todo funciona bien (y tienen que seguir trabajando).

Lo que me estoy perdiendo aquí? ¿Por qué no es simplemente trabajar? Si puedo usar el mismo url-pattern para asignar a una llanura Servlet ejemplo, funciona muy bien y llego a la doGet método, pero con Spring MVC me parece que faltan algunos en particular de la magia negra para conseguir que esto funcione.

InformationsquelleAutor pbean | 2012-08-30

3 Comentarios

  1. 2

    Lugar de la asignación a / puede declarar una página de bienvenida en su web.xml de archivo:

    <welcome-file-list>
        <welcome-file>welcome.htm</welcome-file>
    </welcome-file-list>

    por lo que su / ruta será procesado como /welcome.htm y, a continuación, si su controlador está correctamente asignado a /welcome.htm procesará /, como si de un /welcome.htm solicitud, sin hacer cambios a la configuración.

  2. 1

    Me gustaría recomendar deshacerse de la SimpleUrlHandlerMapping y solo haciendo lo siguiente:

    @Controller
    @RequestMapping("/")
    public class RootController
    {
      @RequestMapping(method=RequestMethod.GET)
      public ModelAndView display(...)
      {
        ...
      }
    }

    Este debe obtener el resultado que usted desea. También, agregar <mvc:annotation-driven/> a su contexto de servlet con un <context:component-scan base-package="some.package.path.to.controller" /> tener alambre de Resorte hasta que el controlador.

    De lo contrario, usted probablemente puede asignar la URL con el SimpleUrlHandlerMapping así como:

    <property name="mappings">
        <value>
            /*=rootController
        </value>
    <property>

    Si se hace de esta manera, usted puede mantener el grano definido para rootController.

    • Gracias por la respuesta. Supongo que iba a funcionar, pero por desgracia no es tan fácil como eso. Además de este «RootController«, tenemos algunas otras Controllers que se establecen a través de este SimpleUrlHandlerMapping. O que, a continuación, sugieren tener un DispatcherServlet sólo para este RootController?
    • bien, a continuación, mantener la asignación de url, pero quitar la entrada para «/»
    • Así que quieres decir, mantener la SimpleUrlHandlerMapping, pero sin la entrada para «/«, así como añadir la <mvc:annotation-driver/> y <context:component-scan...?
    • Sí, me gustaría empezar tratando de hacer el movimiento a las anotaciones, hace las cosas más fácil y mantiene su XML limpiador.
    • Parece trabajo para este RootController, y funciona muy bien con mi Resteasy servlet, pero sí a romper todos mis otros Spring Controllers. Voy a dejar esto abierto por un tiempo para ver si puedo obtener otras respuestas, específicamente apoyando a mi (aunque legado) de configuración XML. De lo contrario, voy a marcar su respuesta aceptada y tratar de pasar gradualmente de este proyecto a una anotación de un enfoque basado.
    • Actualizado mi respuesta para ayudar con la configuración original

  3. 0

    Para Spring Webflow, de la sugerencia de Boris Treukhov para uso en la web del archivo de la lista me llevó a descubrir un hack que trabajó para weblogic. Por ejemplo, si la acogida es una flow.xml archivo, haga lo siguiente: Cambiar la dirección url-pattern de \ a *.html en web.xml. Colocar un maniquí(vacío) archivo welcome.htm en la carpeta src\main\webapp\WEB-INF. En SimpleUrlHandlerMapping asignar el valor del /de la recepción.htm=flowController. Por último, completar el registro, flujo-location path=»welcome.xml». Consulte el enlace: http://forum.spring.io/forum/spring-projects/web/50547-welcome-file-list-with-spring.

Dejar respuesta

Please enter your comment!
Please enter your name here