JavaServlet过滤器与监听器

学习峰哥Jsp教程自学笔记,峰哥Java学习路线:http://www.java1234.com/javaxuexiluxiantu.html

1、过滤器:

1)简介:过滤无效请求,避免非正常逻辑进入相关页面。

2)实现:

新建过滤器类,实现Filter接口,如下:

package com.demo.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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class LoginFilter implements Filter {

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

	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) servletRequest;
		HttpSession session = request.getSession();
		Object object = session.getAttribute("currentUser");
		String path = request.getServletPath();
		if (object == null && path.indexOf("login")<0) {
			request.getRequestDispatcher("login.jsp").forward(servletRequest, servletResponse);
		}else {
			//继续执行,不进行重定向。
			filterChain.doFilter(servletRequest,servletResponse);
		}
		
	}

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

}
过滤器在web.xml注册:

  <filter>
	<filter-name>loginFilter</filter-name>
  	<filter-class>com.demo.filter.LoginFilter</filter-class>
  </filter>
  
  <filter-mapping>
  	<filter-name>loginFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

这样就可以实现过滤,*表示所有的请求都经过监听器

2,监听器:
1)简介:
监听web 事件;如application,session,request值得增加,删除,与变化。
2)实现:
新建类监听,三个监听分别如下:

package com.demo.listener;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;

public class ApplicationAttributeListener implements ServletContextAttributeListener{

	public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
		System.out.println("Application添加的属性:"+ servletContextAttributeEvent.getName()+",属性值:" + servletContextAttributeEvent.getValue());
	}

	public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
		System.out.println("Application删除的属性:"+ servletContextAttributeEvent.getName()+",属性值:" + servletContextAttributeEvent.getValue());
	}

	public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
		System.out.println("Application修改的属性:"+ servletContextAttributeEvent.getName()+",属性值:" + servletContextAttributeEvent.getValue());
	}

}
package com.demo.listener;


import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;


public class RequesterAttributeLitener implements ServletRequestAttributeListener{


	public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {
		System.out.println("Requeste添加的属性:"+ servletRequestAttributeEvent.getName()+",属性值:" + servletRequestAttributeEvent.getValue());
		
	}


	public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {
		System.out.println("Requeste删除的属性:"+ servletRequestAttributeEvent.getName()+",属性值:" + servletRequestAttributeEvent.getValue());
		
	}


	public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {
		System.out.println("Requeste修改的属性:"+ servletRequestAttributeEvent.getName()+",属性值:" + servletRequestAttributeEvent.getValue());
	}


}
package com.demo.listener;


import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;


public class SessionAttributeListener implements HttpSessionAttributeListener {


	public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
		
		System.out.println("Session添加的属性:"+ httpSessionBindingEvent.getName()+",属性值:" + httpSessionBindingEvent.getValue());
		
	}


	public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {


		System.out.println("Session删除的属性:"+ httpSessionBindingEvent.getName()+",属性值:" + httpSessionBindingEvent.getValue());
		
	}


	public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
		
		System.out.println("Session修改的属性:"+ httpSessionBindingEvent.getName()+",属性值:" + httpSessionBindingEvent.getValue());
		
	}


}


web.xml注册如下:

 <listener>
  	<listener-class>
  		com.demo.listener.SessionAttributeListener
  	</listener-class>
  </listener>
  
   <listener>
  	<listener-class>
  		com.demo.listener.ApplicationAttributeListener
  	</listener-class>
  </listener>
  
    <listener>
  	<listener-class>
  		com.demo.listener.RequesterAttributeLitener
  	</listener-class>
  </listener>

实现的servlet如下:

package com.demo.web;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ListenerServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		this.doPost(httpServletRequest, httpServletResponse);
	}

	@Override
	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {		
		httpServletResponse.setCharacterEncoding("utf-8");
		HttpSession session = httpServletRequest.getSession();
		ServletContext application = httpServletRequest.getServletContext();
		httpServletRequest.setAttribute("request", "request值1");
		session.setAttribute("session", "session值1");
		application.setAttribute("application", "application值1");
		
		httpServletRequest.setAttribute("request", "request值2");
		session.setAttribute("session", "session值2");
		application.setAttribute("application", "application值2");
		
		httpServletRequest.removeAttribute("request");
		session.removeAttribute("session");
		application.removeAttribute("application");
		
		httpServletResponse.getWriter().print("操作完成");
		
	}
	
}


servlet注册如下:

 <servlet>
  	<servlet-name>ListenerServlet</servlet-name>
  	<servlet-class>com.demo.web.ListenerServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>ListenerServlet</servlet-name>
  	<url-pattern>/listener</url-pattern>
  </servlet-mapping>

访问的效果如下:

访问效果如下:

打印日志如下:

过滤器及监听器介绍到此。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值