@WebServlet注解简介
`@WebServlet`是Java Servlet 3.0引入的一个标准注解(Annotation)
用于声明一个类是Servlet
并可以配置其URL映射、
初始化参数等信息
从而替代传统`web.xml`配置方式
`@WebServlet`注解主要功能
功能 | 描述 |
声明一个Servlet类 | 标记某个类继承自`HttpServlet` 并作为 Web 请求处理器 |
配置访问路径(URL 映射) | 替代 `<url-pattern>`,指定该 Servlet 的访问地址 |
设置初始化参数 | 替代 `<init-param>`,为该 Servlet 提供启动参数 |
指定加载顺序(可选) | 控制多个 Servlet 的加载顺序(不常用) |
`@WebServlet`注解定义
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.Runtime)
public @interface WebServlet {
String[] value() default {};
String name() default "";
String[] urlPatterns() default {};
int loadOnStartup() default -1;
WebInitParam[] initParams() default {};
boolean asyncSupported() default false;
}
例 1:最简使用方式(仅配置 URL)
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
response.getWriter().write("Hello from @WebServlet");
}
}
访问地址:
http://localhost:8080/your-app/hello
例2:带多个 URL 映射和初始化参数
@WebServlet(
urlPatterns = {"/welcome", "/greet"},
initParams = {
@WebInitParam(name = "adminEmail", value = "admin@example.com"),
@WebInitParam(name = "maxAttempts", value = "5")
},
loadOnStartup = 1
)
public class WelcomeServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
String adminEmail = config.getInitParameter("adminEmail");
String maxAttempts = config.getInitParameter("maxAttempts");
System.out.println("Admin Email: " + adminEmail);
System.out.println("Max Attempts: " + maxAttempts);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
response.getWriter().write("Welcome to my site!");
}
}
`@WebServlet`注解与`web.xml`对比
使用`web.xml`传统写法
```xml
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
<init-param>
<param-name>adminEmail</param-name>
<param-value>admin@example.com</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
使用`@WebServlet`后无需配置 `web.xml` 更加清晰
`@WebServlet`注解 注意事项
推荐使用 `@WebServlet`
简化配置,提升开发效率
不要同时使用 `value()` 和 `urlPatterns()`
两者冲突会导致部署失败
不要在生产环境依赖 `loadOnStartup`
可能影响启动性能
支持通配符映射
如 `/api/*`、`*.do` 等
规则与 web.xml 一致
`@WebServlet`注解适用场景
场景 | 使用方式 |
快速开发小型项目 | 不需要复杂配置,直接用注解即可 |
微服务或模块化系统 | 每个模块独立配置自己的 Servlet |
教学或演示用途 | 减少 XML 配置,便于理解 |
Spring Boot 底层整合 | Spring Boot 内部也是基于此类注解构建 |