0

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

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: ...到控制台,但我无法显示视图,因此在尝试使其正常工作几个小时后,我决定创建新项目,现在似乎连控制器都没有被调用

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

4

2 回答 2

0

我希望您只是访问了错误的 URL。您发布的所有内容都可以正常工作。我使用您发布的内容和一个简单的 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/(抱歉,Stackoverflow 不再允许以“localhost”作为主机创建超链接)。您将看到“hi there” (Home.jsp),并且您会看到控制器打印到控制台的消息。

于 2012-12-18T02:16:05.880 回答
0

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

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

包命名约定

至于 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>
于 2012-07-27T09:55:57.723 回答