0

在我的 Tomcat-Spring-Java 项目中,我想要以下 URL

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

/cars/ - 列出可用的汽车
/cars/{id} - 显示特定的汽车
/cars/{id}/action - 对这辆特定的汽车执行操作

/people/ - 列出可用的人
/people/{id} - 显示特定的人
/people/{id}/action - 对这个特定的人执行操作

我在web.xml中有这样的调度程序-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/ 分开人民身份证到汽车身份证。

就像“*”将是唯一输入的 URL。

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

4

1 回答 1

1

您可以设置一个alwaysUseFullPath属性:

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

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

    ...
</bean>

或者,您可以为调度程序 servlet 设置一个<url-pattern>。既然不能/*,就需要使用 UrlRewriteFilter

于 2010-07-16T00:00:38.900 回答