注释可以替换Web部署描述符文件(web.xml)中的等效XML配置,例如servlet声明和servlet映射。Servlet容器将在部署时处理带注释的类。
@WebServlet用于通过容器声明Servlet的配置。下表包含用于WebServlet批注的属性的列表。
属性 | 用处 |
---|---|
String name | Servlet的名称 |
String[] value | URL格式数组 |
String[] urlPatterns | 过滤器的URL格式数组 |
Int loadOnStartup | 提供启动顺序提示 |
WebInitParam[] initParams | Servlet的初始化参数数组 |
Boolean asyncSupported | 支持Servlet异步操作 |
String smallIcon | Servlet的小图标(如果有) |
String largeIcon | Servlet的大图标(如果有) |
String description | 该Servlet的描述(如果有) |
String displayName | 该Servlet的显示名称(如果有) |
注释的value或urlPattern属性中必须声明至少一个URL模式 ,但不能两者都声明。
下面的示例描述如何使用@WebServlet批注。这是一个简单的servlet,显示文本Hello Servlet。
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//注释标记为Servlet,相当于在web.xml上标记了该servlet且url-pattern为 "/Simple"
@WebServlet(value = "/Simple")
public class Simple extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("");
out.print("Hello Servlet
");
out.print("");
}
}
@WebInitParam批注用于为Servlet或Filter指定初始化参数。在WebFilter或WebSevlet批注中使用它。下表包含用于WebInitParam批注的属性的列表。
属性 | 用处 |
---|---|
String name | 初始化参数的名称 |
String value | 初始化参数的值 |
String description | 初始化参数说明 |
以下示例描述了如何将@WeInitParam注释与@WebServlet注释一起使用。这是一个简单的servlet,显示文本Hello Servlet和字符串值Hello World!从init参数中获取。
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
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;
@WebServlet(value = "/Simple", initParams = {
//通过name存储value在初始化参数列表中
@WebInitParam(name = "foo", value = "Hello "),
@WebInitParam(name = "bar", value = " World!")
})
public class Simple extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("");
out.print("Hello Servlet
");
//通过name获取初始化值
out.println(getInitParameter("foo"));
out.println(getInitParameter("bar"));
out.print("");
}
}
这是用于声明servlet过滤器的注释。容器在部署时对其进行处理,并将相应的过滤器应用于指定的URL模式,Servlet和调度程序类型。
所述@WebFilter注解定义在web应用中的过滤器。此注释在类中指定,并且包含有关要声明的过滤器的元数据。带注释的过滤器必须指定至少一个URL模式。下表列出了用于WebFilter批注的属性。
属性 | 作用 |
---|---|
String filterName | 过滤器名字 |
String[] urlPatterns | 提供过滤器适用的值或url格式数组 |
DispatcherType[] dispatcherTypes | 指定过滤器适用的调度程序(请求/响应)的类型 |
String[] servletNames | 提供一个servlet名称数组 |
String displayName | 过滤器名称 |
String description | 过滤器说明 |
WebInitParam[] initParams | 过滤器的初始化参数数组 |
Boolean asyncSupported | 过滤器支持的异步操作 |
String smallIcon | 过滤器的小图标(如果有) |
String largeIcon | 过滤器的大图标(如果有) |
下面的示例描述如何使用@WebFilter批注。它是一个简单的LogFilter,可在控制台上显示 Init-param test-param 的值和当前时间时间戳。这意味着,过滤器的工作方式就像请求和响应之间的接口层。在这里,我们将“/*”用于urlPattern。这意味着,此过滤器适用于所有servlet。
package servlet;
import java.io.IOException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.*;
import java.util.*;
//urlPatterns = {"/*"}相当于/*
@WebFilter(urlPatterns = {"/*"}, initParams = {
//添加初始值
@WebInitParam(name = "test-param", value = "Initialization Paramter")})
public class LogFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
//获取初始化值
String testParam = config.getInitParameter("test-param");
//打印在控制台
System.out.println("Test Param: " + testParam);
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//获取当前时间
System.out.println("Time " + new Date().toString());
//将请求传递回过滤链
chain.doFilter(request,response);
}
public void destroy( ) {
/* 在删除过滤器实例之前调用
通过Web容器进行服务*/
}
}
上一篇:Servlet-点击计数器