-
@JAVA过滤机制——过滤简介 1、过滤器三部分:过滤源(用户请求)——>过滤规则——>过滤结果 2、过滤器不处理结果,只做辅助性操作 3、定义:过滤器是一个【服务器端】的组件,它可以【截取用户端的请求和响应信息】,并对这些信息过滤 4.案列:登录案例、编码转换案例
查看全部 -
四种不同过滤器,通过四种不同标签,在xml中做标记就可以实现不同的监听
查看全部 -
用Filter处理编码问题:
在过滤器中添加:
request.setCharacterEncoding("utf-8");
或者:在web.xml中配置初始化参数
查看全部 -
登录案例中的放行:
查看全部 -
Servlet3.0支持注解形式的Filter
查看全部 -
过滤器的实现:
① 实现Filter接口
② 在web.xml中配置过滤器
查看全部 -
过滤器常见的使用场景
查看全部 -
web.xml配置
查看全部 -
过滤器可以改变用户请求的web资源,可以改变用户请求的路径(跳转);
过滤器不能直接返回数据,不能直接处理用户请求;
查看全部 -
过滤器工作原理:
过滤器生命周期:
过滤器链:
过滤器的分类:
查看全部 -
在web.xml中配置
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.filter.LoginFilter</filter-class>
<!-- 指定部分页面,在代码中实现对这些页面放行 -->
<init-param>
<param-name>noLoginPaths</param-name>
<param-value>index.jsp;login.jsp;LoginServlet;fail.jsp</param-value>
</init-param>
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>在Filter中
private FilterConfig config = null;public void init(FilterConfig arg0) throws ServletException {
config = arg0; // 将实例化时的init-param存入config
}public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
String charset = config.getInitParameter("charset"); // 从config中获得字符集
if(charset==null){
charset = "UTF-8";
}
request.setCharacterEncoding(charset); // 设定字符集为UTF-8
}编码转换 字符集转换防止乱码
使用: request.setCharacterEncoding("config.getInitParameter("XX")")
XX参数内容“UTF-8”
查看全部 -
@WebFilter注解的常用属性:
查看全部 -
Servelt2.5:过滤器的分类:
查看全部 -
过滤器分类(通过<dispatcher>标签)
通过<dispatcher>标签的值不同把过滤器分类.此标签中有四个值可以选择,可以同时选择多个.
包括request、forword、include、error
假设同一个过滤器关联了index.jsp与main.jsp.此过滤器的<dispatcher>标签值为request.
在过滤器中的doFilter()方法中
public void doFilter(ServletRequest req,ServletResponse rep,FilterChain chain){
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)rep;
response.sendRedirect(request.getContextPath()+"/main.jsp");
}
当用户访问index.jsp页面时,便会被过滤器截取.并执行doFilter()方法中的重定向去main.jsp页面.但main.jsp也关联了此过滤器,过滤器会截取到重定向新Web资源的请求.因此又会调用doFilter()方法中的重定向去main.jsp.所以是死循环的状态.
因为重定向是属于request的行为.因此会被<dispatcher>标签值为request的过滤器截取到.即<dispatcher>标签值为request的过滤器可以截取重定向新Web资源的请求.
当过滤器的doFilter()方法中用 request.getRequestDispatcher("/main.jsp").forward(arg0, arg1)请求转发到main.jsp.此时当用户请求访问index.jsp时,便会被过滤器截取,并且执行doFilter()方法,然后请求转发到main.jsp页面.此时用户可以访问到main.jsp页面,并没有被过滤器截取.因为请求转发属于forward行为.因此<dispatcher>标签值为request的过滤器是截取不了通过请求转发去新Web资源的请求.尽管<url-pattern>设置了main.jsp关联过滤器,但仍然截取不了.请求转发:浏览器的地址栏不会变化,性能相对更好一些,因为获取的资源是没有二次讲过浏览器的<br><br>
重定向:浏览器的地址栏是会变化的,获取资源的时候经过了二次通过浏览器发送请求的过程。1.请求转发
请求转发是指将请求再转发到另一资源(一般为JSP或Servlet)。此过程依然在同一个请求范围内,转发后浏览器地址栏内容不变
请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发到另外一个资源,并让该资源对浏览器的请求进行响应
RequestDispatcher rd = request.getRequestDispatcher(path); rd.forward(request,response);
或request.getRequestDispatcher(path) .forward(request,response);
2.重定向
重定向是指页面重新定位到某个新地址,之前的请求失效,进入一个新的请求,且跳转后浏览器地址栏内容将变为新的指定地址
重定向是通过HttpServletResponse对象的sendRedirect()来实现,该方法相当于浏览器重新发送一个请求
response.sendRedirect(path);
forward转发 :一次请求一次回应 服务器跳转
sendredirect重定向: 两次请求两次回应 客户端跳转
由于sendredirect是request,会激活REQUEST类型的过滤器,因此要注意,是否会形成重定向循环
request 过滤request请求
forward 过滤重定向请求
include 过滤include请求查看全部 -
过滤器链的执行过程:
用户请求-->过滤器1-->过滤器2-->servlet service-->过滤器2-->过滤器1-->用户
查看全部
举报