Servlet&JSP课后习题解答 下载本文

第6章课后练习

? 选择题

1. 关于过滤器的描述,以下何者正确?

(A) Filter接口定义了init()、service()与destroy()方法 (B) 会传入ServletRequest与ServletResponse至Filter (C) 要执行下一个过滤器,必须执行FilterChaing的next()方法 (D) 如果要取得初始参数,要使用FilterConfig物件 答案:B、D

2. 关于以下web.xml的设定:

SecurityFilter

cc.openhome.SecurityFilter

SecurityFilter *.do

USER

caterpillar

PASSWORD 123456

以下描述何者正确?

(A) 根据,过滤器会套用在所有以.do结尾的

URL请求

(B) 可以透过FilterConfig来读取USER与PASSWORD初始参数 (C) 初始参数设定位置错误,等标签应放在

标签之中

(D) 应改为才是正确设定 答案:A、C

提示:由于初始参数的设定错误,无法透过FilterConfig取得初始参数。

21

3. 关于以下的web.xml设定:

SecurityFilter /add.do

SecurityFilter *.view

CharacterFilter /add.do

以下描述何者正确?

(A) 当请求add.do时,只会套用SecurityFilter

(B) 当请求add.do时,过滤器的执行顺序为SecurityFilter、CharacterFilter

(C) 当请求list.view时,过滤器的执行顺序为SecurityFilter、CharacterFilter

(D) 当请求list.view时,只会套用SecurityFilter 答案:B、D

4. 关于FilterChain的描述,何者正确?

(A) 如果不呼叫FilterChain的doFilter()方法,则请求略过接

下来的过滤器而直接交给Servlet (B) 如果有下一个过滤器,呼叫FilterChain的doFilter()方法,

会将请求交给下一个过滤器

(C) 如果没有下一个过滤器,呼叫FilterChain的doFilter()方

法,会将请求交给Servlet

(D) 如果没有下一个过滤器,呼叫FilterChain的doFilter()方法没有作用

答案:B、C

5. 关于FilterConfig的描述,何者错误?

(A) 会在Filter界面的init()方法呼叫时传入 (B) 为web.xml中设定的代表对象

(C) 可读取标签中所设定的初始参数 (D) 可使用getInitParameter()方法读取初始参数

22

答案:C

6. 以下的程序代码将实作请求包裹器:

public class MyRequestWrapper ________________ {

public MyRequstWrapper(HttpServletRequest request) { super(requset); } …. }

请问空白处应该填上哪个程序代码片段?

(A) implements ServletRequest

(B) extends ServletRequestWrapper (C) implements HttpServletRequest

(D) extends HttpServletRequestWrapper 答案:D

提示:因为建构式中直接使用传入的HttpServletRequest对象及super()来呼叫父类别建构式,所以一定是继承HttpServletRequestWrapper。

7. 关于请求包裹器,以下描述何者正确?

(A) 可以实作ServletRequest界面

(B) 可以继承ServletRequestWrapper类别 (C) 一定要继承ServletRequestWrapper类别 (D) HttpServletRequestWrapper是

ServletRequestWrapper的子类别

答案:A、B、D

提示:要自己实作ServletRequest接口来实作请求包裹器也是可以的,只是所有的方法都要自行实作。

8. 关于HttpServletRequestWrapper

HttpServletResponseWrapper的描述,何者有误? (A) 分别实作了HttpServletRequest界面

HttpServletResponse界面 (B) 分别继承了ServletRequestWrapper

ServletResponseWrapper类别

(C) 实作时,至少要重新定义一个父类别中的方法 (D) 实作时必须在建构式中呼叫父类别建构式 答案:C

23

与与与

9. 在开发过滤器时,以下何者是正确的观念? (A) (B) (C) (D) 答案:B、D

必须考虑前后过滤器之间的关系

挂上过滤器后不改变应用程序原有的功能

设计Servlet时必须考虑到未来加装过滤器的需求 每个过滤器要设计为独立互不影响的组件

10. 关于Filter界面上的doFilter()方法之说明,何者有误?

(A) 会传入两个参数HttpServletRequest

HttpServletResponse (B) 会传入三个参

HttpServletRequest

、、

HttpServletResponse、FilterChain

(C) 前一个过滤器呼叫FilterChain的doFilter()后,会执行目

前过滤器的doFilter()方法

(D) 前一个过滤器的doFilter()执行过后,会执行目前过滤器的

doFilter()方法

答案:A、B、D

提示:Filter的doFilter()方法上三个参数是ServletRequest、ServletResponse、FilterChain。前一个过滤器的doFilter()执行时,当中必须呼叫FilterChain的doFilter()方法,才会执行目前过滤器的doFilter()方法。

? 实作题

1. 模仿本单元综合练习,重构第4章元课后练习中的留言版程序,将从档案读

写留言版讯息的职责封装至一个MessageServlce类别中。。

2. 你的留言版程序不允许使用者输入HTML标签,但可以允许使用者输入一

些代码作些简单的样式。例如: ? [b]粗体[/b] ? [i]斜体[/i] ? [big]放大字体[/big]

? [small]缩小字体[/small]

HTML的过滤功能,你可以直接使用本章所开发的字符过滤器,并且请另行开发一个过滤器来完成代码替换的功能。

24