Java中Filter、Servlet、Listener的学习资料,希望大家喜欢
1、Filter的功能
filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).
一个Filter包括:
1)、在servlet被调用之前截获;
2)、在servlet被调用之前检查servlet request;
3)、根据需要修改request头和request数据;
4)、根据需要修改response头和response数据;
5)、在servlet被调用之后截获.
服务器每次只调用setFilterConfig方法一次准备filter 的处理;调用doFilter方法多次以处理不同的请求.FilterConfig接口有方法可以找到filter名字及初始化参数信息.服务器可以设置 FilterConfig为空来指明filter已经终结。
每一个filter从doFilter()方法中得到当前的request及response.在这个方法里,可以进行任何的针对request及 response的操作.(包括收集数据,包装数据等).filter调用chain.doFilter()方法把控制权交给下一个filter.一个 filter在doFilter()方法中结束.如果一个filter想停止request处理而获得对response的完全的控制,那它可以不调用下 一个filter
例子:
首先新建一个Filter
package com.ee.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class LogFilter implements Filter {
private FilterConfig filterConfig;
public FilterConfig getFilterConfig() {
System.err.println("...getFilterConfig...");
return filterConfig;
}
public void setFilterConfig(FilterConfig filterConfig) {
System.err.println("...setFilterConfig...");
this.filterConfig = filterConfig;
}
@Override
public void destroy() {
System.err.println("...filter destroy...");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.err.println("...doFilter...");
chain.doFilter(request, response);//看到这没,这只要是传递下一个Filter
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.err.println("...init Filter...");
this.filterConfig = filterConfig;
}
}
在web.xml里配置
LogFilter com.ee.filter.LogFilter LogFilter package com.ee.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LogServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.err.println("...doPost(req, resp)..."); } }
在web.xml中的配置:
LogServlet com.ee.servlet.LogServlet LogServlet package com.ee.listener; import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletContextAttributeListener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class onlineUserListener implements HttpSessionListener, ServletContextListener, ServletContextAttributeListener { private long onlineUserCount = 0; public long getonlineUserCount() { return onlineUserCount; } @Override public void attributeAdded(ServletContextAttributeEvent arg0) { } @Override public void attributeRemoved(ServletContextAttributeEvent arg0) { } @Override public void attributeReplaced(ServletContextAttributeEvent attributeEvent) { System.err.println("...attributeReplaced..."); } @Override public void contextDestroyed(ServletContextEvent arg0) { } @Override public void contextInitialized(ServletContextEvent arg0) { } @Override public void sessionCreated(HttpSessionEvent httpSessionEvent) { onlineUserCount ++; toUpdateCount(httpSessionEvent); } @Override public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { onlineUserCount --; toUpdateCount(httpSessionEvent); } private void toUpdateCount(HttpSessionEvent httpSessionEvent){ httpSessionEvent.getSession().setAttribute("onlineUserCount", onlineUserCount); } }
Web.xml
com.ee.listener.OnlineUserListener
JSP页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>主页 你好! 在线人数:<%=request.getSession().getAttribute("onlineUserCount") %>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



