注解是Servlet 3.0规范中引入的一项新功能。 以前,要声明servlet,侦听器或过滤器,我们必须在web.xml文件中进行声明。 现在,有了新的注解功能,我们可以使用@WebServlet注解对Servlet类进行注解。
package org.nhooo.example.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(
name = "HelloAnnotationServlet",
urlPatterns = {"/hello", "/helloanno"},
asyncSupported = false,
initParams = {
@WebInitParam(name = "name", value = "admin"),
@WebInitParam(name = "param1", value = "value1"),
@WebInitParam(name = "param2", value = "value2")
}
)
public class HelloAnnotationServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.write("<html><head><title>WebServlet Annotation</title></head>");
out.write("<body>");
out.write("<h1>Servlet Hello Annotation</h1>");
out.write("<hr/>");
out.write("Welcome " + getServletConfig().getInitParameter("name"));
out.write("</body></html>");
out.close();
}
}部署servlet后,您可以使用/hello 或 /helloannourl 访问它。
下表简要说明了@WebServlet 注解所接受的属性及其用途。
| 属性 | 描述 |
|---|---|
| name | servlet名称,此属性是可选的。 |
| description | Servlet描述,它是一个可选属性。 |
| displayName | servlet显示名称,此属性是可选的。 |
| urlPatterns | 一组URL模式用于访问Servlet,此属性是必需的,并且至少应注册一个URL模式。 |
| asyncSupported | 指定servlet是否支持异步处理,值可以为true或false。 |
| initParams | @WebInitParam的数组,可用于传递servlet配置参数。此属性是可选的。 |
| loadOnStartup | 一个指示servlet初始化顺序的整数值,此属性是可选的。 |
| smallIcon | Servlet的一个小图标图像,此属性是可选的。 |
| largeIcon | Servlet的大图标图像,此属性是可选的。 |