Servlet 包
涉及到 WEB-INF 子目录的 Web 应用程序结构是所有的 Java web 应用程序的标准,并由 Servlet API 规范指定。给定一个顶级目录名 myapp,目录结构如下所示:
/myapp /images /WEB-INF /classes /lib
WEB-INF 子目录中包含应用程序的部署描述符,名为 web.xml。所有的 HTML 文件都位于顶级目录myapp下。对于 admin 用户,您会发现 ROOT 目录是 myApp 的父目录。
创建包中的 Servlet
WEB-INF/classes 目录包含了所有的 Servlet 类和其他类文件,类文件所在的目录结构与他们的包名称匹配。例如,如果您有一个完全合格的类名称com.myorg.MyServlet,那么这个 Servlet 类必须位于以下目录中:
/myapp/WEB-INF/classes/com/myorg/MyServlet.class
下面的例子创建包名为com.myorg的 MyServlet 类。
// 为包命名 package com.myorg; // 导入必需的 java 库 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { private String message; public void init() throws ServletException { // 执行必需的的初始化 message = "Hello World"; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html"); // 实际的逻辑是在这里 PrintWriter out = response.getWriter(); out.println("" + message + "
"); } public void destroy() { // 什么也不做 } }
编译包中的 Servlet
编译包中的类与编译其他的类没有什么大的不同。最简单的方法是让您的 java 文件保留完全限定路径,如上面提到的类,将被保留在 com.myorg 中。您还需要在 CLASSPATH 中添加该目录。
假设您的环境已正确设置,进入
$ javac MyServlet.java
如果 Servlet 依赖于其他库,那么您必须在 CLASSPATH 中也要引用那些 JAR 文件。这里我只引用了 servlet-api.jar JAR 文件,因为我在 Hello World 程序中并没有使用任何其他库。
该命令行使用内置的 javac 编译器,它是 Sun Microsystems Java 软件开发工具包(JDK,全称 Java Software Development Kit)附带的。 Microsystems的Java软件开发工具包(JDK)。为了让该命令正常工作,必须包括您在 PATH 环境变量中所使用的 Java SDK 的位置。
如果一切顺利,上述编译会在同一目录下生成MyServlet.class文件。下一节将解释如何把一个已编译的 Servlet 部署到生产中。
Servlet 打包部署
默认情况下,Servlet 应用程序位于路径
如果您有一个完全合格的类名称com.myorg.MyServlet,那么这个 Servlet 类必须位于 WEB-INF/classes/com/myorg/MyServlet.class 中,您需要在位于
MyServlet com.myorg.MyServlet MyServlet /MyServlet
上面的条目要被创建在 web.xml 文件中的
到这里,您基本上已经完成了,现在让我们使用
Hello World |