注解是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的大图标图像,此属性是可选的。 |