Servlet 3.1 包
涉及到 WEB-INF 子目录的 Web 应用程序结构是所有的 Java web 应用程序的标准,并由 Servlet API 规范指定
给定一个顶级目录名 servlet,目录结构如下所示:
/servlet /images /WEB-INF /classes /lib /web.xml
WEB-INF 子目录中包含应用程序的部署描述符,名为 web.xml
所有的 HTML 文件都位于顶级目录 servlet 下
创建包中的 Servlet
WEB-INF/classes
目录包含了所有的 Servlet 类和其他类文件
类文件所在的目录结构与它们的包名称匹配
一个完全合格的类名称 cn.twle.demo.HelloServlet ,那么这个 Servlet 类必须位于以下目录中
servlet/WEB-INF/classes/cn/twle/demo/HelloServlet.class
下面的例子创建包名为 cn.twle.demo 的 HelloServlet 类
package cn.twle.demo; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "HelloServlet", urlPatterns = {"hello"}, loadOnStartup = 1) public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().print("Hello, World!"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); if (name == null) name = "World"; request.setAttribute("user", name); request.getRequestDispatcher("response.jsp").forward(request, response); } }
编译包中的 Servlet
编译包中的类与编译其他的类没有什么大的不同
最简单的方法是让我们的 java 文件保留完全限定路径,如上面提到的类,将被保留在 cn.twle.demo 中
然后在 CLASSPATH 中添加该目录
如果我们的环境已正确设置,进入 <Tomcat-installation-directory>/webapps/servlet/WEB-INF/classes
目录,并编译 HelloServlet.java
$ javac HelloServlet.java
如果 Servlet 依赖于其他库,那么必须在 CLASSPATH 中也要引用那些 JAR 文件
这里我只引用了 servlet-api.jar JAR 文件,因为我在 Hello World 程序中并没有使用任何其它类库
该命令行使用内置的 javac 编译器,它是 Java 软件开发工具包(JDK,全称 Java Software Development Kit)附带的
如果一切顺利,上述编译会在同一目录下生成 HelloServlet.class 文件
下一节我们将学习如何把一个已编译的 Servlet 部署到生产中
Servlet 打包部署
默认情况下,Servlet 应用程序位于路径 <Tomcat-installation-directory>/webapps/servlet
下,且类文件放在 <Tomcat-installation-directory>/webapps/servlet/WEB-INF/classes
中
如果你有一个完全合格的类名称 cn.twle.demo.HelloServlet ,那么这个 Servlet 类必须位于 WEB-INF/classes/cn/twle/demo/HelloServlet.class 中
我们需要在位于 <Tomcat-installation-directory>/webapps/servlet/WEB-INF/
的 web.xml 文件中创建以下条目
<servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>cn.twle.demo.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
上面的条目要被创建在 web.xml 文件中的 <web-app>...</web-app>
标签内
在该文件中可能已经有各种可用的条目,但不要在意
到这里,你基本上已经完成了,现在让我们使用
<Tomcat-installation-directory>\bin\startup.bat
(在 Windows 上)或 <Tomcat-installation-directory>/bin/startup.sh
(在 Linux)启动 tomcat 服务器
在浏览器的地址栏中输入 http://localhost:8080/servlet/hello_world
如果一切顺利,会显示如下