1.11 使用部署描述符

1.11 使用部署描述符

如在前面的例子中所见,编写和部署Servlet都是很容易的事情。部署的一个方面是用一个路径配置Servlet 的映射。在这些范例中,是利用WebServlet注解来将一个URL路径映射了一个Servlet,如下所示:

1
2
3
4
@WebServlet(
name = "FormServlet",
urlPatterns ={"/form"}
)

利用部署描述符是配置Servlet应用程序的另一种方法,部署描述符的详情将在第13章“部署描述符”中探讨。部署描述符总是命名为web.xml,并且放在WEB-INF目录下

程序示例

本章介绍了如何创建一个名为app01cServlet应用程序,并为它编写了一个web.xml
创建app01c项目然后在src目录下创建app01c包,app01c包中有SimpleServletWelcomeServlet这样两个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 -->
<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

运行效果

现在,在部署描述符中声明SimpleServletWelcomeServlet,可以利用这些URL来访问它们:
http://localhost:8080/app01c/simple
http://localhost:8080/app01c/welcome

浏览器显示效果如下:
这里有一张图片
这里有一张图片

关于部署以及部署描述符的更多信息,请参考第13章。