介绍
当涉及到Java Web开发时,Servlet、Filter和Listener是三个重要的组件。
Servlet:
Servlet是一个Java类,用于处理客户端发送的请求并生成响应。
它基于Java Servlet API,提供了一种处理Web请求的标准方式。
Servlet通常被部署在Servlet容器(如Tomcat、Jetty等)中运行。
Servlet可以处理不同类型的请求(如GET、POST等),并生成相应的HTTP响应。
Servlet可以访问请求的参数、头信息、会话数据等,并与数据库或其他资源进行交互。
Servlet还可以通过编程方式将请求转发到其他Servlet或将响应重定向到其他URL。
Filter:
Filter是一个Java类,用于在请求和响应之间执行预处理和后处理逻辑。
它可以对请求进行过滤、修改请求参数、验证用户身份、记录日志等操作。
Filter基于Java Servlet Filter API,通过链式调用方式,可以形成一个过滤器链,依次处理请求。
Filter可以在请求到达Servlet之前拦截请求,并在响应返回给客户端之前对响应进行处理。
Filter可以用于实现通用的功能,如身份验证、授权、日志记录、字符编码转换等。
Listener:
Listener是一个Java类,用于监听Web应用程序中发生的事件。
它基于Java Servlet Listener API,可以监听Servlet上下文、请求、会话等不同类型的事件。
Servlet上下文监听器(ServletContextListener)用于在应用程序启动和关闭时执行一些初始化和清理工作。
请求监听器(ServletRequestListener)用于在请求开始和结束时执行一些逻辑,如记录请求信息。
会话监听器(HttpSessionListener)用于监听会话的创建和销毁事件,可以进行会话管理和统计等操作。
Listener可以在应用程序中注册,并通过回调方法响应特定的事件。
Demo
核心代码如下:
MyServlet
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/website")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp){
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp){
System.out.println("website->"+req.getParameter("website"));
}
}
MyFilter
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
import javax.servlet.*;
@WebFilter("/*")
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig){
System.out.println("myFilter->init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("myFilter->doFilter");
chain.doFilter(request,response);
}
@Override
public void destroy() {
System.out.println("myFilter->destroy");
}
}
MyListener
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class MyListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("myListener->requestDestroyed");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("myListener->requestInitialized");
}
}