Spring DispacherServlet должен разрешить правильную карту URL - PullRequest
0 голосов
/ 16 июля 2010

В моем проекте Tomcat-Spring-Java я хочу иметь следующие URL-адреса

/ index - для отображения страницы ввода/ Логин - Страница входа

/ автомобили / - список доступных автомобилей/ cars / {id} - показать конкретную машину/ cars / {id} / action - выполнить действие на этом конкретном автомобиле

/ people / - список доступных людей/ people / {id} - показать конкретного человека/ people / {id} / action - выполнить действие с этим конкретным человеком

У меня есть моя карта диспетчера-сервлета, подобная этой, в web.xml .

    <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 говорит, что ищет обработчик для [1 / action] и, конечно, это не так.искать, но с людьми / впереди, чтобы отделить идентификатор народа от идентификатора машины.

Как будто '*' будет единственным введенным URL-адресом.

Кстати, если я хочу сохранить расширение моего URL-адреса меньше, я знаю, что для сопоставления диспетчера с * .htm наФайл web.xml, позаботился бы о проблеме.Но это должен быть способ отобразить диспетчер или заставить диспетчера искать полное определение URL.

1 Ответ

1 голос
/ 16 июля 2010

Вы можете установить свойство alwaysUseFullPath:

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

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

    ...
</bean>

В качестве альтернативы, вы можете установить один <url-pattern> для сервлета диспетчера.Поскольку он не может быть /*, вам необходимо использовать UrlRewriteFilter .

...