ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:68.86KB ,
资源ID:6427366      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-6427366.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java开发面试资料Word文档下载推荐.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

java开发面试资料Word文档下载推荐.docx

1、每个对Servlet 的请求由一个Servlet Request 对象代表。Servlet 给客户端的响应由一个Servlet Response对象代表。当客户端有一个请求时,Servlet Engine 将ServletRequest 和ServletResponse对象都转发给Servlet,这两个对象以参数的形式传给Service方法。这个方法由javax.servlet.Servlet定义并由具体的Servlet 实现。Servlet还可以实现 ServletRequest 和ServletResponse接口。ServletRequest接口可以让Servlet 获取客户端请求中的参

2、数,如form data、request信息、协议类型,等等。Servlet 可以从ServletInputStream流中读取request 数据。ServletResponse接口允许Servlet设置response headers和status codes。实现这个接口可以使Servlet能访问ServletOutputStream流用来向客户端返回数据。Servlet如何被释放Servlet Engine 没有必要在Servlet 生命周期的每一段时间内都保持Servlet的状态。Servlet Engine可以随时随意使用或释放Servlet。因此,你不能依赖Servlet cla

3、ss或其成员存储信息。当Servlet Engine判断一个Servlet应当被释放时(比如说Engine准备Shut down 或需要回收资源),Engine必须让Servlet 能释放其正在使用的任何资源,并保存持续性的状态信息。这些可以通过调用Servlet的destroy方法实现。 在Servlet Engine 释放一个Servlet 以前,必须让其完成当前实例的service方法或是等到timeout(如果Engine定义了timeout)。当Engine释放一个Servlet以后,Engine将不能再将请求转发给它,Engine必须彻底释放该Servlet并将其标明为可回收的(给

4、garbage collection)。在Servlet API中最重要的是Servlet interface。所有的Servlets执行这个interface的方式有很多种:或者是直接的,或者通过extending这个class执行它,如 HttpServlet。这个Servlet interface 提供并安排Servlet与客户端联系的方法。Servlet 编写者可以在他们开发Servlet程序时提供更多一些或所有这样的方法。当一个Servlet接收来自客户端的调用请求时,它接收两个对象:一个是ServletRequest,另外一个是ServletResponse。这个ServletRe

5、quest class 概括从客户端到服务器之间的联系,而 ServletResponse class 概括从Servlet返回客户端的联系。ServletRequest interface 可以获取到这样一些信息,如由客户端传送的参数名称,客户端正在使用的协议,产生请求并且接收请求的服务器远端主机名。它也提供获取数据流的Servlet、ServletInputStream,这些数据是客户端引用中使用HTTP POST和PUT方法递交的。一个ServletRequest的子类可以让Servlet获取更多的协议特性数据。例如,HttpServletRequest 包含获取HTTP-specifi

6、c头部信息的方法。ServletResponse interface 给出相应客户端的Servlet方法。它允许Servlet设置内容长度和回应的MIME类型,并且提供输出流ServletOutputStream,通过编写者可以发回相应数据。ServletResponse子类可以给出更多protocol-specific容量的信息。例如,HttpServletResponse 包含允许Servlet操作HTTP-specific头部信息的方法。总结与运用: 在实践中可以配置一个load on start up 的Servlet,它随服务器启动而初始化,在其init方法中启用一些参数设置,例如把

7、某些变量存入ServletContext,这样以后在其他Servlet中就可以获得该参数了;而在其destroy中写入一些资源回收的代码,当服务器关闭时就可以自动关闭相遇的资源了。2、 过滤器以前以为Filter只是一个特殊点的Servlet,用进只需在web.xml中配置一下拦截路径就可以了,可经过这两天的深入学习,才知道以前对Filter类的了解和使用都太过浅薄了。在网上看了很多篇相关的技术文章,现提取它们中的精髓(我认为能说明问题的东西)及我个人的一些学习经验作如下总结,希望能帮助大家更好地理解Filter的过滤机制。要学习Filter,就必须先理解和掌握servlet的调用机制和流程。

8、关于servlet,网上也有很多相关文章,大家若有不明白的可以到XX中搜一下,我这里为了突出重点就不多说了。好,下面进入正题。一、什么是Filter Filter 技术是servlet 2.3 新增加的功能.servlet2.3是sun公司与2000年10月发布的,它的开发者包括许多个人和公司团体,充分体现了sun公司所倡导的代码开放性原则.由于众多的参与者的共同努力,servlet2.3比以往功能都强大了许多,而且性能也有了大幅提高. 它新增加的功能包括: 1. 应用程序生命周期事件控制;2. 新的国际化;3. 澄清了类的装载规则;4. 新的错误及安全属性;5. 不赞成使用HttpUtils

