JspServlet面试题及答案.docx
- 文档编号:27496839
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:32
- 大小:29.80KB
JspServlet面试题及答案.docx
《JspServlet面试题及答案.docx》由会员分享,可在线阅读,更多相关《JspServlet面试题及答案.docx(32页珍藏版)》请在冰豆网上搜索。
JspServlet面试题及答案
、简答题
〔.forward和redirect的区别
forward是服务器请求资源,服务器直接访问目标地址的URL把那个URL勺响应内容读取过来,然后把这
些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用
刚才请求的所有参数重新请求,所以session,request参数都可以获取。
2.说出Servlet的生命周期,并说出Servlet和CGI的区别
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方
法。
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以
服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,
所以效率上低于servlet。
3.JSP中动态INCLUD与静态INCLUDE勺区另U?
动态INCLUDE!
jsp:
include动作实现 includepage="included.jsp"flush="true"/>它总是会检 查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE! include伪码实现,并不会检查所含文件的变化,适用于包含静态页面<%@include file="included.htm"%> 4.什么情况下调用doGet()和doPost()? Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。 5.servlet的生命周期 web容器加载servlet,生命周期开始。 通过调用servlet的init()方法进行servlet的初始化。 通过调用service()方法,根据请求的不同调用不同的do***()方法。 结束服务,web容器调用servlet的destroy()方法。 6.如何现实servlet的单线程模式 <%@pageisThreadSafe="false"%> 7.页面间对象传递的方法 request,session,application,cookie等 8.JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? JSP技术构建在Servlet技术之上,是Servlet技术的扩展,本质上是Servlet的简易方式,JSP能做到 的,Servlet都能做到,但是它们却各有所长。 JSP更强调应用的外表表达。 JSP编译后是”类servlet"。 Servlet比较适合作为控制类组件,比如视图控制器等。 另外,Servlet还可以作为过滤器、监听器等。 Servlet不仅可以动态生成HTM吶容,还可以动态生成图形。 Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。 而JSP的情况是Java和HTML 可以组合成一个扩展名为.jsp的文件。 总而言之,Servlet在项目中作为控制类的组件,并且处理一些后台业务,JSP则作为显示组件。 JSP侧重于视图,Servlet主要用于控制逻辑。 9.四种会话跟踪技术 会话作用域 Servlets JSP 页面描述 page 否 是 代表与一个页面相关的对象和属性。 一个页面由一个编译好的 Javaservlet 类(可以带有任何的include指令,但是没有include动作) 表示。 这既包括servlet又包括被编译成 servlet的JSP页面 request 是 是 代表与Web客户机发出的一个请求相关的对象和属性。 一个请求可能跨越多个页面,涉及多个Web组件(由于forward指令禾口include动作的关系) session 是 是 代表与用于某个Web客户机的一个用户体验相关的对象和属性。 一个Web会话可以也经常会跨越多个客户机请求 application 是 是 代表与整个Web应用程序相关的对象和属性。 这实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域 lO.Servlet执行时一般实现哪几个方法? Publicvoidinit(ServletConfigconfig) publicServletConfiggetServletConfig() publicStringgetServletlnfo() publicvoidservice(ServletRequestrequest,ServletResponseresponse) publicvoiddestroy() 11.url重写有几种方式? id传递 由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session 回服务器。 经常被使用的一种技术叫做URL重写,就是把sessionid直接附加在URL路径的后面,附 加方式也有两种,一种是作为URL路径的附加信息,表现形式为 http: //...../xxx;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng! -145788764 另一种是作为查询字符串附加在URL后面,表现形式为http: //...../xxx? jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng! -14578876 4 这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采用第一种方式也有利于把sessionid的信息和正常程序参数区分开来。 为了在整个交互过程中始终保持状态,就必须 在每个客户端可能请求的路径后面都包含这个sessionid。 12.在jsp中引用使用 useBeanid=""...scope=""/>来引用javabean. Iscope的值有哪些,这些值的区别是什么? 不同的jsp页面中引用javabean时,id能否相同,如果能相同,对scope的值有什么要求? scope可以为: application|page|session|requeat这个东西就是指定ID的有效范围。 女口果scope=page, 那么useBean的有用范围就只能在page内有效,到了session|application|requeat就无效了。 可以指 定scope属性,使得Bean不只是与当前页面建立单关联。 如果共享了Bean,获取对现有Bean的引用就 很有用,因此jsp;useBean操作表示公当不存在具有相同id和scope的对象时才实例化一个新对象。 这 样就可以节约资源。 二、问答题 1.JSP的内置对象及方法 Request表示HttpServletRequest对象。 它包含了有关浏览器请求的信息,并且提供了几个用于获取 cookie,header,和session数据的有用的方法。 Response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies, 头信息等) out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。 pageContext表示一个javax.servlet.jsp.PageContextservlet相关的对象的API,并且包装了通用的servletSession表示一个请求的javax.servlet.http.HttpSessionapplicaton表示一个javax.servlet.ServletContext 境的信息 config表示一个javax.servlet.ServletConfig对象。 Page表示从该页面产生的一个servlet实例 2.JSP的常用指令 对象。 它是用于方便存取各种范围的名字空间、相关功能的方法。 对象。 Session可以存贮用户的状态信息 对象。 这有助于查找有关servlet引擎和servlet环 该对象用于存取servlet实例的初始化参数。 <%@page Ianguage="scriptingLanguage": 主要指定JSPContainer要用什么语言来编译JSP网页。 JSP2.0规 范中指出,目前只可以使用 Java extends="className": Java语言,不过未来不排除增加其他语言,如C、C++Perl等等。 默认值为 主要定义此JSP网页产生的Servlet是继承哪个父类 import="importList": 主要定义此JSP网页可以使用哪些JavaAPI session="true|false": 决定此JSP网页是否可以使用session对象。 默认值为true buffer="none|sizeinkb": 决定输出流(outputstream)是否有缓冲区。 默认值为8KB的缓冲区 autoFlush="true|false": 决定输出流的缓冲区是否要自动清除,缓冲区满了会产生异常 (Exception)。 默认值为tisThreadSafe="true|false" rue : 主要是告诉JSPContainer,此JSP网页能处理超过一个以上的请求。 默认值为true,如果此值设为false,SingleThreadModel将会被使用。 SingleThreadModel在Servlet2.4中已经声明不赞成使用(deprecate) info="text": 主要表示此JSP网页的相关信息errorPage="error_url": 表示如果发生异常错误时,网页会被重新指向那一个URLisErrorPage="true|false": 表示此JSPPage是否为处理异常错误的网页contentType="ctinfo": 表示MIME类型和JSP网页的编码方式 pageEncoding="ctinfo": 表示JSP网页的编码方式 isELIgnored="true|false": 表示是否在此JSP网页中执行或忽略EL表达式。 如果为true时,JSP Container将忽略EL表达式;反之为false时,EL表达式将会被执行注意: 只有import这个属性可以重复设定,其他则否。 %><%@includefile="filename"%> <%@taglibprefix="c"uri="http: //"%> 3.Request对象的主要方法: setAttribute(Stringname,Object): 设置名字为namel的request的参数值 getAttribute(Stringname): 返回由nam£旨定的属性值getAttributeNames(): 返回request对象所有属性的名字集合,结果是一个枚举的实例getCookies(): 返回客户端的所有Cookie对象,结果是一个Cookie数组getCharacterEncoding(): 返回请求中的字符编码方式getContentLength(): 返回请求的Body的长度getHeader(Stringname): 获得HTTP协议定义的文件头信息getHeaders(Stringname): 返回旨定名字的requestHeader的所有值,结果是一个枚举的实例getHeaderNames(): 返回所以requestHeader的名字,结果是一个枚举的实例getInputStream(): 返回请求的输入流,用于获得请求中的数据getMethod(): 获得客户端向服务器端传送数据的方法 getParameter(Stringname): 获得客户端传送给服务器端的有name指定的参数值 getParameterNames(): 获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例getParameterValues(Stringname): 获得有name旨定的参数的所有值 getProtocol(): 获取客户端向服务器端传送数据所依据的协议名称 getQueryString()getRequestURI()getRemoteAddr()getRemoteHost() : 获得查询字符串 : 获取发出请求字符串的客户端地址 : 获取客户端的IP地址 : 获取客户端的名字 getSession([Booleancreate]): 返回和请求相关SessiongetServerName(): 获取服务器的名字 getServletPath(): 获取客户端所请求的脚本文件的路径 getServerPort(): 获取服务器的端口号removeAttribute(Stringname): 删除请求中的一个属性 4.jsp有哪些动作? 作用分别是什么? JSP共有以下6种基本动作 jsp: include: 在页面被请求的时候引入一个文件。 Jsp: useBean: 寻找或者实例化一个JavaBean。 Jsp: setProperty: 设置JavaBean的属性。 Jsp: getProperty: 输出某个JavaBean的属性。 Jsp: forward: 把请求转到一个新的页面。 Jsp: plugin: 使您能插入所需的特定的浏览器的OBJECT或EMBEDS素来指定浏览器运行一个JAVAApplet 所需的插件。 根据浏览器类型为Java插件生成OBJECT或EMBEDS记。 vjsp: plugintype="bean|applet"code="classFileName"codebase="classFileDirectoryName" [name="instanceName"] [archive="URIToArchive,..."] [align="bottom|top|middle|left|right"] [height="displayPixels"] [width="displayPixels"] [hspace="leftRightPixels"] [vspace="topBottomPixels"] [jreversion="JREVersionNumber|1.1"] [nspluginurl="URLToPlugin"] [iepluginurl="URLToPlugin"]> [vjsp: params> [vjsp: paramname="parameterName" value="{parameterValue|v%=expression%>}"/>]+ v/jsp: params>] [vjsp: fallback>textmessageforuserv/jsp: fallback>] v/jsp: plugin> 举例: vjsp: plugintype=appletcode="Molecule.class"codebase="/html"> vjsp: params> vjsp: paramname="molecule"value="molecules/benzene.mol"/> v/jsp: params> vjsp: fallback> vp>Unabletoloadappletv/p> v/jsp: fallback> v/jsp: plugin> 5.过滤器监听servlet三者的区别和实际中主要的应用场景 过滤器(Filter) 作为过滤器,在Servlet作为过滤器使用时,它可以对客户的请求进行过滤处理,当它处理完成后,它会交给下一个过滤器处理,就这样,客户的请求在过滤链里一个个处理,直到请求发送到目标。 举个例子,某个网站里有提交”修改的注册信息"的网页,当用户填写完成修改信息并提交后,服务端在进行真正的处理时需要做两个处理: 客户端的会话是否有效;对提交的数据进行统一的编码,比如GB2312这 两个处理可以在由两个过滤器组成的过滤链里进行处理。 当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功(比如客户端的会话无效),它将把视图派发到指定的错误页面。 可以看出,过滤器就像一扇门,客户端要和服务端的某个目标交互,必须通过这扇门。 过滤器是用于过滤Servlet的请求和响应,过滤器是存在于请求和被请求资源之间的。 过滤器就像当于一个中间件,请求要经过过滤器,然后过滤器才去调用Servlet,Servlet的响应也会被 过滤器截获并作相应的处理。 Filter是一个接口,要写一个自己的Filter就只能实现Filter接口。 Filter也有自己的生命周期,他的生命周期和Servlet比较相似,也是会先调用init()方法,然后再调 用核心的处理过滤的方法doFilter(),这个方法中可定义过滤规则,然后是destory()方法销毁Filter对象。 dofilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain) 这个是过滤的核心方法,FilterChain的方法doFilter(ServletRequestrequest,ServletResponse response)也就是过滤后的请求调用资源的方法,如果不写这个方法,也就不会去调用相应的资源。 Filter的配置 Filter的配置和Servlet相似。 --这里的url-pattern就是要过滤的Servlet的url-pattern--> --上面的三个是过滤的范围--> CharArrayWriter类,是一个将数据保存在字符数组中的输出流,我们可以使用它来构造一个PrintWriter 对象,也就实现了向内存输出。 CharArrayWriter类的toString()和toCharArray()方法就可以取得写入内存中的数据。 注意: CharArrayWriter类是一个不会真正输出的类,他的write()方法只会将内容写入字符数组,而且 这个字符数组是会自动增长的。 例子: 两个JSP页面,前一个页面用户输入一些信息然后提交,后一个页面显示用户提交的信息。 在提 交信息后,要经过两个过滤器的处理,一个检查用户是否登录,一个把用户的提交信息用GB2312进行重 新编码。 开发一个Filter,这个Filter需要实现Filter接口,Filter接口定义了以下的方法: destroy()//由Web容器调用,销毁此Filter init(FilterConfigfilterConfig)///由Web容器调用,初始化此Filter doFilter(ServletRequestrequest,ServletResponseresponse, FilterChainchain)〃具体过滤处理代码 对提交信息用GB2312进行重新编码的Filter: 1//====================ProgramDiscription===================== 2//程序名称: 示例14-7: EncodingFilter.java 3〃程序目的: 学习使用编码过滤器 4//========================================================== 5importjavax.servlet.FilterChain; 6importjavax.servlet.ServletRequest; 7importjavax.servlet.ServletResponse; 8importjava.io.IOException; 9importjavax.servlet.Filter; 10importjavax.servlet.http.HttpServletRequest; 11importjavax.servlet.http.HttpServletResponse; 12importjavax.servlet.ServletException; 13importjavax.servlet.FilterConfig; 15publicclassEncodingFilterimplementsFilter 16{ 18privateStringtargetEncoding="gb2312"; 19protectedFilterConfigfilterConfig; 21publicvoidinit(FilterConfigconfig)throwsServletException{ 22this.filterConfig=config; 23this.targetEncoding=config.getInitParameter("encoding"); 24} 27publicvoiddoFilter(ServletRequestsrequest,Servl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JspServlet 试题 答案