-
1、HttpRequest和ServletRequest区别
2、FilterInit(FilterConfig)初始化的用法
3、requset.getRequestURI() //获取请求页面的相对路径
4、String的方法str.indexOf("XXX") //获取str内容"XXX"在那个位置第一位为0
5、String的方法str.split(";") //才分str为多个string,以";"为才分线request.getContextPath();
save user info to session
在doFilter中获得ServletRequest convert to HttpServletRequest之后,request.getSession,接着在获得的session中设置
过滤的黑名单和白名单需要在FitlerConfig中配置
对于白名单放行
if true chain.doFilter
黑名单跳转到相应的处理页面
else response.sendRedirect
FilterConfig配置
filter url:/*(*号是全匹配)
request.getRequestURI();(获得当前request请求的URI地址,用于判断是否合法请求)
使用参数配置->init()->config.getInitParameter(name)(获得FilterConfig)查看全部 -
1.概念:过滤器是一个服务器上的组件,它可以截取用户端的请求和相应信息,并对这些信息过滤<br>
2.工作原理:<br>
用户请求——》xml文件中如果过滤器可以匹配则截取,否则不走过滤器——》过滤器放行方法之前的代码——》web资源——》web的响应返回到过滤器,然后过滤器执行方兴方法之后的代码——》过滤器把web的响应返回给用户<br>
<br>
<br>
3.过滤器的生命周期:
实例化:web容器加载过滤器的配置信息<br>
初始化:filterServlet中的init()方法获得配置信息,放到filterConfig对象里面<br>
private FilterConfig cf;<br>
public void init(FilterConfig arg0) throws ServletException {<br>
cf = arg0;<br>
}<br>
过滤 :进行过滤操作<br>
销毁:执行完毕销毁<br>
<br>
<br>
4.过滤器的API:
5.多个过滤器(过滤器链)<br>
<br>
6.过滤器分类<br>
<br>
7.过滤器实例:登录过滤器和编码过滤器查看全部 -
我来说说我对异步过滤器的理解吧。根据过滤器的规则,过滤器得等servlet执行结束才能停止,所以如果servlet执行很久,过滤器得等很久,所以说呢,为了使得过滤器早点执行结束,就让servlet在后台执行,过滤器提前结束,这就是异步过滤器的优点所在
@WebServlet(asyncSupported = true, displayName = "/AsyncServlet", urlPatterns={"/servlet/AsyncServlet"})
asyncSupported = true 是必须开启用以支持异步
@WebFilter(filterName="AsynFilter",asyncSupported=true,value={"/servlet/AsyncServlet"},dispatcherTypes={DispatcherType.REQUEST,DispatcherType.ASYNC})
asyncSupported = true 是必须开启用以支持异步
dispatcherTypes={DispatcherType.REQUEST,DispatcherType.ASYNC}
DispatcherType.REQUEST必须要加上,否则过滤器就不会生效了
同时注意在过滤的地址和servlet的地址必须相同查看全部 -
request 用户直接访问页面时(eg:请求response.sendredirect请求重定向),Web容器将会调用过滤器
forward 目标资源通过RequestDispatcher的forward访问时,该过滤器被调用 <jsp:forward也能触发
include 目标资源通过RequestDispatcher的include访问时,该过滤器被调用 <jsp:include也能触发
error 目标资源通过声明式处理机制调用时,该过滤器被调用<error-page>
<error-code>404</error-code>//500
<location>/error.jsp</location>
</error-page>
<filter>
<filter-name>ErrorFilter</filter-name>
<filter-class>com.imooc.filter.ErrorFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ErrorFilter</filter-name>
<url-pattern>/error.jsp</url-pattern>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
@error.jsp
您输入的路径有误!
@ErrorFilter.java
public void doFilter(ServletRequest servletrequest,
ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
System.out.println("检测到有错误的信息!");
filterchain.doFilter(servletrequest, servletresponse);//注意:放行
}
Servlet3.0中加入了@引言的这种方式.
@WebFilter用来将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器.(部署理解为项目发布,就会把Web.xml文件与项目的文件读取在Web容器里,部署的时候容器就会识别注解,将相应的类部署为过滤器.启动服务器才执行过滤器的初始化方法.)
则添加过滤器不需要再web.xml中配置.直接在过滤器类里加入@WebFilter声明即可.
filter-mapping元素用来声明Web应用中的过滤器映射。过滤器可被映射到一个servlet或一个URL模式。将过滤器映射到一个servlet中会造成过滤器作用于servlet上。将过滤器映射到一个URL模式中则可以将过滤器应用于任何资源,只要该资源的URL与URL模式匹配。过滤是按照部署描述符的filter-mapping元素出现的顺序执行的。
过滤器filter-mapping的<servlet-name>标签意思是过滤器关联Servlet,当某些用户请求访问Servlet的时候,会被过滤器截取请求.(即Web容器会调用过滤器的doFilter()方法)
过滤器filter-mapping的<url-pattern>标签意思是过滤器关联的URL地址.当用户访问关联的URLWeb资源时,会被过滤器截取请求.(即Web容器会调用过滤器的doFilter()方法)
图中上部分是Servlet3.0配置过滤器的方法.下部分是Servlet2.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>
重定向:浏览器的地址栏是会变化的,获取资源的时候经过了二次通过浏览器发送请求的过程。
以下内容源自其他同学,当然,自己百度搜索一下也是一样的
这个也是一个参考:http://jingyan.baidu.com/article/37bce2be71adad1002f3a2c7.html
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请求查看全部 -
Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
Filter有如下几个用处。
在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。
根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
Filter可负责拦截多个请求或响应;一个请求或响应也可被多个请求拦截。
创建一个Filter只需两个步骤:
创建Filter处理类(实现Filter接口).
web.xml文件中配置Filter(配置<filter>与<filter-mapping>).<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>JavaWeb_001_fistFilter</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>FistFilter</filter-name>
<filter-class>com.filter.FistFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FistFilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
<filter>
<filter-name>SecondFilter</filter-name>
<filter-class>com.filter.SecondFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SecondFilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
</web-app>查看全部 -
1.什么是过滤器?<br>
过滤器是web服务器端的一个组件,可以截获用户的请求和web资源的响应,对请求和响应进行过滤
2.过滤器的工作原理?<br>
原理:用户发送请求到过滤器,过滤器将用户请求发送到web资源,web资源将响应发送到过滤器,过滤器将响应发送给用户
3.过滤器的工作周期
a.在web容器启动的时候实例化,调用初始化方法,每次有请求响应过来调用doFilter()方法,服务器容器关闭的时候调用销毁方法。查看全部 -
过滤器大多数时间消耗在doFilter()方法中,doFilter()方法被Web容器调用,即被服务器调用,因为Web容器存在Tomcat容器中,Tomcat就是服务器.
doFilter()方法同时传入ServletRequest Request、ServletResponse Response和Filter Chain对象的引用.然后过滤器就有机会处理请求,将处理任务传递给链中的下一个资源,(通过调用Filter Chain对象引用上的doFilter方法),之后在处理控制权返回该过滤器时处理响应.
关于chain.doFilter(request,response)
他的作用是将请求转发给过滤器链上的下一个对象.这里的下一下对象指的是下一个filter,如果没有filter那就是你请求的资源.一般filter都是一个链,在一个项目的web.xml中有几个<filter>.就有几个过滤器.
request->filter1->filter2->filter3->....->request resource(请求的Web资源),然后得到Web资源的响应,再沿着链返回给request.查看全部 -
过滤器xml配置
查看全部 -
分类
查看全部 -
web.xml配置
查看全部 -
三个方法
查看全部 -
过滤器的生命周期
查看全部 -
12
查看全部 -
11
查看全部
举报