【问题标题】:Running Tomcat from within Eclipse always gives me 404 (but index.html works)从 Eclipse 中运行 Tomcat 总是给我 404(但 index.html 有效)
【发布时间】:2013-02-20 03:32:21
【问题描述】:

首先是我的软件堆栈:

  • Eclipse 4.2
  • Tomcat 7.0.37
  • 带有 m2e 插件的 Maven
  • javax.servlet 3.0.1
  • Spring WebMVC 和 Spring Web 3.2.1

我正在使用 servlet 3 没有 web.xml

我做了什么:

  • Eclipse -> 新建 Maven 项目
  • 编辑 pom.xml:添加 Spring 和 javax.servlet
  • Eclipse -> 项目属性 -> 项目构面 -> 添加动态 Web 构面
  • Eclipse -> 项目属性 -> 部署程序集 -> 删除 WebContent 并添加 /src/main/webapp
  • javax.servlet.ServletContainerInitializer 添加到/src/main/webapp/META-INF/services 并放入实现WebApplicationInitializer 的完全限定类名中

目前我的项目包含大约 7 个文件(3x .java、1x .jsp、1x .html、1x .pom、1x javax.servlet.ServletContainerInitializer)

什么有效:

通过 Maven 编译和打包,然后简单地将 .war 部署在独立的 Tomcat 上。

  • http://127.0.0.1/MyApp/ 显示 index.html
  • http://127.0.0.1/MyApp/hello 显示 hello.jsp

什么不起作用:

如果我现在尝试通过Run -> Run on Server 使用 Eclipse。然后我选择我的 Tomcat 目录等... servlet (/hello) 只给出 404。但 index.html 有效。

三个 Java 文件:

Initializer.java:

public class Initializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(WebAppConfig.class);

        Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
        servlet.setLoadOnStartup(1);
        servlet.addMapping("/");    
    }
}

WebAppConfig.java:

@Configuration
@ComponentScan("myapp.server")
@EnableWebMvc
public class WebAppConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Bean
    public InternalResourceViewResolver setupViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

FooController.java:

@Controller
public class FooController { 
    @RequestMapping("/hello")
    public String helloWorld(Model model) {
        model.addAttribute("wisdom", "Goodbye XML");
        return "hello";
    }
}

如果您需要更多其他信息,请告诉我。

谢谢!!

编辑:如果 Tomcat 是通过 Eclipse 启动的,我在哪里可以找到它的日志文件?

输出:

Eclipse 控制台(这一切都是在启动 Tomcat 之后发生的,并且它不会改变即使我调用了一些 URL,例如 http://localhost:8080/http://localhost:8080/MyApp/):http://pastebin.com/gGn0j48T

Tomcat 日志似乎保存在.metadata/.plugins/org.eclipse.wst.server.core/tmp0/logs/ 中。只有一个文件localhost_access_log.2013-02-20.txt,输出看起来并不有趣:http://pastebin.com/QmD4wPmA

现在我这样做是为了得到一个catalina.out:https://stackoverflow.com/a/5045247/1321564

这是重新启动 Tomcat 并尝试一些 URL 后的输出:文件保持为空...?!

我还发现 Tomcat 上的以下目录是空的:wtpwebapps/MyApp/WEB-INF/lib/。那里不应该有一些 Spring 库吗?!

【问题讨论】:

  • 回答您的最后一个问题。如果您输入服务器配置,第二个选项框(我在我的单元上,不记得名称)您可以看到主路径,通常在您的工作区中的某个位置。您可以在通常的日志文件夹中找到日志。
  • tomcat 日志/控制台中是否有任何输出(文本或异常)?
  • 我已将 Eclipse 和 Tomcat 的输出放在问题的底部。谢谢你:)
  • 遇到了同样的问题...控制台中没有日志...只有 404 秒...更改部署程序集属性后...现在可以正常工作了
  • @bluish: 只为你;)

标签: eclipse spring maven tomcat servlet-3.0


【解决方案1】:

搞定了!!!

如上所述:WEB-INF/lib 文件夹中没有 Spring 库。

因为我使用的是 Maven。解决方法很简单:

  • 右键单击项目
  • 点击Properties
  • 点击Deployment Assembly
  • 点击Add...
  • 选择Java Build Path Entries
  • 点击Next
  • 选择Maven Dependencies
  • 点击Finish

重启服务器。

现在我可以在服务器视图中看到不同之处:

  • 扩展 Tomcat 服务器。现在您可以看到项目
  • 扩展项目。 现在列出了spring-web-3.2.1.RELEASE.jar。以前不是这样的。

【讨论】:

  • 它对我有用,但我不明白为什么?我已经开始了我的项目一千次,但它从未发生过,但今天早上它停止了,你的解决方案奏效了。
  • 我很高兴找到了这个帖子。 WEB-INF/lib 文件夹中缺少 Maven 依赖项。在 Java 构建路径条目中添加 Maven 依赖项解决了该问题。
猜你喜欢
  • 2011-02-08
  • 2014-04-30
  • 1970-01-01
  • 2013-07-06
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 2021-08-05
相关资源
最近更新 更多