2012-07-26 63 views
0

我在春天创建简单的Hello World应用程序,它的工作就好了,然后我抄相同的文件,在另一个项目和所有突然主​​(只)控制器应用从未被调用春季控制器永远不会被调用

网络的.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: ...安慰,但我不能”吨得到的不成功尝试得到这个工作,我决定创建新项目数小时后显示,以便查看。现在看来甚至没有控制器被调用

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

+1

很可能你正在改变一些文件夹结构或其他东西。如果您使用的是eclipse,请使用import-export移动项目。 – JProgrammer 2012-07-26 23:35:20

+1

尝试打开“org.springframework”的DEBUG级别日志记录。这应该告诉你什么URL路径被映射到哪些控制器/方法。 – nickdos 2012-07-27 05:21:59

回答

0

我不是当然,如果t可以帮助你,但你应该始终用小写字母命名包,因为它可能是一个混淆的来源,因为在Windows机器上,因为不同包的文件夹名称是相同的(aAA和aaa都会进入一个文件夹) 。这又反过来影响自动扫描。

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

Package naming convention

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

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

我希望你只是访问了错误的URL。你发布的一切都很好。我把a sample project放在一起,使用你发布的内容以及一个简单的Home.jsp。你可以尝试一下,看看它的工作原理与以下步骤:

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

然后导航到http://localhost:8080/11678699-basic-springmvc/(对不起,#2不再允许使用“localhost”作为主机创建超链接)。你会看到“你好”(Home.jsp),你会看到控制器打印到控制台的消息。

相关问题