4

首先是我的软件堆栈:

  • 日食 4.2
  • 雄猫 7.0.37
  • 带有 m2e 插件的 Maven
  • javax.servlet 3.0.1
  • Spring WebMVC 和 Spring Web 3.2.1

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

我做了什么:

  • 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. 然后我选择我的 Tomcat 目录等... servlet ( /hello) 只给出 404。但 index.html 有效。

3 个 Java 文件:

初始化程序.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";
    }
}

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

谢谢!!

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

输出:

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

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

现在我已经这样做了catalina.outhttps ://stackoverflow.com/a/5045247/1321564

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

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

4

1 回答 1

6

搞定了!!!

如上所述: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上市。以前不是这样的。
于 2015-06-11T13:39:07.457 回答