我在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: ...
到控制台,但我无法显示视图,所以在几小时未能成功完成这项工作后我决定创建新项目,现在看来似乎甚至连控制器都没有被调用
任何人都知道可能是什么问题
答案 0 :(得分: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>
答案 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),您将看到控制器将消息打印到控制台。