2013-05-05 3 views
2

Мое приложение использует Spring MVC (последняя версия 3.2.2) для создания RESTful API, возвращающего JSON, и до сих пор мне не нужен слой представления вообще. Но теперь, помимо API, мне нужна простая страница утилиты (простой динамический HTML) и вы хотите использовать JSP для этого.Как получить тривиальный случай Spring MVC view (JSP), разрешающий работать?

Я хочу, чтобы запросы http://localhost:8080/foo/<id> проходили через контроллер (Java) и заканчивались в JSP. Должно быть просто, не так ли? Но я получаю 404; что-то не так в разрешении взгляда.

HTTP ERROR 404 
Problem accessing /jsp/foo.jsp. Reason: 

    Not Found 

Контроллер:

@RequestMapping(value = "/foo/{id}") 
public String testing(@PathVariable String id, ModelMap model) { 
    model.addAttribute("id", id); 
    return "foo"; 
} 

Определение контроллеров и запросов отображения работ; этот метод называется просто прекрасным.

Spring конфигурации:

<mvc:annotation-driven/> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
      p:prefix="/jsp/" p:suffix=".jsp"/> 

Проблема, вероятно, здесь. Я экспериментировал с немного разными префиксами и ставил JSP под WEB-INF, а также такие вещи, как <mvc:view-controller path="/*" />, но пока не повезло.

(Должен ли я даже нужно указать InternalResourceViewResolver или должен по умолчанию вид резольверы об этом позаботиться?)

JSP файлы. Под src/main/webapp/jsp (проект использует соглашения Maven) У меня, очевидно, есть JSP.

Есть ли что-то не так с этим местом?

web.xml:

<servlet> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

Я просмотрел Spring MVC documentation, но моя проблема, вероятно, слишком тривиально и очевидно, легко найти там помощь. :-P

Может ли кто-нибудь просветить меня о том, что я делаю неправильно?

ответ

6

Я думаю, что вам нужно сделать, это изменение

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

в

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

/* не будет совпадать, если есть еще одна папка в пути, как /jsp/foo.jsp. С другой стороны, / будет соответствовать всем.