9、 类;6. 各种有用的方法;7. 阐明并扩展了几个servlet DTD;8. filter功能. 其中最重要的就是filter功能.它使用户可以改变一个request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).一个filter 包括:1. 在servlet被调用之前截获;2. 在servlet被调用之前检查servlet req

10、uest;3. 根据需要修改request头和request数据;4. 根据需要修改response头和response数据;5. 在servlet被调用之后截获. 你能够配置一个filter 到一个或多个servlet;单个servlet或servlet组能够被多个filter 使用.几个实用的filter 包括:用户辨认filter,日志filter,审核filter,加密filter,符号filter,能改变xml内容的XSLT filter等. 一个filter必须实现javax.servlet.Filter接口定义的三个方法: doFilter、init和destroy。(在三个方法

11、在后面后有详细的介绍).二、Filter体系结构 2.1、Filter工作原理(执行流程) 当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求响应进行拦截,对请求头和请求数据进行检查或改动,并依次通过过滤器链,最后把请求响应交给请求的Web资源处理。请求信息在过滤器链中可以被修改,也可以根据条件让请求不发往资源处理器,并直接向客户机发回一个响应。当资源处理器完成了对资源的处理后,响应信息将逐级逆向返回。同样在这个过程中,用户可以修改响应信息,从而完成一定的任务。* 在这里,我要插几句关于过滤链的问题:上面说了,当一个请求

12、符合某个过滤器的过滤条件时该请求就会交给这个过滤器去处理。那么当两个过滤器同时过滤一个请求时谁先谁后呢?这就涉及到了过滤链FilterChain。 所有的奥秘都在Filter的FilterChain中。服务器会按照web.xml中过滤器定义的先后循序组装成一条链,然后一次执行其中的doFilter()方法。(注:这一点Filter和Servlet是不一样的,具体请参看我的另一篇文章:Servlet和Filter映射匹配原则之异同)执行的顺序就如下图所示,执行第一个过滤器的chain.doFilter()之前的代码,第二个过滤器的chain.doFilter()之前的代码,请求的资源,第二个过滤

13、器的chain.doFilter()之后的代码,第一个过滤器的chain.doFilter()之后的代码,最后返回响应。 这里还有一点想补充:大家有没有想过,上面说的“执行请求的资源”究竟是怎么执行的?对于“执行第一个过滤器的chain.doFilter()之前的代码,第二个过滤器的chain.doFilter()之前的代码”这些我可以理解,无非就是按顺序执行一句句的代码,但对于这个“执行请求的资源”我刚开始却是怎么也想不明白。直到我见到上面这张图片才恍然大悟(我说过了,这篇文章中的资料都是我从网上收集来的,当我看到上面的文字时是没有图片看的)。其实是这样的: 通常我们所访问的资源是一个ser

14、vlet或jsp页面,而jsp其实是一个被封装了的servlet(每个jsp执行前都会被转化为一个标准的servlet,这点若还有不明白的请自己到网上查一下吧),于是我们就可以统一地认为我们每次访问的都是一个Servlet,而每当我们访问一个servlet时,web容器都会调用该Servlet的service方法去处理请求。而在service方法又会根据请求方式的不同(Get/Post)去调用相应的doGet()或doPost()方法,实际处理请求的就是这个doGet或doPost方法。写过servlet的朋友都应该知道,我们在doGet(或doPost)方法中是通过response.getW

15、riter()得到客户端的输出流对象,然后用此对象对客户进行响应。 到这里我们就应该理解了过滤器的执行流程了:执行第一个过滤器的chain.doFilter()之前的代码第二个过滤器的chain.doFilter()之前的代码第n个过滤器的chain.doFilter()之前的代码所请求servlet的service()方法中的代码所请求servlet的doGet()或doPost()方法中的代码第n个过滤器的chain.doFilter()之后的代码第二个过滤器的chain.doFilter()之后的代码第一个过滤器的chain.doFilter()之后的代码。 以上是我的理解,若有不对之处

16、,还有大家不吝指教啊,大家一起学习!2.2、 Servlet过滤器API Servlet过滤器API包含了3个接口,它们都在javax.servlet包中,分别是Filter接口、FilterChain接口和FilterConfig接口。 2.2.1 public Interface Filter 所有的过滤器都必须实现Filter接口。该接口定义了init,doFilter0,destory()三个方法: (1) public void init (FilterConfig filterConfig) throws ServletException 当开始使用servlet过滤器服务时,We

17、b容器调用此方法一次,为服务准备过滤器;然后在需要使用过滤器的时候调用doFilter(),传送给此方法的FilterConfig对象,包含servlet过滤器的初始化参数。 (2)public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws java.io.IOException,ServletException 每个过滤器都接受当前的请求和响应,且FilterChain过滤器链中的过滤器(应该都是符合条件的)都会被执行。doFilter方 法中,过滤器可以对请求和

