过滤器,拦截器,监听器

1.过滤器

Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁,以下通过过滤编码的代码示例来了解它的使用:

程序:

package edu.cn.fyt.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.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *@author  fangyitao
 *@date  2017年4月12日
 *@time  下午3:35:44 
 *@description 过滤器
 *@return
 */
public class MyFilter implements Filter {

@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest servletRequest = (HttpServletRequest) request;
HttpServletResponse  servletResponse = (HttpServletResponse) response;
HttpSession session = servletRequest.getSession();

// 获得用户请求的URI
String path = servletRequest.getRequestURI();

//获取用户ID
String useId = (String) session.getAttribute("userId");
// 登陆页面无需过滤
if(path.indexOf("/login.html") > -1) {
  chain.doFilter(servletRequest, servletResponse);
  return;
}  
if (useId == null || "".equals(useId)) {
  // 跳转到登陆页面
  servletResponse.sendRedirect("./login.html");
 } else {
  // 已经登陆,继续此次请求
  chain.doFilter(request, response);
 }
}
@Override
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub

}
}


web.xml配置:

<!-- 配置登陆过滤器 -->
<filter>
  <filter-name>login</filter-name>
  <filter-class>edu.cn.fyt.filter.MyFilter</filter-class>
  </filter>
  <filter-mapping>
  <filter-name>login</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>


2.拦截器

拦截器是在面向切面编程中应用的,就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法。是基于JAVA的反射机制

程序:

package edu.cn.fyt.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
 *@author  fangyitao
 *@date  2017年4月10日
 *@time  上午9:50:15 
 *@description 拦截器
 *@return
 */
public class MyHandlerInterceptor implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub

}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object arg2, ModelAndView arg3) throws Exception {
// TODO Auto-generated method stub

}

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object arg2) throws Exception {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
return true;
}
}

配置(不配置在web.xml):

<!-- 拦截器配置 -->
<bean class="edu.cn.fyt.interceptor.MyHandlerInterceptor"></bean>


3.监听器

现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。

程序:

package edu.cn.fyt.listener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
 *@author  fangyitao
 *@date  2017年4月12日
 *@time  下午4:22:37 
 *@description 监听器
 *@return
 */
public class MyListener implements HttpSessionListener {
private int userNumber = 0;
@Override
public void sessionCreated(HttpSessionEvent sessionEvent) {
// TODO Auto-generated method stub
userNumber++;
sessionEvent.getSession().setAttribute("userNumber", userNumber);
}
@Override
public void sessionDestroyed(HttpSessionEvent sessionEvent) {
// TODO Auto-generated method stub
userNumber--;
sessionEvent.getSession().setAttribute("userNumber", userNumber);
}
}

web.xml配置:

<!-- 监听器 -->
 <listener>
      <listener-class>edu.cn.fyt.listener.MyListener</listener-class>
   </listener>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值