将一个简单的hello world servlet编译成一个用于tomcat的.war文件

4

我正在进行一些简单的基准测试,并希望创建一个显示“hello world”的简单servlet,我已经完成了这部分:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet{ 
  public void doGet(HttpServletRequest request, 
  HttpServletResponse response)
  throws ServletException,IOException{
  response.setContentType("text/html");
  PrintWriter pw = response.getWriter();
  pw.println("<html>");
  pw.println("<head><title>Hello World</title></title>");
  pw.println("<body>");
  pw.println("<h1>Hello World</h1>");
  pw.println("</body></html>");
  }
}

现在我使用Tomcat的默认安装方式,在以下路径下:

.../libexec/webapps/ROOT

我认为我需要使用一个war文件,是否可以仅通过命令行编译以上Java类成为一个.war文件而无需编辑器?

1个回答

5

War文件是一个zip文件,只要有适当的目录结构和web.xml文件,就可以使用命令行工具创建。

在web.xml中,至少应包含将URL指向Servlet的方法。

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http:/java.sun.com/dtd/web-app_2_3.dtd">
  <servlet>
    <servlet-name>HelloWorldServlet</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>HelloWorldServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

这个web.xml文件应该放在war包内的一个名为WEB-INF的文件夹中,而编译后的Java类文件应该放在WEB-INF/classes中。

war文件应该被放置在webapps目录下,而不是ROOT目录下。

Tomcat会找到你的war文件并将其解压缩。

如果它的名称是"hello.war",默认的上下文名称将是"hello",并且可以通过http://yourhost/hello/访问。


我可以直接将那个文件放到Tomcat上面吗,还是必须使用.war文件?转换成war的命令行是什么? - Blankman
@Blankman 使用jar命令。不,你不能只丢弃web.xml文件,你需要应用程序的其他资源(servlet类文件、JSP等)。 - Dave Newton
好的,我创建了web.xml,并按照上述说明将Java类放入web-inf/classes中,使用jar命令创建hello.war,将hello.war放入webapps文件夹中,启动Tomcat并访问/hello/,它应该可以工作了吗? - Blankman
是的,也许吧。不过WEB-INF需要大写。 - Stephen Denne
仅作为旁注,Tomcat默认在8080端口侦听HTTP连接,在这种情况下,URL将是:http://yourhost:8080/hello - jaume
hello.war 的默认 URL 应该是 http://yourhost:8080/hello,因为 Tomcat 默认绑定到 8080 端口。 - jaume

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接