Servlets - 包装( Packaging)
涉及WEB-INF子目录的Web应用程序结构是所有Java Web应用程序的标准,并由servlet API规范指定。 给定myapp的顶级目录名称。 以下是此目录结构的样子 -
/myapp
/images
/WEB-INF
/classes
/lib
WEB-INF子目录包含应用程序的部署描述符,名为web.xml。 所有HTML文件都应保存在顶级目录myapp 。 对于admin用户,您会发现ROOT目录为父目录。
在包中创建Servlet
WEB-INF/classes目录包含与其包名匹配的结构中的所有servlet类和其他类文件。 例如,如果您具有com.myorg.MyServlet的完全限定类名,则此servlet类必须位于以下目录中 -
/myapp/WEB-INF/classes/com/myorg/MyServlet.class
以下是使用包名com.myorg创建MyServlet类的示例
// Name your package
package com.myorg;
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet extends HttpServlet {
private String message;
public void init() throws ServletException {
// Do required initialization
message = "Hello World";
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
// Actual logic goes here.
PrintWriter out = response.getWriter();
out.println("<h1>" + message + "</h1>");
}
public void destroy() {
// do nothing.
}
}
编译包中的Servlet
编译包中可用的类没有什么不同。 最简单的方法是将java文件保存在完全限定的路径中,如上所述,类将保存在com.myorg中。 您还需要在CLASSPATH中添加此目录。
假设您的环境设置正确,请进入《Tomcat-installationdirectory》/webapps/ROOT/WEB-INF/classes目录并编译MyServlet.java,如下所示
$ javac MyServlet.java
如果servlet依赖于任何其他库,则还必须在CLASSPATH上包含这些JAR文件。 我只包含了servlet-api.jar JAR文件,因为我没有在Hello World程序中使用任何其他库。
此命令行使用Sun Microsystems Java软件开发工具包(JDK)附带的内置javac编译器。 要使此命令正常工作,您必须在PATH环境变量中包含您正在使用的Java SDK的位置。
如果一切顺利,上面的编译将在同一目录中生成MyServlet.class文件。 下一节将解释如何在生产中部署已编译的servlet。
打包的Servlet部署
默认情况下,servlet应用程序位于路径
如果你有一个完全限定的com.myorg.MyServlet类名,那么这个servlet类必须位于WEB-INF/classes/com/myorg/MyServlet.class中,你需要在web.xml文件中创建以下条目在“Tomcat-installationdirectory”/ webapps/ROOT/WEB-INF/
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.myorg.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
上面的条目将在web.xml文件中提供的
你差不多完成了,现在让我们使用
<h1 align="center">Hello World</h1>