0

我有一堂课

@Controller
@RequestMapping("/auth")
public class LoginController {


 @RequestMapping(value = "/login", method = RequestMethod.GET)
 public String getLoginPage(@RequestParam(value="error", required=false) boolean error, 
   ModelMap model) {

}

}

web.xml

<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
                classpath:META-INF/spring-servlet.xml
        </param-value>
    </init-param>
<load-on-startup>1</load-on-startup>
</servlet>

应用上下文.xml

<mvc:annotation-driven/>

<context:component-scan base-package="mysrc.src"/>

春天servlet.xml

<context:component-scan base-package="mysrc.src"/>

           <mvc:annotation-driven/>

我收到一个错误,例如“在调度员等等中找不到映射”

但现在我在控制台上看不到异常。

我只看到404

http://localhost:9090/app/auth/login

我在调试模式下将断点放在 getLoginPage 方法中,但没有流程。

除了建议之外,我想问我如何确定 abour Spring 已经扫描了我的 @RequestMapping 类?搜索启动控制台可能吗?

4

2 回答 2

3

通常,当您从 Spring 收到没有错误消息的 404 时,这通常意味着您的应用程序部署在与您预期不同的上下文中。例如,您的代码示例表明您正在将您的 webapp 部署到 /,您确定这是部署它的位置吗?你用的是tomcat吗?如果是这样,你的 webapp 应该被命名为 ROOT.war。您能否提供更多详细信息,例如您在哪里/如何部署您的 webapp,也许还有 web.xml?

就您的映射而言,Spring 将在 INFO 日志级别记录它扫描的控制器及其请求路径。如果调度程序 servlet 无法将您的请求与控制器匹配,它将始终给您一条错误消息,因此没有错误消息向我表明您的请求没有通过调度程序 servlet。

于 2012-08-17T18:32:08.793 回答
1

您的请求映射看起来正确。

您可以为您的控制器创建一个构造函数,并在那里放置一个日志语句或一个断点,以查看控制器是否由 spring 创建。

请注意,您的组件扫描还将初始化控制器两次(一次用于 appcontext.xml,一次用于 servlet.xml)。您应该添加过滤器以确保仅从 servlet.xml 创建控制器:

appcontext.xml(除控制器之外的所有内容):

<context:component-scan base-package="x.y.z">
  <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation" />
</context:component-scan>

servlet.xml(仅限控制器):

<context:component-scan base-package="x.y.z" use-default-filters="false">
  <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
</context:component-scan>

而且只是为了确定:base-package属性component-scan必须是一个有效的java包,而不是你的src目录的路径(mysrc.src看起来有点像你的src文件夹;-))

于 2012-08-17T17:25:41.720 回答