閱讀702 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《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文件(部署描述符)。

screenshot

圖1.8 有部署描述符的b3的目錄結構

現在,在部署描述符中聲明SimpleServlet和WelcomeServlet,可以利用這些URL來訪問它們:

https://localhost:8080/app01c/simple
https://localhost:8080/app01c/welcome
關於部署以及部署描述符的更多信息,請參考第13章。

最後更新:2017-05-27 17:31:30

  上一篇:go  《Servlet、JSP和Spring MVC初學指南》——1.12 小結
  下一篇:go  《Servlet、JSP和Spring MVC初學指南》——1.10 處理HTML表單