永远不会调用Spring控制器

时间:2012-07-26 22:00:54

标签: java spring spring-mvc

我在Spring中创建了简单的hello world应用程序,它工作得很好然后我在另一个项目中复制了相同的文件,并且app中的所有突然主​​要(且唯一的)控制器永远不会被调用

的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>TestApp</display-name>  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <!-- Processes application requests -->
  <servlet>
      <servlet-name>appServlet</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/spring/appServlet/appServlet-context.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
  </servlet>        

   <servlet-mapping>
      <servlet-name>appServlet</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

appServlet-context.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:mvc="http://www.springframework.org/schema/mvc"
            xmlns:context="http://www.springframework.org/schema/context"
            xsi:schemaLocation="
                http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
                http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

        <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

        <!-- Scans within the base package of the application for @Components to configure as beans -->
        <!-- @Controller, @Service, @Configuration, etc. -->
        <context:component-scan base-package="com.testApp" />

        <!-- Enables the Spring MVC @Controller programming model -->
        <mvc:annotation-driven />   


    </beans>

和HomeController

package com.testApp.Controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {

    @RequestMapping(value = "/")
    public String home() {
        System.out.println("HomeController: Passing through...");
        return "WEB-INF/Views/Home.jsp";
    }
}

问题是我总是得到404错误并且HomeController: Passing through...永远不会被打印到控制台所以我怀疑HomeController甚至没有被调用

这在另一个项目中工作正常,它会打印HomeController: ...到控制台,但我无法显示视图,所以在几小时未能成功完成这项工作后我决定创建新项目,现在看来似乎甚至连控制器都没有被调用

任何人都知道可能是什么问题

2 个答案:

答案 0 :(得分:0)

我不确定这是否可以帮到你,但是你应该总是用小写字母命名你的包,因为它可能是一个混乱的来源,因为在Windows机器上,因为不同包的文件夹名称是相同的(两者都是aAA和aaa将进入一个文件夹)。这反过来会以负面的方式影响自动扫描。

我在Weblogic服务器上遇到了这样的问题:在服务器启动期间选择了bean,但是在应用程序重新部署组件扫描停止工作之后,使一些bean(控制器)神秘地从工作应用程序中消失。根本原因是我首先在包名中输入了一个拼写错误,迫使weblogic创建目录名中带有大写字母的文件夹结构。手动删除可怜的软件包目录后,所有内容都已修复(但需要几天的时间才能找到问题的根源)。

Package naming convention

至于previos项目 - 可能“WEB-INF”(甚至“\ Views \”)部分应该被删除,你可以声明你自己的视图解析器指定jsp前缀:

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="prefix" value="/views/" />
       <property name="suffix" value=".jsp" />
    </bean>

答案 1 :(得分:0)

我希望您只是访问错误的网址。你发布的一切都很好。我使用你发布的内容加上一个简单的Home.jsp将a sample project放在一起。您可以尝试一下,看看它是否可以使用以下步骤:

git clone git://github.com/zzantozz/testbed.git tmp
cd tmp/stackoverflow/11678699-basic-springmvc
mvn jetty:run

然后导航到http://localhost:8080/11678699-basic-springmvc/(抱歉,Stackoverflow不再允许创建以“localhost”作为主机的超链接)。您将看到“hi there”(Home.jsp),您将看到控制器将消息打印到控制台。