为了账号安全,请及时绑定邮箱和手机立即绑定

Java Web开发技术应用——过滤器

难度初级
时长 1小时40分
学习人数
综合评分9.53
339人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.3 逻辑清晰
  • 过滤器链
    查看全部
  • web.xml配置filter
    查看全部
  • Filter方法
    查看全部
  • 过滤器的生命周期
    查看全部
  • 过滤器工作原理
    查看全部
  • 过滤器的概念
    查看全部
  • 异步处理. 异步的操作需要线程的支持.(放到线程里面模拟) 1.首先创建一个过滤器,并支持异步处理. 2.创建一个Servlet.Servlet也设置为支持异步处理,过滤器关联Servlet. 在Servlet这个类定义一个内部类实现Runnable接口.重写run()方法,并在run()方法中睡眠10秒. 在doGet()方法中,创建线程类,参数实例化实现Runnable接口的内部类实例.并启动线程. 当用户直接访问我们Servlet时,便会被过滤器截取到,再通过chain.doFilter()放行.去到Servlet之后,便会启动线程,需要执行10秒,此时过滤器的doFilter()会继续执行下去,返回一个响应给用户,不会等待Servlet处理完毕. 在Servlet3.0方法中,request与response有startAsync()方法,返回AsyncContext类类型.将这个对象传入到别的方法里面(没有request、response参数的方法).为了在别的方法通过此类的对象再getRequest()、getResponse()获取到用户的request与response对象.
    查看全部
  • @WebFilter的常用属性 value和urlPatterns不应同时使用,同时使用的话会优先使用value. 当使用异步处理,即dispatcherTypes等于ASYNC时,必须加上asyncSupported=true.
    查看全部
  • 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的配置过滤器方法.
    查看全部
  • 创建Web项目时 j2EE 5.0是Servlet2.5的版本. j2EE 6.0是Servlet3.0的版本. 一般doFilter()方法是提交给一个Servlet去处理(通过请求转发),并不是一个简单的jsp页面.由Servlet处理后返回一个响应给用户. ASYNC异步处理的意思 在过滤器中的doFilter()方法,使用请求转发跳转到Servlet去处理时,Servlet会处理用户提交请求的操作业务.假如提交的数据量大,则处理业务时间非常长,此时过滤器便会一直等待,等待Servlet处理完后反馈的响应返回给用户.这样给用户体验效果很差,一直会在等待,得不出效果与界面.这时在Servlet3.0中,进行改进,支持异步处理,即当用户请求的数据较大时(意味Servlet处理时间长,过滤器等待时间长),则可以把此次用户的请求放在异步操作里面,不管Servlet处理完信息没有,doFilter()方法都会往下执行,过滤器返回一个响应给用户,那么用户就可以看到结果(可能是一些提示的页面,"你提交的操作在2小时内生效"),后台Servlet没处理完也不管.这样用户就不需要等到Servlet处理完毕后才有页面显示,给用户好的体验. 此处不违背过滤器不能直接给用户做出响应,此处是间接,因为已经先到达Servlet.再返回一个响应给用户.
    查看全部
  • 当用户请求访问的路径找不到时便会发生404错误,此时用户并不知道这些错误信息的含义,因此为了让给用户更好的体验,一般在web.xml文件中,配置<error-page>标签,来声明当发生什么错误代码异常时,跳转到指定的页面.让用户更好的理解. <error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> 其中<error-page>标签下还有<error-code>与<location>标签,<error-code>标签意思是发生的错误的代码.<location>标签为当发生此错误代码时,跳转到指定地方处理. 可以在error.jsp页面中输出一行信息,提示用户输入的路径有误.此时当用户访问页面时,输出了路径,则不会显示404错误,而是跳转到error.jsp页面.此页面提示用户输入的路径有误. 过滤器中的<dispatcher>值还可以是error.即此过滤器只能截取目标资源时通过声明式异常处理机制调用时的请求,并执行doFilter()方法. 即一个过滤器的<dispatcher>值为error,并且关联了<location>那个页面.则此过滤器会截取通过<error-page>声明式异常跳转去<location>指定Web资源的那个请求.即当用户输入路径有误,因为配置了<error-page>,所以会跳转去<location>指定的页面,此时会被过滤器截取请求.再通过chain.doFilter()放行.便可访问到error.jsp.如果我们直接访问error.jsp页面是不会被此过滤器截取的,因为直接访问属于request行为,不是error行为. 通过<dispatcher>为error的过滤器可以截取目标资源是通过声明式异常处理机制调用的请求.好处是系统会记录我们错误的信息,程序员就可以检测和查找错误的来源 在Servlet2.5中过滤器的分类(<dispatcher>值)有4个选项:request、forward、include、error. 在Servlet3.0中过滤器的<dispatcher>标签值还添加了async功能(支持异步处理)
    查看全部
  • RequestDispatcher接口的include()方法与forward()方法用法类似. 实现请求转发是通过getRequestDispatcher("/xxx.jsp").forward(request, response). request.getRequestDispatcher("/xxx.jsp").include(request, response)不能说是转发,只是包含进来.但两个方法实现的效果基本一样,只是实现原理不一样.request对象都会保留,URL地址栏也不会更改. 两个方法的区别. forward()方法将请求转发到RequestDispatcher对象封装的资源,include()方法将RequestDispatcher对象封装的资源作为当前响应内容的一部分包含进来.他们都有两个参数,即传递给当前Servlet的service方法的那两个ServletRequest和ServletResponse对象. include()方法,要注意的是被包含的Servlet程序不能改变响应消息的状态码和响应头,它里面设置状态码和响应头的语句将被忽略. 在forward方法调用之前,如果Servlet程序中写入的部分内容已被传送到客户端,forward方法将抛出IllegalStateException异常. forward方法执行以后,写入到缓冲区的内容将被清空,后面的写入操作将被忽略。 forward方法的调用者和被调用者的状态码和响应头都不会被忽略.
    查看全部
  • 过滤器分类(通过<dispatcher>标签) 当用户请求直接访问页面,或者用请求重定向访问新Web资源请求时.都是属于request的行为.会被<dispatcher>标签值为request的过滤器截取到.即该过滤器将被调用.但此过滤器截取不了非属于request行为的请求.即该过滤器不会被调用. 当用户的目标资源是通过RequestDispatcher的forward方式请求时,或者通过jsp页面的<jsp:forword page="">标签方式请求时,都是属于forward的行为.会被<dispatcher>标签值为forward的过滤器截取到.即该过滤器将被调用.但此过滤器截取不了非属于forword行为的请求.即该过滤器不会被调用. 当用户的目标资源时通过RequestDispatcher的include方法请求时,或者通过jsp页面的<jsp:include page="">标签方式请求时,都是属于include的行为.会被<dispatcher>标签值为include的过滤器截取到.即该过滤器将被调用.但此过滤器截取不了非属于include行为的请求.即该过滤器不会被调用. 一个过滤器的<dispatcher>标签值可以有多个,即可以同时是request与forward等.此时用户的请求能否被过滤器截取(即此过滤器doFilter方法是否将被Web容器调用),取决于过滤器中<dispatcher>标签的值与用户请求的行为类型. 过滤器相当于一扇门.
    查看全部
  • 过滤器分类(通过<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关联过滤器,但仍然截取不了.
    查看全部
  • doFilter()方法中的参数是ServletRequest req,ServletResponse rep与FilterChain arg2.在JSP的内置对象中.request是HttpServletRequest的实例.response则是HttpServletResponse的实例.因此想要在doFilter()方法中操作JSP的request与response对象.则需要强制类型转换.因为ServletRequest接口是HttpServletRequest接口的父接口.向下转型,所以需要强制转换,假如HttpServletRequest转成ServletRequest类型则不需要强制转换.因为是向上转型. Java中HttpServletRequest接口是ServletRequest子接口,HttpServletRequest接口遵循http协议。 相比于HttpServletRequest接口,ServletRequest的应用范围更加广泛,前者只适合在web开发中的http协议的请求,而后者则没有具体要求。
    查看全部

举报

0/150
提交
取消
课程须知
童鞋们,过滤器是Java Web开发的内容。学习前需要掌握Java基础知识、并熟悉JSP和Servlet。如未学习上述知识,可移步网站相关课程。
老师告诉你能学到什么?
通过本课程的学习,你可以了解过滤器的基础知识,并可以自己动手编写过滤器。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!