5

这是我认为应该很容易的事情,但到目前为止我还没有让它发挥作用。

我想要做的是将我的根路径映射到 Spring MVC 控制器。使用 normalServlet时,我只需/在 my 中为 ""添加一个映射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,我似乎缺少一些特殊的黑魔法来让它工作。

4

3 回答 3

2

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

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

因此,您的/路径将被处理/welcome.htm,然后如果您的控制器正确映射到/welcome.htm它,它将像处理/请求一样处理/welcome.htm,而不会更改其他配置。

于 2012-08-31T11:17:58.277 回答
1

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

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

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

否则,您可能可以像这样使用 SimpleUrlHandlerMapping 映射 URL:

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

如果这样做,您可以保留为 rootController 定义的 bean。

于 2012-08-30T17:36:00.830 回答
0

对于 Spring Webflow,Boris Treukhov 建议使用 web-file-list 导致我发现了一个适用于 weblogic 的 hack。例如,如果welcome 是一个flow.xml 文件,请执行以下操作: 将web.xml 中的url 模式从\ 更改为*.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

于 2014-07-01T17:57:24.303 回答