《Servlet、JSP和Spring MVC初學指南》——1.11 使用部署描述符
本節書摘來自異步社區《Servlet、JSP和Spring MVC初學指南》一書中的第1章,第1.11節,作者:【加】Budi Kurniawan(克尼亞萬) , 【美】Paul Deck著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看
1.11 使用部署描述符
如在前麵的例子中所見,編寫和部署Servlet都是很容易的事情。部署的一個方麵是用一個路徑配置Servlet的映射。在這些範例中,是利用WebServlet標注類型,用一個路徑映射了一個Servlet。
利用部署描述符是配置Servlet應用程序的另一種方法,部署描述符的詳情將在第13章“部署描述符”中探討。部署描述符總是命名為web.xml,並且放在WEB-INF目錄下。本章介紹了如何創建一個名為app01c的Servlet應用程序,並為它編寫了一個web.xml。
app01c有SimpleServlet和WelcomeServlet兩個Servlet,還有一個要映射Servlets的部署描述符。清單1.5和清單1.6分別展示了SimpleServlet和WelcomeServlet。注意,Servlet類沒有用@WebServlet標注。部署描述符如清單1.7所示。
清單1.5 未標注的SimpleServlet類
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");
}
}
清單1.6 未標注的WelcomeServlet類
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>");
}
}
清單1.7 部署描述符
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="https://java.sun.com/xml/ns/javaee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://java.sun.com/xml/ns/javaee
https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<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元素。這個元素使得Servlet在應用程序啟動時加載,而不是在第一次調用時加載。如果Servlet的init方法需要花一些時間才能完成的話,使用load-on-startup意味著第一次調用Servlet所花的時間並不比後續的調用長,這項功能就特別有用。
使用部署描述符的另一個好處是,如果需要修改配置值,如Servlet路徑,則不需要重新編譯Servlet類。
此外,可以將初始參數傳給一個Servlet,並且不需要重新編譯Servlet類,就可以對它們進行編輯。
部署描述符還允許覆蓋在Servlet標注中定義的值。Servlet上的WebServlet標注如果同時也在部署描述符中進行聲明,那麼它將不起作用。然而,在有部署描述符的應用程序中,卻不在部署描述符中標注Servlet時,則仍然有效。這意味著,可以標注Servlet,並在同一個應用程序的部署描述符中聲明這些Servlet。
圖1.8展示了有部署描述符的目錄結構。這個目錄結構與app01a的目錄結構沒有太大區別。唯一的區別在於,app01c在WEB-INF目錄中有一個web.xml文件(部署描述符)。
圖1.8 有部署描述符的b3的目錄結構
現在,在部署描述符中聲明SimpleServlet和WelcomeServlet,可以利用這些URL來訪問它們:
https://localhost:8080/app01c/simple
https://localhost:8080/app01c/welcome
關於部署以及部署描述符的更多信息,請參考第13章。
最後更新:2017-05-27 17:31:30