您的位置:首页 > 编程语言 > Java开发

JavaServlet过滤器与监听器

2016-12-21 14:56 405 查看
学习峰哥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>

访问的效果如下:
访问效果如下:



打印日志如下:



过滤器及监听器介绍到此。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: