让我来详细讲解一下JavaWeb的监听器和过滤器。
监听器
介绍
在JavaWeb中,监听器是用来监听应用程序中发生的事件的组件。事件可以是请求的到来、属性的改变以及session创建和销毁等。监听器可以在事件发生时执行预先定义好的业务逻辑,从而实现对应用程序的控制。JavaWeb中定义了多种类型的监听器,如ServletContextListener、HttpSessionListener、ServletRequestListener、ServletContextAttributeListener和HttpSessionAttributeListener等。
ServletContextListener示例
下面是一个ServletContextListener示例,它会在应用程序启动或关闭时打印启动或关闭信息:
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("应用程序已启动!");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("应用程序已关闭!");
}
}
HttpSessionListener示例
下面是一个HttpSessionListener示例,它会在session创建和销毁时打印信息:
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MyHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("Session " + se.getSession().getId() + " 已创建!");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("Session " + se.getSession().getId() + " 已销毁!");
}
}
过滤器
介绍
在JavaWeb中,过滤器是用来拦截请求和响应的组件,可以在请求被分发到目标Servlet之前或响应被返回给客户端之前操作请求或响应。过滤器可用于URL请求的授权、日志记录、字符集设置、防止XSS攻击等。
字符集过滤器示例
下面是一个字符集过滤器示例,它会将每个请求的字符集设置为UTF-8:
import javax.servlet.*;
import java.io.IOException;
public class CharsetFilter implements Filter {
private String encoding = "UTF-8";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
if (filterConfig.getInitParameter("encoding") != null) {
encoding = filterConfig.getInitParameter("encoding");
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
XSS过滤器示例
下面是一个XSS过滤器示例,它会对请求参数进行XSS过滤:
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.IOException;
import java.util.regex.Pattern;
public class XssFilter implements Filter {
private static final Pattern SCRIPT_PATTERN = Pattern.compile("<script>(.*?)</script>");
private static final Pattern IMG_PATTERN = Pattern.compile("<img(.*?)>");
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
chain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) request), response);
}
@Override
public void destroy() {
}
private static class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
public XssHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
}
@Override
public String getParameter(String name) {
String value = super.getParameter(name);
if (value != null) {
value = SCRIPT_PATTERN.matcher(value).replaceAll("");
value = IMG_PATTERN.matcher(value).replaceAll("");
}
return value;
}
}
}
这两个示例展示了如何使用JavaWeb的监听器和过滤器,开发者可以根据实际需求进行构建。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaWeb的监听器和过滤器你了解吗 - Python技术站