Ниже приведены настройки для нового контроллера на основе аннотаций Spring 3:
// dispatcher-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:security="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> <!-- The index controller. --> <bean name="indexController" class="org.springframework.web.servlet.mvc.ParameterizableViewController" p:viewName="index" /> <!-- Enables plain controllers --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="order" value="1" /> <property name="ignoreAcceptHeader" value="true" /> <property name="mediaTypes"> <map> <entry key="xml" value="application/xml" /> <entry key="json" value="application/json" /> </map> </property> </bean> <!-- Entity Property binding for webBindingInitializer --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="webBindingInitializer"> <bean class="org.opevel.web.BindingInitializer" /> </property> </bean> <context:component-scan base-package="org.opevel.web"/> </beans>
// web.xml
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.htm</url-pattern> <url-pattern>/auth</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> </web-app>
// Контроллер Spring
package org.opevel.web; @Controller public class LoginGoogleController { private static final Logger log = Logger.getLogger(LoginGoogleController.class.getName()); public LoginGoogleController() { log.info("constructing LoginGoogleController"); } @RequestMapping(value="/auth", method=RequestMethod.GET) public String doGet(HttpServletRequest request, HttpServletResponse response) throws Exception { return "redirect:index"; } }
Когда я перехожу к / auth, я получаю 404. Когда я пытаюсь зарегистрировать бин в applicationContext следующим образом:
applicationContext
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/auth">GoogleLoginService</prop> </props> </property> <bean id="GoogleLoginService" class="org.opevel.web.LoginGoogleController" />
Я получаю BeanException о том, что бин уже зарегистрирован с /logingoogle по ControllerClassNamehandlerMapping.Я использую Spring 3.0.2 в Google App Engine.
BeanException
/logingoogle
ControllerClassNamehandlerMapping
Буду признателен за помощь.
Мне удалось это исправить, удалив бины ControllerClassNameHandlerMapping и SimpleUrlHandlerMapping из файла контекста приложения.
ControllerClassNameHandlerMapping
SimpleUrlHandlerMapping
С уважением, все
Эта ошибка говорит вам о том, что вам не нужно <bean id="GoogleLoginService" class="org.opevel.web.LoginGoogleController" /> в вашем applicationContext.Также вам не нужно <bean id="urlMapping">
<bean id="GoogleLoginService" class="org.opevel.web.LoginGoogleController" />
<bean id="urlMapping">
@ Контроллер создает для вас bean-компонент, а @RequestMapping создает сопоставление URL.