Как изменить запрошенный URL-адрес весной mvc, прежде чем идти к контроллеру

Я занимаюсь разработкой веб-приложения с использованием Spring mvc. У меня есть страница, которая отображает все проекты в БД. Если я нажму на любой из перечисленных проектов, он покажет некоторые другие дополнительные детали этого конкретного проекта. Это делается с помощью @PathVariable.

@RequestMapping(value={"/project/{name}"})
public String viewProject(HttpServletRequest request,@PathVariable("name")     
String projectName, ModelMap model){
     .......
     .......

 }

Выше мой код отображения запроса. Мой URL будет http://localhost:8083/releaseDashboard/project/CSOB.html (csob - это имя моего проекта, а releaseDashboard - имя моего приложения). До этого мое приложение работает нормально. Когда я нажимаю на кнопку домой с этой страницы, мой запрос сопоставляется с вышеуказанным методом контроллера, и мой URL становится localhost:8083/releaseDashboard/project/home.html. Но ожидаемый URL - это localhost:8083/releaseDashboard/home.html

Кто-нибудь может мне помочь, пожалуйста! Я прочитал, что мы можем использовать Interceptor или Filters, чтобы изменить запрошенный URL. Но я не смог увидеть фрагмент кода для этого.

ОБНОВИТЬ

web.xml

<servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

весна-servlet.xml

<context:component-scan base-package="com.suntec.reldashboard.controller" />
    <context:component-scan base-package="com.suntec.reldashboard.service" />
    <context:component-scan base-package="com.suntec.reldashboard.dao" />   
    <mvc:annotation-driven/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="prefix" value="/WEB-INF/jsp/" />  
        <property name="suffix" value=".jsp" />  
    </bean>

1 ответ

Решение

Ваш конфиг в web.xml в контексте Spring MVC неверно. Редактировать как <url-pattern>/</url-pattern>, При этом все запросы к вашему проекту будут проходить через "сервлет-диспетчер".

(Вы также можете использовать как это <url-pattern>something-here</url-pattern>, Тогда ваш базовый URL должен иметь дополнительное "что-то здесь").

Теперь вы можете получить доступ к ресурсу,

@RequestMapping(value={"/project/{name}"})
public String viewProject(HttpServletRequest request,@PathVariable("name")     
String projectName, ModelMap model){
     .......
     .......
    return "hello";
}

по URL http://localhost:8083/releaseDashboard/project/CSOB, затем projectName будет CSOB.

У вас должен быть файл 'jsp' в /WEB-INF/jsp/ имея имя hello.jsp, В этом файле JSP вы можете получить доступ model ценности.

Вы не должны использовать .html/.jsp в URL, при использовании Spring MVC. Весь ресурс привязан к ПРОСМОТРУ, используя распознаватель представления. Вот как это должно быть реализовано. Это для 'MVC' и 'разрешения изображения'.

НОТА:

Согласно вашей текущей конфигурации, "вы должны изменить запрошенный URL". НЕТ, ты не можешь. Тогда ваш URL может быть http://localhost:8083/releaseDashboard/project/CSOB.html; а также projectName это "CSOB.html". Тогда вы должны использовать Java substring функция для извлечения "CSOB" из "CSOB.html". И это безобразная штука!

Другие вопросы по тегам