Java如何使用@WebServlet注解定义servlet?

注解是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 注解所接受的属性及其用途。

属性描述
nameservlet名称,此属性是可选的。
descriptionServlet描述,它是一个可选属性。
displayNameservlet显示名称,此属性是可选的。
urlPatterns一组URL模式用于访问Servlet,此属性是必需的,并且至少应注册一个URL模式。
asyncSupported指定servlet是否支持异步处理,值可以为true或false。
initParams

@WebInitParam的数组,可用于传递servlet配置参数。此属性是可选的。

loadOnStartup一个指示servlet初始化顺序的整数值,此属性是可选的。
smallIconServlet的一个小图标图像,此属性是可选的。
largeIconServlet的大图标图像,此属性是可选的。