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章。
原文链接: 1.11 使用部署描述符