过滤器Filter和监听器
过滤器Filter(重点)
过滤器Filter:过滤器,用来过滤网站的数据;
- 处理中文乱码
- 登录验证...
开发步骤:
-
导包
-
编写过滤器
- 导包不要导错

- 实现Filter接口,重写对应的方法
//初始化;web服务器启动就一同初始化 public void init(FilterConfig filterConfig) throws ServletException { System.out.println("characterEncodingFilter初始化"); } //chain 链 /* 1.过滤中的所有代码,在过滤特定请求时都会执行 2.必须要让过滤器继续同行 chain.doFilter(request,response); */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8");// System.out.println("characterEncodingFilter执行前"); chain.doFilter(request, response);//让我们的请求继续走,如果不写这行,那程序到这就停止了 System.out.println("characterEncodingFilter执行后"); } //web服务器关闭时,才会被销毁 public destroy() { System.out.println("characterEncodingFilter销毁"); }- 在web.xml中配置Filter
<filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>com.yehuw.filter.characterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <!--只要是 /filter的任何请求,都会经过这个过滤器--> <url-pattern>/filter/*</url-pattern> </filter-mapping>
监听器Listener
实现一个监听器的接口(有N种)
-
编写一个监听器
//统计网站在线人数,对Session进行计数 public class onlineCountListener implements HttpSessionListener { //创建session监听 //一旦创建session就会触发一次这个事件 public void sessionCreated(HttpSessionEvent se) { ServletContext servletContext = se.getSession().getServletContext(); System.out.println(se.getSession().getId()); Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount"); if (onlineCount == null) { onlineCount = new Integer(1); } else { int count = onlineCount.intValue(); onlineCount = new Integer(count + 1); } servletContext.setAttribute("OnlineCount",onlineCount); } //销毁session监听 //一旦销毁session就会触发一次这个事件 public void sessionDestroyed(HttpSessionEvent se) { ServletContext servletContext = se.getSession().getServletContext(); Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount"); if (onlineCount == null) { onlineCount = new Integer(0); } else { int count = onlineCount.intValue(); onlineCount = new Integer(count - 1); } servletContext.setAttribute("OnlineCount",onlineCount); } /* Session销毁: 1.手动销毁: getSession().invalidate(); 2.自动销毁 */ } -
web.xml中注册监听器
<!--配置监听器--> <listener> <listener-class>com.yehuw.listener.onlineCountListener</listener-class> </listener> -
看情况是否使用!在GUI编程中经常使用
public static void main(String[] args) { Frame frame = new Frame("中秋节快乐!"); Panel panel = new Panel(null); frame.setLayout(null); frame.setBounds(300,300,500,500); frame.setBackground(Color.blue); panel.setBounds(frame.getX()/2,frame.getY()/2,frame.getX()/2,frame.getY()/2); panel.setBackground(Color.green); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0);//0是正常退出,1是不正常退出 } }); frame.add(panel); frame.setVisible(true); }

浙公网安备 33010602011771号