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