Как изменить запрошенный 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". И это безобразная штука!