执行Java Web App

时间:2017-07-05 16:42:03

标签: java spring eclipse spring-mvc

我是非常对Java环境(Eclipse,Spring等)的新手,现在只是简单介绍一些入门教程。我刚刚完成了Spring MVC的Hello World教程,其中有一个简单的页面,然后发布到另一个动作。直截了当。

然后我继续修改该教程的工作结果。我的第一个尝试是在Eclipse中创建另一个项目,只包含一些包含POJO的简单包。想法是拥有不同应用程序可以使用的便携式东西。 (旨在相当于.NET世界中的“类库”项目。)

该项目有一个包,一个接口(IWorld)和一个类(HelloWorld)。在我的Spring MVC项目中,然后我将另一个项目添加到构建路径并在控制器中创建该对象的实例。编译器说一切都很好:

package com.sandbox.application.mvctest.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.sandbox.domain.models.*;

@Controller
public class HelloWorldController {

    @RequestMapping("/")
    public String hello() {
        IWorld world = new HelloWorld();
        world.speak();
        return "hello";
        //TODO: Return a ModelAndView instead
    }

    @RequestMapping(value = "/hi", method = RequestMethod.GET)
    public String hi(@RequestParam("name") String name, Model model) {
        String message = "Hi " + name + "!";
        model.addAttribute("message", message);
        return "hi";
    }

}

.speak()方法没有做任何注意事项,只返回控制器尚未使用的值。当然,目的是开始在模型中构建一些功能,而不仅仅是在控制器和视图中,构建更多丰富的域模型。

Eclipse没有抱怨代码,一切似乎编译得很好。但是当在Tomcat上执行时,我得到一个例外:

Jul 05, 2017 12:36:49 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet [springDispatcher]
java.lang.ClassNotFoundException: com.sandbox.domain.models.IWorld
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1269)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1104)
    at java.lang.Class.getDeclaredMethods0(Native Method)
    [and so on...]
到目前为止,我的谷歌搜索已经证明没有结果,可能是因为我并不总是理解我所发现的东西。例如,有一些帖子建议纠正pom.xml文件中的内容。我没有这样的档案。这与Spring的依赖注入有关吗?我应该使用它吗?我不会认为这是一个可注入的依赖项,我只是直接创建一个实例。但是,我也是从一种深刻教条的.NET思维方式来接近这一点,所以所有的赌注都没有了。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,那么你期望项目类路径和web应用程序类路径是相同的。部署Web应用程序时,不会自动导出所有依赖项。您可以检查已部署的web-app的WEB-INF / lib文件夹中的依赖项。

如果您使用Tomcat作为您的servlet容器,那么您可以在Tomcat的lib文件夹中添加依赖项jar,然后它应该可以工作。

答案 1 :(得分:-2)

您正在使用springframework,因此您可以创建com.sandbox.domain.models.IWorld的bean并使用@Autowired tp依赖注入。参考代码

@Autowired
private IWorld world;