【1】Servlet3.0前

① Servlet实例

实例代码如下,通常继承HttpServlet

public class HelloWorld extends HttpServlet {

private String message;

public void init() throws ServletException {
// 执行必需的初始化
message = "Hello World";
}

public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// 设置响应内容类型
response.setContentType("text/html");

// 实际的逻辑是在这里
PrintWriter out = response.getWriter();
out.println("<h1>" + message + "</h1>");
}

public void destroy() {
// 什么也不做
}
}

web.xml配置如下:

<web-app>      
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>

② Filter实例

实例类如下,通常继承Filter

public class UserFilter implements Filter {

@Override
public void destroy() {
// TODO Auto-generated method stub

}

@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
// 过滤请求
System.out.println("UserFilter...doFilter...");
//放行
arg2.doFilter(arg0, arg1);

}

@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}

}

web.xml配置如下:

<filter>  
<filter-name>FilterTest</filter-name>
<filter-class>com.web.UserFilter</filter-class>
</filter>
<!--映射过滤器-->
<filter-mapping>
<filter-name>FilterTest</filter-name>
<!--“/*”表示拦截所有的请求 -->
<url-pattern>/*</url-pattern>
</filter-mapping>

③ Listener

按监听的对象划分,可以分为

  • ServletContext对象监听器
  • HttpSession对象监听器
  • ServletRequest对象监听器

按监听的事件划分

  • 对象自身的创建和销毁的监听器
  • 对象中属性的创建和消除的监听器
  • session中的某个对象的状态变化的监听器

对应类如下:

javax.servlet.ServletContextListener
javax.servlet.ServletContextAttributeListener
javax.servlet.ServletRequestListener
javax.servlet.ServletRequestAttributeListener
javax.servlet.http.HttpSessionListener
javax.servlet.http.HttpSessionAttributeListener

实例代码如下:

public class UserListener implements ServletContextListener {

//监听ServletContext销毁
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("UserListener...contextDestroyed...");
}

//监听ServletContext启动初始化
@Override
public void contextInitialized(ServletContextEvent arg0) {
ServletContext servletContext = arg0.getServletContext();
System.out.println("UserListener...contextInitialized...");
}

}

web.xml配置如下:

<listener>
<listener-class>com.web.UserListener</listener-class>
</listener>

【2】Servlet3.0新特性

Servlet3.0提供了注解支持,可以不用使用web.xml配置。

Servlet3.0+环境下使用注解注册Servlet、Filter和Listener组件_Listener


① @WebServlet

其参数如下:

Servlet3.0+环境下使用注解注册Servlet、Filter和Listener组件_Filter_02


注解实例如下:

@WebServlet(name="helloServlet",urlPatterns={"/hello"},
initParams={@WebInitParam(name="age",value="11")})

实例类如下:

@WebServlet(name="helloServlet",urlPatterns={"/hello"},initParams={@WebInitParam(name="age",value="11")})
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
String age = getServletConfig().getInitParameter("age");
System.out.println("age-->"+age);
System.out.println(Thread.currentThread()+" start...");
try {
sayHello();
} catch (Exception e) {
e.printStackTrace();
}
resp.getWriter().write("hello...");
System.out.println(Thread.currentThread()+" end...");
}

public void sayHello() throws Exception{
System.out.println(Thread.currentThread()+" processing...");
// Thread.sleep(3000);
}

}

测试结果如下:

age-->11
Thread[http-apr-8080-exec-12,5,main] start...
Thread[http-apr-8080-exec-12,5,main] processing...
Thread[http-apr-8080-exec-12,5,main] end...

② @WebFilter

其参数如下:

Servlet3.0+环境下使用注解注册Servlet、Filter和Listener组件_Servlet_03


实例类如下:

@WebFilter(urlPatterns={"/*"})
public class UserFilter implements Filter {

@Override
public void destroy() {
// TODO Auto-generated method stub

}

@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
// 过滤请求
System.out.println("UserFilter...doFilter...");
//放行
arg2.doFilter(arg0, arg1);

}

@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}
}

测试结果如下:

Servlet3.0+环境下使用注解注册Servlet、Filter和Listener组件_Servlet_04

注意哦,这里先执行了过滤器,后执行了servlet。


③ @WebListener

其注解源码如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebListener {

/**
* @return description of the listener, if present
*/
String value() default "";
}

实例代码如下:

@WebListener
public class UserListener implements ServletContextListener {
//监听ServletContext销毁
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("UserListener...contextDestroyed...");
}

//监听ServletContext启动初始化
@Override
public void contextInitialized(ServletContextEvent arg0) {
ServletContext servletContext = arg0.getServletContext();
System.out.println("UserListener...contextInitialized...");
}

}

测试结果如下:

Servlet3.0+环境下使用注解注册Servlet、Filter和Listener组件_Servlet_05