Он почти настроен правильно, так что пока хорошо сделано :-) Здесь есть пара небольших проблем, которые вызывают проблемы, которые вы видите. Во-первых, bean-компонент в настоящее время определяется строчными буквами m
:
<bean name="/index.html" class="mypackage.web.myController"/>
Хотя это разрешено, это не принято, поэтому Spring не сможет найти правильный компонент без какой-либо дополнительной настройки.
Также из вопроса неясно, какой URL вы используете, но это должно быть что-то вроде http://localhost:8080/<project>/myIndex.html
Здесь вы найдете краткое изложение конвенции здесь .
Итак, у нас есть 2 варианта & hellip; либо переименуйте класс в MyController
и сохраните как MyController.java
, либо измените bean-компонент ControllerClassNameHandlerMapping
так, чтобы он учитывал регистр, например:
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="caseSensitive" value="true" />
</bean>
Кроме того, это не является причиной проблемы, но если вы используете ControllerClassNameHandlerMapping
, вы можете опустить имя компонента, поэтому вы можете просто использовать:
<bean class="mypackage.web.MyController"/>
Полагаю, самая раздражающая часть - это то, что веб-приложение разворачивается без ошибок. Однако, если вы изучите журнал, есть заметная разница:
Развертывание неправильно настроенного веб-приложения:
04-Jul-2011 09:13:58 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@5f0e7d: defining beans []; root of factory hierarchy
04-Jul-2011 09:13:58 org.springframework.web.servlet.FrameworkServlet initServletBean
INFO: FrameworkServlet 'my': initialization completed in 157 ms
Развертывание правильно настроенного веб-приложения:
04-Jul-2011 09:15:33 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@de537: defining beans [org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping#0,viewResolver,mypackage.web.MyController#0]; root of factory hierarchy
04-Jul-2011 09:15:49 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/my*] onto handler 'mypackage.web.MyController#0'
04-Jul-2011 09:15:49 org.springframework.web.servlet.FrameworkServlet initServletBean
INFO: FrameworkServlet 'my': initialization completed in 296 ms
Во-вторых, как только сопоставление установлено, вы можете обнаружить, что JSP не найден. В образце, который я создал, я добавил представления в /WEB-INF/jsp
, поэтому мне нужно было обновить свойство prefix в my-servlet.xml
до <property name="prefix" value="/WEB-INF/jsp/"/>
. Однако в зависимости от местоположения ваших представлений вам может не потребоваться это сделать.
Лично я нахожу основанный на аннотациях подход для MVC в Spring гораздо проще в настройке и следовании, поэтому я рекомендую вам прочитать REST в Spring 3: @ MVC , поскольку вам может показаться, что это проще реализовать.