大多数情况下,你会看到如图12-3所示的画面。
图12-3 编译HelloWorldServlet.java的出错信息
产生这些错误的原因是Java编译器没有找到javax.servlet包中的类。要解决这个问题,我们需要让Java编译器知道Servlet API库所在的位置。Tomcat在其发行版中已经包含了Servlet API库,是以JAR文件的形式提供的,这个JAR文件的完整路径名是:
%CATALINA_HOME%\lib\servlet-api.jar
我们只需要在系统的CLASSPATH环境变量下添加这个JAR文件的路径名就可以了。
设置CLASSPATH环境变量的方法和第11章设置JAVA_HOME环境变量的方法是一样的。在笔者的机器上,CLASSPATH环境变量的配置如下:
CLASSPATH=.;D:\OpenSource\apache-tomcat-7.0.23\lib\servlet-api.jar
关闭刚才打开的命令提示符窗口,重新打开一个新的命令提示符窗口,进入HelloWorldServlet.java所在的目录,再次执行下列代码生成org\sunxin\ch12\servlet目录结构,以及在servlet子目录中的HelloWorld Servlet.class文件。
javac -d . HelloWorldServlet.java
Step3:部署HelloWorldServlet
Servlet是Web应用程序中的一个组件。一个Web应用程序是由一组Servlet、HTML页面、类,以及其他的资源组成的运行在Web服务器上的完整的应用程序,以一种结构化的有层次的目录形式存在。组成Web应用程序的这些资源文件要部署在相应的目录层次中,根目录代表了整个Web应用程序的根。我们通常是将Web应用程序的目录放到%CATALINA_HOME%\webapps目录下,在webapps目录下的每一个子目录都是一个独立的Web应用程序,子目录的名字就是Web应用程序的名字,也称为Web应用程序的上下文根。用户通过Web应用程序的上下文根来访问Web应用程序中的资源,如图12-4所示。
如果你要新建一个Web应用程序,可以在webapps目录下先建一个目录,在这个例子中,我们所建的目录是ch12,作为第一个Web应用程序的上下文根。Java开发的Web应用程序需要遵照一定的目录层次结构,在Servlet规范中定义了Web应用程序的目录层次结构,如图12-5所示。
图12-4 多个Web应用程序和上下文根
图12-5 Web应用程序的目录层次结构
Web应用程序的目录层次结构如表12-1所示。
表12-1 Web应用程序的目录层次结构