0

下面是我對新的Spring 3基於註解的控制器設置:豆被初始化爲@Controller但@RequestMapping不會被調用

//調度-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> 

//彈簧控制器

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這樣註冊:

<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,說明該豆通過ControllerClassNamehandlerMapping已經登記在/logingoogle。我在Google App Engine上使用Spring 3.0.2。

會感謝一些幫助。

+0

你想達到什麼目的? – axtavt 2011-04-04 10:14:03

+0

我正在創建一個簡單的身份驗證,以允許用戶通過openid登錄。在控制器中,我只是測試以查看控制器是否準備好開始提供請求,然後我可以開始添加必要的代碼。 – drecute 2011-04-04 10:19:38

回答

1

我能夠解決這個問題,我從應用程序上下文文件中刪除了ControllerClassNameHandlerMappingSimpleUrlHandlerMapping豆。

關於你們的問候

0

該錯誤告訴你,你的applicationContext中不需要<bean id="GoogleLoginService" class="org.opevel.web.LoginGoogleController" />。你也不需要<bean id="urlMapping">

@Controller爲你創建一個bean,@RequestMapping創建URL映射。

+0

是的,我知道。我只是測試看看會發生什麼,如果我添加以及@Controller。問題是,在排除bean的情況下,我仍然在404上進行/ auth驗證。 – drecute 2011-04-04 14:13:53

+0

你是否也需要'SimpleControllerHandlerAdapter' bean?這可能是相互矛盾的。 – sourcedelica 2011-04-04 14:17:39

+0

我已經刪除了'SimpleControllerHandlerAdapter' bean。不解決問題。 – drecute 2011-04-04 18:52:08

相關問題