我对 Java 领域(Eclipse、Spring 等)非常很陌生,目前只是浏览一些介绍性教程。我刚刚完成了 Spring MVC 的 Hello World 教程,其中有一个简单的页面,然后可以发布到另一个操作。足够简单了。
然后我继续对该教程的工作结果进行了一些修改。我的第一次尝试是在 Eclipse 中创建另一个项目,其中仅包含一些包含 POJO 的简单包。我们的想法是拥有一些可供不同应用程序使用的可移植设备。 (旨在相当于 .NET 世界中的“类库”项目。)
该项目有一个包,其中包含一个接口(interface) (IWorld
) 和一个类 (HelloWorld
)。然后,在我的 Spring MVC 项目中,我将另一个项目添加到构建路径中,并在 Controller 中创建该对象的实例。编译器说一切都很好:
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()
方法不执行任何值得注意的操作,仅返回 Controller 尚未使用的值。当然,目的是开始在模型中构建一些功能,而不仅仅是在 Controller 和 View 中,构建更多的丰富域模型。
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的依赖注入(inject)有关吗?我应该用那个吗?我不会认为这是可注入(inject)的依赖项,我只是直接创建一个实例。但我也是从一种非常教条的 .NET 思维方式来处理这个问题的,所以所有的赌注都失败了。
我在这里缺少什么?
最佳答案
如果我正确理解你的问题,那么你期望项目类路径和网络应用程序类路径是相同的。部署 Web 应用程序时,不会自动导出所有依赖项。您可以检查已部署的 Web 应用程序的 WEB-INF/lib 文件夹中的依赖项。
如果您使用 Tomcat 作为 servlet 容器,那么您可以在 Tomcat 的 lib 文件夹中添加依赖项 jar,然后它应该可以工作。
关于java - 执行 Java Web App 时未找到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44931793/