Spring MVC中的Map /(根URL)

时间:2012-08-30 17:27:31

标签: java spring spring-mvc mapping url-routing

我认为这应该是非常简单的,但到目前为止我还没有能够让它发挥作用。

我想要做的是将我的根路径映射到Spring MVC Controller。使用正常的Servlet,我只需在我的/中添加“web.xml”的映射,它就可以很好地提取它。但是使用Spring MVC,不是那么多。

我尝试了很多种组合,但似乎都没有。我认为以下一个应该有用。

web.xml

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

在我的contextConfigLocation文件中:

<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">

然后显然,控制器本身就是这种情况。我不知道如何将方法映射到实际的根路径。我的尝试是这样的:

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);
    }
}

因此,假设我的应用程序在http://localhost:8080/app/上运行,我希望确切的URL执行方法display。我不想在/app/之后输入任何内容。实际上,/app/之后的一些东西被映射到其他控制器,并且一切正常(并且它们必须继续工作)。

我在这里缺少什么?为什么这不仅仅是工作?如果我使用相同的url-pattern映射到普通Servlet实例,它可以正常工作并且我到达doGet方法,但是使用Spring MVC我似乎错过了一些特殊的黑魔法来获取这个工作。

3 个答案:

答案 0 :(得分:2)

您可以在/文件中声明欢迎页面,而不是映射到web.xml

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

因此,您的/路径将被处理为/welcome.htm,然后如果您的控制器已正确映射到/welcome.htm,它将处理/,就好像它是{{1}请求,而不更改其他配置。

答案 1 :(得分:1)

我建议摆脱SimpleUrlHandlerMapping并执行以下操作:

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

这应该得到你想要的结果。另外,使用<mvc:annotation-driven/><context:component-scan base-package="some.package.path.to.controller" />添加到servlet上下文中,以使Spring连接该控制器。

否则,您可以使用SimpleUrlHandlerMapping映射URL,如下所示:

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

如果以这种方式完成,您可以保留为rootController定义的bean。

答案 2 :(得分:0)

对于Spring Webflow,Boris Treukhov建议使用web-file-list导致我发现了一个适用于weblogic的黑客攻击。例如,如果welcome是flow.xml文件,请执行以下操作:在web.xml中将url-pattern从\更改为* .html。将虚拟(空)文件welcome.htm放入文件夹src \ main \ webapp \ WEB-INF。在SimpleUrlHandlerMapping中映射值/welcome.htm=flowController。最后,完成注册表,flow-location path =“welcome.xml”。请参阅链接:http://forum.spring.io/forum/spring-projects/web/50547-welcome-file-list-with-spring