18、响应做它想做的一切,通过调用他们的方法收集数据,或者给对象添加新的行为。过滤器通过传送至 此方法的FilterChain参数,调用chaindoFilterO将控制权传送给下一个过滤器。当这个调用返回后,过滤器可以在它的 Filter方法的最后对响应做些其他的工作。如果过滤器想要终止请求的处理或得到对响应的完全控制,则可以不调用下一个过滤 器,而将其重定向至其它一些页面。当链中的最后一个过滤器调用chaindoFilterO方法时,将运行最初请求的Servlet。 (3)public void destroy() 一旦doFilterO方法里的所有线程退出或已超时,容器调用此方法。服务器调用d

19、estoryO以指出过滤器已结束服务,用于释放过滤器占用的资源。2.2.2 public interface FilterChain public void doFilter(ServletRequest request,ServletResponse response) thlows javaioIOException,ServletException 此方法是由Servlet容器提供给开发者的,用于对资源请求过滤链的依次调用,通过FilterChain调用过滤链中的下一个过滤 器,如果是最后一个过滤器,则下一个就调用目标资源。 2.2.3 public interface FilterCo

20、nfig FilterConfig接口检索过滤器名、初始化参数以及活动的Servlet上下文。该接口提供了以下4个方法: (1)public java1angString getFilterName0 返回webxml部署文件中定义的该过滤器的名称。 (2)public ServletContext getServletContextO 返回调用者所处的servlet上下文。 (3)public java.1ang.String getlnitParameter(java.1ang.String name) 返回过滤器初始化参数值的字符串形式,当参数不存在时,返回nul1name是初始化参数名

21、。 (4)public java.util.Enumeration getlnitParameterNames() 以Enumeration形式返回过滤器所有初始化参数值,如果没有初始化参数,返回为空。 2.3、过滤器相关接口工作流程 从编程的角度看,过滤器类将实现Filter接口,然后使用这个过滤器类中的FilterChain和FilterConfig接口。该过滤器类的 个引用将传递给FilterChain对象,以允许过滤器把控制权传递给链中的下一个资源。FilterConfig对象将由容器提供给过滤器,以允许访问该过滤器的初始化数据。详细流程如下图所示:2.4、过滤器配置 过滤器通过Web

22、应用程序中的配置描述符web.xml文件中的明,包括部分:过滤器定义,由元素表示,主要包括和两个必须的子元素和、,description这4个可选的子元素。子元素定义了个过滤器的名字,指定了由容器载入的实际类,子元素为过滤器提供初始化参数。 主要由url-pattem子元素组成。将过滤器映射到一个或多个Servlet上,将过滤器映射到个或多个任意特征的URL的JSP页面。三、应用实例 从上面分析可知,实现Servlet过滤器,需要两步:第一步开发过滤器,设计个实现Fiker接口的类;第二步通过web.xml配置过滤器,实现过滤器和Servlet、JSP页面之间的映射。以下设计一个简单的IP地址

23、过滤器,根据用户的IP地址进行对网站的访问控制。(1)过滤器的设计ipfilter.javapackage ipf;imp0rt javaioIOException;imp0rt javaxservlet*;public class ipfilter implements Filter实现Filter接口protected FilterConfig config;protected String rejectedlP;public void init(FilterConfig filterConfig)throwsServletExceptionthisconfig=filterConfig;

24、从Web)lE务器获取过滤器配置对象rejectedlP=configgetlnitParameter( RejectedlP”):,从配置中取得过滤lPif(rejectedlP=:nul1)rejectedlP= )public void doFilter(ServletRequest request,ServletResponse responseFilterChain chain)throwsIOException,ServletExceptionRequestDispatcher dispatcher=request.getRequestDispatcher();String rem

25、otelP=requestgetRemoteAddrO;/获取客户请求lPint i=remotelP1astlndexOf();int r=rejectedlP1astlndexOf(”):String relPscope=rejectedlPsubstring(0,r);过滤lP段if(relPscopeequals(remotelPsubstring(Oi) dispatcherforward(request,response);/重定向到rejectedErrorjsp页面 retum;阻塞,直接返Web回客户端elsechaindoFilter(request,response);/调用过滤链上的下一个过滤器public void destroy() /过滤器功能完成后,由Web服务器调用执行,回收过滤器资源注意:chaindoFilterO语句以前的代码用于对客户请求的处理;以后的代码用于对响应进行处理。(2)配置过滤器 在应用程序WebINF目录下的webxml描述符文件中添加以下代码:ipfIter过滤器名

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2