让Spring DispacherServlet解析正确的URLmap

时间:2010-07-15 23:37:52

标签: java tomcat rest spring-mvc url-mapping

在我的Tomcat-Spring-Java项目中,我希望拥有以下URL

/ index - 显示输入页面
/ login - 登录页面

/ cars / - 列出可用的车辆
/ cars / {id} - 显示特定车辆 / cars / {id} / action - 对此特定车辆采取行动

/ people / - 列出可用的人员 / people / {id} - 显示特定的人 / people / {id} / action - 对此特定人员采取行动

我已经在 web.xml 中获得了这样的dispacher-servlet映射。

    <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/login</url-pattern>
    <url-pattern>/logout</url-pattern>
    <url-pattern>/index</url-pattern>
    <url-pattern>/cars/*</url-pattern>
    <url-pattern>/people/*</url-pattern>
</servlet-mapping>

我的 dispatcher-servlet.xml 映射如下:

        <bean id="urlMap"
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="urlMap">
        <props>
            <prop key="/login">loginController</prop>
            <prop key="/logout">logoutController</prop>
            <prop key="/index">welcomeController</prop>
            <prop key="/cars">listCarsController</prop>
            <prop key="/cars/">listCarsController</prop>
            <prop key="/cars/*">showCarController</prop>
            <prop key="/cars/*/action">actionCarController</prop>
            <prop key="/people">listPeopleController</prop>
            <prop key="/people/">listPeopleController</prop>
            <prop key="/people/*">showPersonController</prop>
            <prop key="/people/*/action">actionPersonController</prop>
        </props>
    </property>
</bean>

这没有按预期工作,因为当我访问例如/ people / 1 / action时,Dispacher servlet servlet说为[1 / action]寻找处理程序,当然它不是搜索,而是与people / in前面将人们的身份与汽车身份分开。

就像'*'将是唯一输入的网址。

顺便说一下,我想保持URL的扩展名更少,我知道要将调度程序映射到web.xml文件上的* .htm,可能会解决问题。
但是它必须是一种映射调度或使调度程序搜索完整URL定义的方法。

1 个答案:

答案 0 :(得分:1)

您可以设置alwaysUseFullPath属性:

<bean id="urlMap" 
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 

    <property name = "alwaysUseFullPath" value = "true" />

    ...
</bean>

或者,您可以为调度程序servlet设置单个<url-pattern>。由于它不能是/*,因此您需要use UrlRewriteFilter