Servlet 3.0注解使用详解与实战指南
一、Servlet 3.0注解的引入背景
在Servlet 3.0之前,所有的Servlet配置都必须通过web.xml文件来完成。这种配置方式存在以下问题:
- 配置繁琐:每个Servlet、Filter、Listener都需要在web.xml中进行冗长的配置
- 代码与配置分离:Servlet类和它的配置信息分散在不同文件中,不利于维护
- 开发效率低:每次修改配置都需要重新部署应用
- 不支持动态部署:无法在运行时动态添加Servlet
Servlet 3.0(JSR 315)引入了注解机制,彻底改变了Servlet的配置方式,允许开发者通过注解直接在Java类上配置Servlet、Filter和Listener,极大地提高了开发效率。
二、核心注解介绍与使用
2.1 @WebServlet注解
@WebServlet是Servlet 3.0中最核心的注解,用于将一个Java类声明为Servlet。
基本语法:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
String name() default "";
String[] value() default {};
String[] urlPatterns() default {};
int loadOnStartup() default -1;
WebInitParam[] initParams() default {};
boolean asyncSupported() default false;
String smallIcon() default "";
String largeIcon() default "";
String description() default "";
String displayName() default "";
}使用示例:
// 简单Servlet配置
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("Hello Servlet 3.0!");
}
}
// 复杂Servlet配置
@WebServlet(
name = "UserServlet",
urlPatterns = {"/user", "/api/user"},
loadOnStartup = 1,
initParams = {
@WebInitParam(name = "userName", value = "admin"),
@WebInitParam(name = "password", value = "123456")
}
)
public class UserServlet extends HttpServlet {
private String userName;
private String password;
@Override
public void init() throws ServletException {
userName = getServletConfig().getInitParameter("userName");
password = getServletConfig().getInitParameter("password");
}
// ... doGet/doPost方法实现
}