1.11 使用部署描述符
如在前面的例子中所见,编写和部署Servlet都是很容易的事情。部署的一个方面是用一个路径配置Servlet 的映射。在这些范例中,是利用WebServlet注解来将一个URL路径映射了一个Servlet,如下所示:
1 2 3 4
| @WebServlet( name = "FormServlet", urlPatterns ={"/form"} )
|
利用部署描述符是配置Servlet应用程序的另一种方法,部署描述符的详情将在第13章“部署描述符”中探讨。部署描述符总是命名为web.xml,并且放在WEB-INF目录下。
程序示例
本章介绍了如何创建一个名为app01c的Servlet应用程序,并为它编写了一个web.xml。
创建app01c项目然后在src目录下创建app01c包,app01c包中有SimpleServlet和WelcomeServlet这样两个Servlet,还有一个要映射Servlets的部署描述符web.xml。
SimpleServlet类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package app01c; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SimpleServlet extends HttpServlet { private static final long serialVersionUID = 8946L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html"); PrintWriter writer = response.getWriter(); writer .print("<html><head></head>" + "<body>Simple Servlet</body></html"); } }
|
WelcomeServlet类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package app01c; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class WelcomeServlet extends HttpServlet { private static final long serialVersionUID = 27126L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html"); PrintWriter writer = response.getWriter(); writer.print( "<html><head></head>" + "<body>Welcome</body></html>"); } }
|
部署描述文件web.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>app01c</display-name> <servlet> <servlet-name>SimpleServlet</servlet-name> <servlet-class>app01c.SimpleServlet</servlet-class> <load-on-startup>10</load-on-startup> </servlet> <servlet-mapping> <servlet-name>SimpleServlet</servlet-name> <url-pattern>/simple</url-pattern> </servlet-mapping> <servlet> <servlet-name>WelcomeServlet</servlet-name> <servlet-class>app01c.WelcomeServlet</servlet-class> <load-on-startup>20</load-on-startup> </servlet> <servlet-mapping> <servlet-name>WelcomeServlet</servlet-name> <url-pattern>/welcome</url-pattern> </servlet-mapping> </web-app>
|
使用部署描述符的好处
使用部署描述符有诸多好处。
- 其一,可以使用在
@WebServlet中没有的元素,如load-on-startup 元素。使用这个元素可以在应用程序启动时就调用init方法来实例化Servlet,而不是在用户第一次访问该Servlet是时调用init方法来实例化Servlet。如果init方法很耗时的话,这样可以减少用户第一次访问时的等待时间。
- 使用部署描述符的另一个好处是,如果需要修改配置值,如
Servlet路径,则不需要重新编译Servlet类。
运行效果
现在,在部署描述符中声明SimpleServlet和WelcomeServlet,可以利用这些URL来访问它们:
http://localhost:8080/app01c/simple
http://localhost:8080/app01c/welcome
浏览器显示效果如下:
![这里有一张图片]()
![这里有一张图片]()
关于部署以及部署描述符的更多信息,请参考第13章。