2017-02-20 38 views
0

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

@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> 
+0

Понял, что вам нужно. Но неясно, какова ваша ошибка и что вы сделали. Почему ссылка имеет .html? Поскольку это Spring MVC, это должно быть 'http: // localhost: 8083/releaseDashboard/project/CSOB'. –

+0

web.xml настроен так. Это не проблема.если я удалю этот html из web.xml, мой url будет таким же, как вы упомянули в своих комментариях. – sreehari

+0

Пожалуйста, отредактируйте свой вопрос в конфигурационных файлах - web.xml, файле конфигурации пружины и т. Д. Как вы настроили средство просмотра вида? –

ответ

-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. Весь ресурс ограничен VIEW, используя средство просмотра. Вот как это должно быть реализовано. Это потому, что это «MVC» и «разрешение на просмотр».

Примечание:

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

+0

Спасибо за ваш ответ. Поэтому, если я перейду к этому URL-адресу http: // localhost: 8083/releaseDashboard/project/CSOB, он покажет содержимое hello.jsp. Хорошо. Но из этого URL-адреса, когда я нажимаю на свой дом, он показывает URL-адрес как http: // localhost: 8083/releaseDashboard/project/home и сопоставляется с тем же методом контроллера, что и сопоставление его с методом контроллера с помощью @RequestMapping (значение = {"home"}) – sreehari

+0

"Когда я нажимаю на свой дом". Измените URL на этой кнопке. Очевидно, вы используете относительный URL. Сделать это правильно. См. Это. http://stackoverflow.com/questions/5559578/having-links-relative-to-root –

+0

В настоящее время мое действие на домашней кнопке является «домашним». Тогда какой должен быть мой url? – sreehari