JavaServlet过滤器与监听器
2016-12-21 14:56
405 查看
学习峰哥Jsp教程自学笔记,峰哥Java学习路线:http://www.java1234.com/javaxuexiluxiantu.html
1、过滤器:
1)简介:过滤无效请求,避免非正常逻辑进入相关页面。
2)实现:
新建过滤器类,实现Filter接口,如下:
<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>
访问的效果如下:
访问效果如下:
![](https://img-blog.csdn.net/20161221150523621?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamluamluMTAwODY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
打印日志如下:
![](https://img-blog.csdn.net/20161221150531668?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamluamluMTAwODY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
过滤器及监听器介绍到此。
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>
访问的效果如下:
访问效果如下:
打印日志如下:
过滤器及监听器介绍到此。
相关文章推荐
- 我的Java之旅 第八课 Servlet 进阶API、过滤器与监听器
- 【Java学习20170427】Servlet过滤器和监听器
- java中拦截器 过滤器 监听器 、servlet原理
- 我的Java之旅 第八课 Servlet 进阶API、过滤器与监听器
- Java-Web系列(四)--servlet,过滤器,监听器
- Java基础——Servlet(七)过滤器&监听器 相关
- Servlet中的过滤器(拦截器)Filter与监听器Listener的作用和区别
- Servlet的基础概念 监听器 过滤器等【转】
- java--监听器、过滤器
- 使用servlet过滤器和监听器
- Java Web Servlet过滤器
- servlet过滤器和监听器
- Servlet中过滤器、监听器的区别
- Web小结---Servlet,JSP,过滤器和监听器,四个作用域和九个内置对象,EL表达式语言,自定义标签,JSTL,国际化与汉字的编码
- 使用servlet过滤器和监听器
- JavaWeb_day5-监听器和过滤器
- java Servlet过滤器
- 使用servlet过滤器和监听器
- Web小结---Servlet,JSP,过滤器和监听器,四个作用域和九个内置对象,EL表达式语言,自定义标签,JSTL,国际化与汉字的编码
- Servlet,JSP,过滤器和监听器,四个作用域和九个内置对象,EL表达式语言,自定义标签,JSTL