8.1 servlet註解介紹
從版本 7 開始,Tomcat 開始支持Servlet API 3.0 web servlet 規範。特別是,其中出現了一個名為javax.servlet.annotation
. 它包含各種類型的註釋,可用於註釋 servlet 類。如果您使用註釋,則不需要部署描述符 (web.xml)。
最有用的註釋列表:
註解 | 描述 | |
---|---|---|
1個 | @WebServlet |
聲明一個 servlet |
2個 | @WebInitParam |
指定一個初始化參數 |
3個 | @WebFilter |
聲明一個網頁過濾器 |
4個 | @WebListener |
聲明網絡監聽器 |
5個 | @ServletSecurity |
允許您配置安全設置 |
例子:
@WebServlet( urlPatterns = {"/api/*"} )
public class Example extends HttpServlet {
protected void doGet( HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello World!");
}
}
一個註解就足以聲明一個 servlet 並將其映射為服務所有將到達/api/*
.
8.2 設置servlet映射
註釋有@WebServlet
許多參數,允許對其描述的 servlet 進行非常靈活的配置。讓我們來看看主要的:
屬性 | 描述 | |
---|---|---|
1個 | name |
Servlet 唯一名稱(如在 web.xml 中) |
2個 | displayName |
人類可讀的 servlet 名稱 |
3個 | description |
服務小程序說明 |
4個 | value |
設置映射的 url |
5個 | urlPatterns |
指定要映射的 url 列表(用於代替值) |
6個 | initParams |
允許您設置 servlet 的啟動參數 |
7 | asyncSupported |
指定 servlet 可以異步運行 (HTTP/2) |
8個 | loadOnStartup |
控制servlet啟動優先級的序號 |
9 | smallIcon |
設置一個小的 servlet 圖標 |
10 | largeIcon |
設置一個大的 servlet 圖標 |
這裡有幾個有趣的點。
首先,請注意value
和urlPatterns
是可互換的屬性。它們都允許您指定 servlet 應映射到的 URL 列表。
其次,該參數asyncSupported
指示 servlet 是否會正確處理通過 HTTP/2 協議的異步請求。
第三個重要的屬性是initParams
,它允許您設置將放置在 ServletContext 中的參數列表。
例子:
@WebServlet(
urlPatterns = {"/sendFile", "/uploadFile"},
loadOnStartup = 1,
asyncSupported = true,
initParams = {
@WebInitParam(name = "saveDir", value = "c:/uploaded"),
@WebInitParam(name = "allowedTypes", value = "jpg,gif,png")
}
)
public class ImageUploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String saveDir = getInitParameter("saveDir");
String fileTypes = getInitParameter("allowedTypes");
PrintWriter writer = response.getWriter();
writer.println("saveDir = " + saveDir);
writer.println("fileTypes = " + fileTypes);
}
}
8.3 設置過濾器映射
如上所述,過濾器是一種實用類型的 servlet,它們的配置類似於 servlet。以下是註釋具有的屬性@WebFilter
:
屬性 | 描述 | |
---|---|---|
1個 | filterName |
過濾器唯一名稱(如在 web.xml 中) |
2個 | displayName |
人類可讀的過濾器名稱 |
3個 | description |
過濾器說明 |
4個 | value / urlPatterns |
設置要映射的 url 列表 |
5個 | dispatcherTypes |
指定 DispatcherTypes 的列表 |
6個 | servletNames |
指定要應用的 servlet 列表 |
7 | initParams |
允許您設置過濾器的啟動參數 |
8個 | asyncSupported |
指定過濾器可以異步運行 (HTTP/2) |
9 | smallIcon |
設置一個小過濾器圖標 |
10 | largeIcon |
設置一個大過濾器圖標 |
攔截對特定 servlet 的所有請求的過濾器示例:
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
給定多個參數的過濾器示例:
@WebFilter(
urlPatterns = "/uploadFilter",
initParams = @WebInitParam(name = "fileTypes", value = "doc;xls;zip;txt;jpg;png;gif")
)
public class UploadFilter implements Filter {
// implements Filter's methods here...
}
給定 RequestDispatcher 類型的過濾器示例:
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
// implements Filter's methods here...
}
在接下來的課程中,您將了解有關過濾器和 servlet 用途的更多信息。
GO TO FULL VERSION