第一:概念
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);
}
}
相关推荐
在编写Filter时,需要实现Filter接口,从而创建一个处理Web请求的过滤器。在J2EE中,重定向到另一个页面通常使用HttpServletResponse的sendRedirect方法。 以上知识点涵盖了从基本的Web开发技术到框架配置、对象...
- **知识要点**:Filter过滤器、Listener监听器的用法、EL表达式和JSTL标签的应用。 - **学习目的**:这些技术的学习有助于提高Web应用的安全性和灵活性。 #### 13. Log4j、Ant、数据库缓冲池 - **知识要点**:Log...
架构模式如管道/过滤器、面向对象、事件驱动、层次、知识库和客户机/服务器模式,各有优劣,适用于不同场景。中间件作为连接操作系统、网络和数据库的关键软件,包括数据库访问中间件、远程过程调用(RPC)、面向消息...
嵌入式八股文面试题库资料知识宝典-华为的面试试题.zip
训练导控系统设计.pdf
嵌入式八股文面试题库资料知识宝典-网络编程.zip
人脸转正GAN模型的高效压缩.pdf
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
少儿编程scratch项目源代码文件案例素材-鸡蛋.zip
嵌入式系统_USB设备枚举与HID通信_CH559单片机USB主机键盘鼠标复合设备控制_基于CH559单片机的USB主机模式设备枚举与键盘鼠标数据收发系统支持复合设备识别与HID
嵌入式八股文面试题库资料知识宝典-linux常见面试题.zip
面向智慧工地的压力机在线数据的预警应用开发.pdf
基于Unity3D的鱼类运动行为可视化研究.pdf
少儿编程scratch项目源代码文件案例素材-霍格沃茨魔法学校.zip
少儿编程scratch项目源代码文件案例素材-金币冲刺.zip
内容概要:本文深入探讨了HarmonyOS编译构建子系统的作用及其技术细节。作为鸿蒙操作系统背后的关键技术之一,编译构建子系统通过GN和Ninja工具实现了高效的源代码到机器代码的转换,确保了系统的稳定性和性能优化。该系统不仅支持多系统版本构建、芯片厂商定制,还具备强大的调试与维护能力。其高效编译速度、灵活性和可扩展性使其在华为设备和其他智能终端中发挥了重要作用。文章还比较了HarmonyOS编译构建子系统与安卓和iOS编译系统的异同,并展望了其未来的发展趋势和技术演进方向。; 适合人群:对操作系统底层技术感兴趣的开发者、工程师和技术爱好者。; 使用场景及目标:①了解HarmonyOS编译构建子系统的基本概念和工作原理;②掌握其在不同设备上的应用和优化策略;③对比HarmonyOS与安卓、iOS编译系统的差异;④探索其未来发展方向和技术演进路径。; 其他说明:本文详细介绍了HarmonyOS编译构建子系统的架构设计、核心功能和实际应用案例,强调了其在万物互联时代的重要性和潜力。阅读时建议重点关注编译构建子系统的独特优势及其对鸿蒙生态系统的深远影响。
嵌入式八股文面试题库资料知识宝典-奇虎360 2015校园招聘C++研发工程师笔试题.zip
嵌入式八股文面试题库资料知识宝典-腾讯2014校园招聘C语言笔试题(附答案).zip
双种群变异策略改进RWCE算法优化换热网络.pdf