第一:概念
1.过滤器:放在客户端和服务器之间,客户端发送的请求先通过过滤器,当然在服务器响应给客户端的时候也需要先通过过滤器到达客户端。
因此,过滤器可以获取请求数据和响应的数据。在过滤器里还可以做中文乱码处理等(只需要做一次,因为所有的请求和响应都要通过过滤器)
2.由于情求和响应都要由过滤器处理,因此过滤器里有request对象和response对象
2.过滤器的作用(拦截请求,并判断,通过的之后把请求向下传递):
---1.可以做中文乱码处理,2,可以做访问控制。3,响应数据的压缩
3.在comm中创建一个类,并继承Filter接口。要想用它里面的request和response就要向下转型,因为Filter是抽象类,因此要用他的实现类。
chain是过滤器链,chain.dofilter()方法用于把请求向下传递。
filterConfing是过滤器的配置,用于在init方法中接收web.xml中配置的参数值。
4.写完过滤器类之后,就在配置文件里配置过滤器。在配置文件中写servlet是配置一个路径,在配置文件中配置filter是配置很多路径
5.过滤器的实例化和初始化的方法是在启动服务器的时候就开始执行的。
6.步骤:1.把不需要过滤的路径放在集合中,首先进行判断是不是不需要过滤的路径。如果该路径不需要过滤,就使用chain链向下传递请求
2.如果是需要过滤的路径,就使用session判断(session的访问控制)
7.注意:如果不使用集合进行封装不需要过滤的路径,那就表示所有路径都要过滤,因此重定向的之后客户端再次发送请求的路径又会进入过滤器方法,导致死循环。
第二:相关代码
package com.comm;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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;
public class RequestFilter implements Filter {
String charset=null;
public RequestFilter()
{
System.out.println("============RequestFilter");
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
//中文乱码处理
request.setCharacterEncoding(charset);
HttpSession session = request.getSession();
Object obj = session.getAttribute("u");
System.out.println("----------请求传递之前");
//不用进行访问控制的路径
List<String> path=new ArrayList<String>();
path.add("/userLogin.html");
path.add("/userServlet");
String p=request.getServletPath();
System.out.println(p);
if(path.contains(p))
{
//将请求向下传递
chain.doFilter(request, response);
}
else
{
//判断用户是否登录
if(obj!=null)
{
//将请求向下传递
chain.doFilter(request, response);
}
else
{
response.sendRedirect("userLogin.html");
}
}
System.out.println("----------请求传递之后");
}
@Override
public void init(FilterConfig fc) throws ServletException {
// TODO Auto-generated method stub
charset=fc.getInitParameter("charset");
System.out.println("============ init(FilterConfig fc) "+charset);
}
}
相关推荐
NULL 博文链接:https://1601844782.iteye.com/blog/2274209
NULL 博文链接:https://1601844782.iteye.com/blog/2273999
资源名称:j2ee视频servlet视频教程资源目录:【】j2ee视频servlet第0讲开山【】j2ee视频实战教程servlet第1讲初识【】j2ee视频实战教程servlet第2讲(上集)【】j2ee视频实战教程servlet第2讲(下集)【】j2ee视频实战...
J2EE实例:电子商城系统源代码.rar J2EE合实例:电子商城系统源代码.rar
从EDOC模型到J2EE程序:一个MDA工具的实现 从EDOC模型到J2EE程序:一个MDA工具的实现 从EDOC模型到J2EE程序:一个MDA工具的实现
Servlet 2.4 API帮助文档 chm英文版 是本人根据sun官方j2eeri-1_4-doc-api制作而成!欢迎各位下载使用.如有任何意见和建议请联系我... Java Servlet Development Kit 2.4 DocumenTation by Cn.zwj186.chm
NULL 博文链接:https://1601844782.iteye.com/blog/2271809
NULL 博文链接:https://1601844782.iteye.com/blog/2274208
J2EE基础:对于Spring初学者的学习建议.doc
JSF是基于Java的Web应用开发领域里提供了一个可重用、可扩展、基于组件、工具友好的服务器端UI框架。在支持JSF的RAD开发工具中,人们可以像使用Visual Studio.NET一样方便快捷地构建Web用户界面,大大降低了利用Java...
NULL 博文链接:https://1601844782.iteye.com/blog/2271821
用 J2EE 开发企业应用程序时,它向人们提供了众多选项 — 使得为基础...在本文,也就是该系列的第 1 部分中,LearningPatterns 的高级顾问 Kyle Gabhart 比较了两种用于无状态网络的 J2EE 技术:servlet 和 EJB 技术
NULL 博文链接:https://1601844782.iteye.com/blog/2271756
J2EE教程: Struts+Spring+JSF+Hibermate+EJB+XML+WebService+Ajax 工35M分为4个部分.前个写错了..不好意思..
J2EE教程: Struts+Spring+JSF+Hibermate+EJB+XML+WebService+Ajax 工35M分为3个部分.
J2EE教程: Struts+Spring+JSF+Hibermate+EJB+XML+WebService+Ajax 工35M分为4个部分.
自己在平常学习中积累下来的,希望有所帮助嘛呵呵呵呵呵呵
第02章:Servlet与JSP核心技术课程--2、CBD基于组件开发-CBD基于组件开发.rmvb 第03章:Servlet与JSP核心技术课程--3、Servlet&JSP概述-Servlet&JSP概述(1).rmvb 第03章:Servlet与JSP核心技术课程--3、Servlet&JSP...
11.2.1 ActionServlet(分发器) 11.2.2 Action(控制器) 11.2.3 Action Mapping(映射) 11.2.4 ActionForm(表单控制器) 11.2.5 ActionErrors(错误处理) 11.2.6 DispatchAction(多动作控制器) 11.3 利用...