我正在学习servlet和jsps,现在我正在尝试生成我的WAR文件。据我所知,我需要创建一个MANIFEST.MF文件才能完成它。我能够使用Intellij IDEA生成WAR文件,但是一旦将其复制到/ webapps(tomcat home的子目录)并运行Tomcat,我就无法运行该应用程序。我在MANIFEST.MF中收到警告,说Invalid main class
我声明了Main-Class
属性。我这样做:Main-Class: demo.Hello
// Hello.java
package demo;
@WebServlet(name = "Hello")
public class Hello extends HttpServlet {
public Hello() { super(); }
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Hello");
}
}
// MANIFEST.MF - class path is set to where Hello.java is stored
Manifest-Version: 1.0
Class-Path: /home/.../src
Main-Class: demo.Hello
你有什么想法如何解决这个问题?
注意:Intellij IDEA直接在localhost:8080上运行Web应用程序,即使我设置了另一个应用程序上下文。我不知道为什么。
答案 0 :(得分:6)
对于Web应用程序,无需在Manifest文件中添加Main-Class条目。此条目旨在使您的jar可执行。
答案 1 :(得分:2)
如果您使用maven构建项目,maven-war-plugin或maven-jar-plugin可以为您生成清单。
至于你的应用程序总是在http://localhost:8080执行我认为你需要用@WebServlet指定servlet的路径(" / somePath")。你提供了name属性而不是路径。
如果那不是您的意思,那么您能告诉我们您如何部署项目吗?您使用的是哪个应用服务器?它是战争文件中的耳朵还是战争文件?如果它只是一个war文件,那么你应该能够在web.xml中为应用程序设置contextPath
答案 2 :(得分:2)
WAR文件不需要Main-class
属性,demo.Hello
不是主类(无public static void main(String[] args)
方法)。
只需删除Main-class
属性。