JspServlet面试题及答案.docx

上传人:b****3 文档编号:27496839 上传时间:2023-07-02 格式:DOCX 页数:32 大小:29.80KB
下载 相关 举报
JspServlet面试题及答案.docx_第1页
第1页 / 共32页
JspServlet面试题及答案.docx_第2页
第2页 / 共32页
JspServlet面试题及答案.docx_第3页
第3页 / 共32页
JspServlet面试题及答案.docx_第4页
第4页 / 共32页
JspServlet面试题及答案.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

JspServlet面试题及答案.docx

《JspServlet面试题及答案.docx》由会员分享,可在线阅读,更多相关《JspServlet面试题及答案.docx(32页珍藏版)》请在冰豆网上搜索。

JspServlet面试题及答案.docx

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相似。

SessionFilter

alan.filter.SessionFilter

SessionFilter

/protected/*

--这里的url-pattern就是要过滤的Servlet的url-pattern-->

request

forward

include

--上面的三个是过滤的范围-->

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1