URL-шаблон не работает в приложении Spring MVC

Я сделал базовое приложение на платформе Spring MVC.

когда я пишу следующий шаблон URL-адреса в web.xml:

<servlet-mapping>
        <servlet-name>springxml</servlet-name>
        <url-pattern>*.jsp</url-pattern>
  </servlet-mapping>

и запускает приложение (используя ../SpringMVCXML/welcome.jsp), оно отображает ошибку HTTP Status 404.

Когда я меняю шаблон URL, отличный от .jsp, приложение работает нормально.

Почему приложение не работает с шаблоном URL .jsp?

Я использовал следующий класс java в качестве контроллера.

@Controller
@RequestMapping(value="/welcome",method=RequestMethod.GET)
public class ControllerHello {
    @RequestMapping(method=RequestMethod.GET)
    public String printHello(ModelMap map) {
        map.addAttribute("message", "Hello Spring MVC Framework");
        return "hello";
    }
}

Кроме того, мой springxml-servlet.xml имел следующий код:

<bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

person spring pro    schedule 22.02.2013    source источник


Ответы (2)


Предполагая, что у вас также есть сервлет springxml, который также обслуживает другие представления, кроме *.jsp (у вас могут быть другие сопоставления сервлетов в вашем web.xml), ситуация выглядит следующим образом:

Вы зарегистрировали контроллер для пути /welcome, а не для /welcome.jsp. Поэтому /welcome.jsp не сопоставляется с контроллером Spring mvc. /welcome HelloController выдаст вам приветствие в виде строки.

/welcome.jsp выдаст ошибку 404, так как он находится в WEB-INF и для этого URL-адреса нет контроллера Spring MVC.

org.springframework.web.servlet.view.InternalResourceViewResolver предназначен для размещения ваших файлов jsp внутри /WEB-INF. Посмотрите http://www.mkyong.com/spring-mvc/spring-mvc-internalresourceviewresolver-example/ для простого объяснения того, что делает InternalResourceResolver. По сути, это позволяет Spring MVC использовать jsp, которого нет в ваших общедоступных ресурсах, в качестве представления. Это не механизм для регистрации этих jsps как действительных URL-адресов.

URL-адреса определяются в requestmappings.

person Hugo    schedule 22.02.2013

у вас, вероятно, нет сопоставления контроллера Spring с этим URL-адресом /welcome.jsp. Какую версию Spring вы используете? если вы используете Spring 2.5 или выше, попробуйте следующий код

@RequestMapping(value = "welcome.jsp")
public String welcomeJSP(){
    return "welcome";
}
person spiritwalker    schedule 22.02.2013