【问题标题】:Spring MVC application don't work with Tomcat and EclipseSpring MVC 应用程序不适用于 Tomcat 和 Eclipse
【发布时间】:2016-07-15 03:34:17
【问题描述】:

我在尝试使用 Spring Framework 时遇到了很多麻烦,并且不知道错误在哪里。我正在使用 Tomcat 7.0.68 部署应用程序。

当我尝试使用 URL (http://localhost:8080/fj21-spring/olaMundo) 时出现 404 错误,但它应该被映射为在我的 Controller 类上调用我的 Action 方法,如下所示:

package com.caelum.tarefas.controller;

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

@Controller
public class TarefasController {

  @RequestMapping("/olaMundo")
  public String execute(){
      return "ok";
  }
}

我的 pom.xml 文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.caelum.tarefas</groupId>
  <artifactId>fj21-spring</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>fj21-spring</name>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  
  	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.2.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>4.2.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.2.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>4.2.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency> 
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.3</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.2.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>4.2.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.19</version>
		</dependency>			
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.19</version>
		</dependency>	
	</dependencies>
</project>

还有我的 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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>fj21-spring</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>
  
   <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  
</web-app>

我的 Spring XML 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd">
 
	<context:component-scan base-package="com.caelum.tarefas" />
 	<mvc:annotation-driven></mvc:annotation-driven>
 	
	<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
		<property name="prefix" value="/WEB-INF/views/" />
		<property name="suffix" value=".jsp" />
	</bean>
</beans>

我希望有人可以帮助我。我曾尝试在 Eclipse 中重新创建服务器,删除该项目并创建另一个,但直到现在没有任何效果。

谢谢!

编辑

将 Controller 类上的注释更改为 @RequestMapping(value="/olaMundo") 后,Tomcat 在控制台上写入堆栈跟踪,如下所示(可能我之前也错过了此堆栈跟踪):

GRAVE: Servlet [spring] in web application [/fj21-spring] threw load() exception
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1858)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1701)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:504)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:486)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:113)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1146)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1085)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5318)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5610)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1572)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1562)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 请不要发布错误链接,而是将错误内容直接添加到您的问题中。
  • 也许您应该包含有关您如何尝试访问控制器方法的信息。您点击的完整网址是什么?你是如何部署你的应用程序的?它看起来在Tomcat上。这是一场战争吗?爆发战争?你的战争名称是什么?
  • 编辑您的问题并复制您的 Tomcat 在 Eclipse 的“控制台”选项卡中生成的堆栈跟踪。 404错误没有说明什么,可以删除图片。只需复制 URL 并记下它会生成 404。
  • 我已经添加了我想要访问的 url,是的,我使用的是 Tomcat 7.0.68。我不确定 Tomcat 中的战争是什么,但就我在 Tomcat 安装的发布文件夹中看到的而言,它不是。
  • 呃!有效!!当我发现异常时,我开始寻找有关该异常的帖子并找到了一些,但在那之前都没有工作!非常感谢你!我是 MVC 和 DDD 的忠实拥护者,但我正在将 C# 迁移到 Java 并且还没有太多!谢谢大家!

标签: java spring spring-mvc tomcat


【解决方案1】:

您尝试显示的 jsp 是否名为“ok.jsp”? 如果不是,这就是您的控制器在返回“ok”时在您的视图文件夹中寻找的内容。

尝试将您的@RequestMapping("/olaMundo") 替换为@RequestMapping(value="/olaMundo")

【讨论】:

  • 是的,我的视图文件夹中有一个“ok.jsp”文件。
  • 我没有对你投反对票。如果你看到,有人也对我的问题投了反对票。我什至尝试“投票”你,但我是 StackOverflow 的新手,我的投票没有足够的声誉,所以我的投票做出了其他人可以看到的更改。
【解决方案2】:

您部署的应用程序似乎找不到 spring 库enter link description here

这个问题对你有帮助吗

【讨论】:

    【解决方案3】:

    我看到 ClassNotFoundException。 检查 lib 目录中的 jar 文件并检查这样的配置。 属性 --> 部署程序集

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 2018-11-01
      • 2014-05-05
      • 1970-01-01
      • 2020-06-26
      • 2013-06-03
      • 2019-02-13
      相关资源
      最近更新 更多