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

第1章课后练习

? 选择题

1. 以下何者适合使用GET请求来发送?

(A) 使用者名称、密码 (B) 检视论譠页面 (C) 信用卡资料 (D) 查询数据的分页 答案:B、D

提示:敏感性数据不应使用GET来发送。论譠页面、数据分页可以使用GET,便于使用者设定为书签。

2. 以下何者应该使用POST请求来发送?

(A) 使用者名称、密码 (B) 档案上传

(C) 搜寻引擎的结果画面 (D) BLOG文件 答案:A、B、D

提示:敏感性数据、大量数据不应使用GET来发送。搜寻引擎结果画面可以使用GET,便于使用者设定为书签。

3. HTTP哪个请求方式,请求参数会出现在网址列上? (A) GET (B) POST 答:A

4. 以下何者适合使用GET请求来发送?

(A) 检视静态页面

(B) 查询商品数据 (C) 新增商品资料 (D) 删除商品数据 答案:A、B

提示:这题在考等幂操作,不改变服务器状态的查询应使用GET。

1

5. 以下何者应该使用POST请求来发送?

(A) 查询商品数据 (B) 新增商品资料 (C) 更新商品数据 (D) 删除商品数据 答案:B、C、D

提示:这题在考非等幂操作,会改变服务器状态的查询应使用POST。

6. 以下何者是属于客户端执行的程序?

(A) JSP (B) JavaScript (C) Servlet (D) Applet 答案:B、D

7. Servlet/JSP主要是属于哪个Java平台的规范之中? (A) Java SE (B) Java ME (C) Java EE 答:C

8. Servlet/JSP必须基于哪一类型的容器才能提供服务?

(A) Applet容器

(B) 应用程序客户端容器 (C) Web容器 (D) EJB容器 答:C

9. Web容器在收到浏览器请求时,会如何处理请求?

(A) 使用单一执行绪处理所有请求 (B) 一个请求就建立一个执行绪来处理请求 (C) 一个请求就建立一个行程来处理请求 (D) 一个请求就执行一个容器来处理请求 答:B

2

10. Java EE中各技术标准最后将由什么文件明订规范? (A) JCP (B) JSR (C) JDK 答:B

提示:JCP是组织名称。JDK是Java开发工具箱名称。

3

第2章课后练习

? 选择题

1. 若要针对HTTP请求撰写Servlet类别,以下何者是正确的作法?

(A) 实作Servlet界面 (B) 继承GenericServlet (C) 继承HttpServlet

(D) 直接定义一个结尾名称为Servlet的类别 答案:C

2. 续上题,如何针对HTTP的GET请求进行处理与响应?

(A) 重新定义service()方法 (B) 重新定义doGet()方法

(C) 定义一个方法名称为doService() (D) 定义一个方法名称为get() 答案:B

提示:不建议也不应重新定义HttpServlet所继承下来的service()方法。

3. HttpServlet是定义在哪个套件之中?

(A) javax.servlet

(B) javax.servlet.http (C) java.http (D) javax.http 答案:B

提示:与Servlet定义相关的类别或接口都位于javax.servlet套件之中,像是Servlet、GenericServlet、ServletRequest、ServletResponse等。与HTTP定义相关的类别或接口都位于javax.servlet.http套件之中,像是HttpServlet、HttpServletRequest、HttpServletResponse等。

4. 你在web.xml中定义了以下的内容:

Goodbye

cc.openhome.LogutServlet

GoodBye

4

/goodbye

哪个URL可以正确的要求Servlet进行请求处理? (A) (B) (C) (D) 答案:D

/GoodBye /goodbye.do /LoguotServlet /goodbye

5. 在Web容器中,以下哪两个类别的实例分别代表HTTP请求与响应对象?

(A) HttpRequest

(B) HttpServletRequest (C) HttpServletResponse (D) HttpPrintWriter 答案:B、C

6. 在Web应用程序中,何者负责将HTTP请求转换为HttpServletRequest

物件?

(A) Servlet物件 (B) HTTP服务器 (C) Web容器 (D) JSP网页 答案:C

7. 在Web

中? (A) (B) (C) (D) 答案:A

8. 你在web.xml中定义了以下的内容:

HelloServlet

cc.openhome.HelloServlet

应用程序的档案与目录结构中,web.xml是直接放置在哪个目录之WEB-INF目录 conf目录 lib目录

classes目录

5

HelloServlet /hello

这个web.xml中的定义有哪些错误?

(A) 标签中的设定一定要用.do作结尾

(B) 标签应改为,结尾标签名称

也要修改

(C) 标签应改为,结尾标签名称也

要修改

(D) 标签应改为,结尾标签名

称也要修改 答案:B、C

提示:可以无需.do结尾,也可以用万用字符(wildcard),例如*.do将会让所有以.do结尾的请求由该Servlet进行处理。

9. 在MVC架构中,谁负责通知应用程序客户端,应用程序本身有状态改变?

(A) 模型(Model) (B) 视图(View)

(C) 控制器(Controller) 答案:A

10. MVC与Model 2架构最大的差别在于?

(A) Model 2架构的视图是由HTML组成

(B) Model 2架构中的模型无法通知视图状态已更新 (C) MVC架构是基于请求/响应模型 (D) MVC架构只能用于单机应用程序 答案:B 提示:Model 2架构中呈现视图的技术并没有限制。MVC架构也可以应用于3-tier的网络架构中,其中模型通知视图时,可以透过Socket联机来进行。

? 实作题

1. 讲师提示:这个练习在让学生动手实作HttpServlet的继承、web.xml

的定义,并能够自行查询在线API文件,了解HttpServletRequest有哪些方法可以利用。

6

2. 提示:这个练习在让学生动作撰写窗体(学生必须自行学习基本的HTML),

了解GET与POST如何在Servlet中进行处理,学生必须重新定义doPost()

方法,并了解如何在Servlet中撰写判断分支来呈现不同条件下的结果画面。

7

第3章课后练习 课后练习

? 选择题

1. 以下的空格应该填入哪个方法?

response.setContentType(\PrintWriter out = response.____________; out.println(\...

(A) (B) (C) (D) 答案:B

getPrintWriter() getWriter()

getBufferedWriter() getOutputWriter()

2. 请问以下的Servlet程序片段输出结果为何?

out.println(\第一个Servlet程序\out.flush();

request.getRequestDispatcher(\ .forward(request,response); out.println(\

(A) (B) (C) (D) 答案:A

显示\第一个Servlet程序\后转发message.jsp 显示\第一个Servlet程序\与\ 直接转发给message.jsp进行响应 丢出IllegalStateException

提示:在flush()之后响应已确认,此时再forward()就会发生IllegalStateException。

3. 你将secret.jsp档案放在WEB-INF目录中,哪个方式或程序片段可以正确

让secret.jsp进行响应?

(A) 使用浏览器请求/WEB-INF/secret.jsp

(B) request.getRequestDispatcher(\

sp\并进行forward()

8

(C) 使用response.sendRedirect(\(D) 使用response.sendError(\答案:B

4. 如果想知道使用者所使用的浏览器版本等相关讯息,可以执行哪一段程序代

码: (A) (B) (C) (D) 答案:C

request.getHeaderParameter(\request.getParameter(\request.getHeader(\

request.getRequestHeader(\

5. 如果想取得输出串流对象对浏览器输出位数据,应该撰写哪一段程序代码?

(A)

ResponseStream out = response.getResponseStream();

(B) ResponseStream out = response.getStream();

(C) ResponseStream out = response.getOutputStream();

(D)

ServletOutputStream out = response.getOutputStream();

答案:D

6. 哪几个程序代码可以取得password请求参数的值?

(A) request.getParameter(\

(B) request.getParameters(\

(C) request.getParameterValues(\(D) request.getRequestParameter(\答案:A、C 提示:getParameterValues()会用字符串数组传回指定的请求参数值,如果请求参数只有一个值,则透过指定索引值0也可取得该值。

7. 下面这个程序代码片段会输出什么结果?

PrintWriter writer = response.getWriter(); writer.println(\第一个Servlet程序\

OutputStream stream = response.getOutputStream(); stream.println(\第一个Servlet程序\

(A) 浏览器会看到两段\第一个Servlet程序\的文字 (B) 浏览器会看到一段\第一个Servlet程序\的文字 (C) 丢出IllegalStateException

(D) 由于没有正确地设定内容类型(content-type),浏览器会提示

另存新档

答案:C

9

提示:同一个请求周期中,HttpServletResponse的getWriter()与getOutputStream()只能择一使用,否则会IllegalStateException。

8. 如果要设置响应的内容类型标头,哪几个选项是正确的作法?

(A) response.setHeader(\\(B) response.setContentType(\(C) response.addHeader(\\(D) response.setContentHeader(\答案:A、B、C

9. 下面哪个选项,可以正确地追加自订标头\的值? (A) (B) (C) (D) 答案:C

response.setHeader(\response.appendHeader(\response.addHeader(\response.insertHeader(\

10. 哪几个方法是定义在HttpServletRequest中,而非由ServletRequet

中继承而来?

(A) getMethod()

(B) getHeader() (C) getParameter() (D) getCookies() 答案:A、B、C

提示:与HTTP请求有关的方法,是定义在HttpServletRequest中,与通用请求有关的,是定义在ServletRequest中,例如getParameter()。

? 实作题:

1. 请实作一个Web应用程序,可以将使用者所发送的name请求参数值画在

一张图片上(参考下图,底图可任选)。 提示:可在搜寻引擎下关键词「动态产生图片」寻找解答。参考http://caterpillar.onlyfun.net/Gossip/JSPServlet/DynamicImage.htm,画图的部份不难,主要让学生练习如何取得请求参数、如何使用ServletOutputStream以及利用搜寻引擎寻找解答的能力。

10

图3.20 根据使用者输入动态产生图片内容

2. 请实作一个Web应用程序,可动态产生使用者登入密码(参考下图,仅需

先确作出动态产生密码图片的功能即可,送出窗体后的密码验证功能还不用实现)。

提示:主要是上一题练习的延伸,随机产生四个数字,再画到图片上。这个练习可结合Session属性的运用,就可实作出登入的部份,在第5章讲到Session对象时会再要求实作登入的机制。

图3.21 动态产生登入密码

11

第4章课后练习 课后练习

? 选择题

1. 如果是整个应用程序会共享的数据,则适合存放在哪个对象之中成为属性?

(A) ServletConfig

(B) ServletContext (C) ServletRequest (D) Session 答案:B

2. 如果要取得ServletContext初始参数,则可以执行哪个方法? (A) (B) (C) (D) 答案:C

getContextParameter() getParameter()

getInitParameter() getAttribute()

3. 假设一段程序代码如下,其中PARAM为设定于web.xml中的初始参数:

public class SomeServlet extends HttpServlet { private String param; public SomeServlet() {

param = getInitParameter(\ } … }

以下何者正确?

(A) param被设定为web.xml中的初始参数值 (B) 无法通过编译

(C) 应该改用getServletParameter()方法 (D) 发生NullPointerException 答案:D 提示:getInitParameter()也是透过ServletConfig来取得初始参数,在建构式执行时,由于尚未进行Servlet初始化,ServletConfig尚未经由init()

12

方法传入Servlet之中,所以建构式中尝试取得初始参数时就会发生NullPointerException。

4. 继承HttpServlet之后,若要进行Servlet初始化,重新定义哪个方法才是正

确的作法? (A) public void init(ServletConfig config) throws

ServletException;

(B) public void init() throws ServletException (C) public String getInitParameter(String name) (D) public Enumeration getInitParameterNames() 答案:B

5. 关于ServletContext初始参数,以下哪两项是web.xml中正确的设定?

(A)

PARAM VALUE

(B)

PARAM VALUE

(C)

PARAM1 VALUE1 PARAM1 VALUE1

(D)

PARAM1 VALUE1

PARAM2 VALUE2

答案:B、D

6. 若要读取WEB-INF/data.txt档案的数据,以下哪个是正确的作法?

13

(A) FileInputStream input =

new FileInputStream(\

(B) FileInputStream input = new FileInputStream(

new File(\

(C) InputStream input =

getResourceAsStream(\

(D) FileInputStream input =

getResourceAsStream(\

答案:C

7. ServletContext定义与属性相关的方法是哪三个? (A) getAttribute(); (B) setAttribute(); (C) deleteAttribute() (D) removeAttribute(); 答案:A、B、D

8. 若web.xml中有以下的设定:

Some

cc.openhome.SomeServlet

param1 1

param2 2

而某个Servlet撰写了以下的程序代码:

public void init() throws ServletException { super.init();

int param1 = getInitParameter(\ int param2 = getInitParameter(\}

以下何者描述正确?

(A) 第二对可以直接撰写在第一个

14

之中

(B) param1的值为1,param2的值为1 (C) 应该在建构式中进行初始参数的取得 (D) Servlet类别原始档无法通过编译 答案:D

提示:getInitParameter()取得的是字符串。

9. 哪几个对象提供有getAttribute()方法?

(A) ServletRequest (B) HttpServlet (C) ServletConfig

(D) ServletContext 答案:A、D

提示:事实上还有一个,HttpSession对象。只不过到本章还没介绍到HttpSession的使用。

10. 在web.xml中有以下的设定:

cc.openhome.SomeListener ...

以下何者正确?

(A) SomeListener类别要实作ServletContextListener接口 (B) 每生成一个Servlet实例就会呼叫ServletContextListener

的init()方法

(C) Web应用程序初始化之后,会呼叫ServletContextListener

的contextInitialized()方法 (D) 不需要这个标签 答案:A、C

? 实作题

1. 请使用目前所学得的Servlet相关技巧,实作一个在线留言版程序,其中必

须包括以下的功能:

(1). 有个档案会储存留言,应用程序初始时,必须从该档案中加载留言记录。 (2). 「观看留言」功能,每笔留言中包括了留言者的头像、名称与留言讯息。

15

下图是个简单的示范。

图4.8 观看留言

(3). 动态「留言窗体」功能,新增留言时使用的窗体。其中包括了输入留言

者名称、留言的字段,并可以让使用者选取头像。头像存放的目录可以由Servlet初始参数设定。窗体必须可以自动显示头像存放目录中的图

片,有多少图片就显示多少个头像。若新增留言失败也会将请求转发回窗体,此时要显示错误讯息以及使用者先前填写的名称与留言。下图是个简单的示范。

图4.9 新增留言窗体

(4). 「新增留言」功能,必须作基本的请求参数检查。留言失败及成功的

URL,必须可以由Servlet初始参数来设定。留言成功时必须显示留言

16

成功讯息、使用者名称、留言与头像。下图是个简单的示范。

图4.10 新增留言成功

提示:这个练习可以让学生模仿书中在线书签的制作流程与方式。可建议学生先如第3章实作简单的「观看留言」及「新增留言」功能。再进一步根据第4章改写,利用ServletConfig读取Servlet初始参数,利用ServletContext读取应用程序初始参数等。

17

第5章课后练习

? 选择题

1. 在浏览器禁用Cookie的情况下,哪些机制仍可以用于会话管理?

(A) HttpSession (B) URL重写 (C) 隐藏字段 (D) Cookie API 答案:B、C

2. 如何设定Cookie的有效期限?

(A) 使用setMaxAge()

(B) 使用setMaxInactive()

(C) 使用setMaxInactiveInterval() (D) 在web.xml中设定 答案:A

3. web.xml中的设定单位是? (A) (B) (C) (D) 答案:B

时 分 秒 毫秒

4. 何者可以实作使用者的自动登入机制? (A) (B) (C) (D) 答案:B

HttpSession Cookie

HttpServletRequest URL重写

5. 关于HttpSession的setMaxInactiveInterval()方法,以下描述何

者错误?

(A) 设定的单位是「分」

(B) 用来设定HttpSession在浏览器多久没活动后失效 (C) 用来设定Cookie的失效时间

18

(D) 会覆盖web.xml中的设定 答案:A、C

6. 关于HttpSession的描述,以下何者错误?

(A) 关闭浏览器后HttpSession就会被回收 (B) 可以执行invalidate()使之失效

(C) 不同的浏览器使用相同的Session ID,也会取得不同的

HttpSession对象

(D) HttpSession的setMaxInactiveInterval()方法设定为-1

将永不失效

答案:A、C

提示:关闭浏览器后立即失效的是储存Session ID的Cookie,不是HttpSession对象。

7. 哪几个对象提供有setAttribute()方法? (A) ServletRequest (B) HttpSession (C) ServletConfig (D) ServletContext 答案:A、B、D

8. 关于Servlet/JSP的Session ID,何者正确?

(A) 预设使用Cookie来储存Session ID (B) Cookie的名称是JSESSIONID

(C) 在禁用Cookie时,可以使用URL重写来发送Session ID (D) 必须自行呼叫HttpSession的getId()方可产生 答案:A、C

提示:Session ID的Cookie名称是厂商各自实作的,JSESSIONID在Tomcat上的实作名称。容器会自动帮你产生Session ID。

9. 哪几个对象的属性设定可以跨越请求范围? (A) (B) (C) (D) 答案:B、D

ServletRequest HttpSession ServletConfig ServletContext

10. HttpSession失效的时机为何?

19

(A) 执行invaliate()方法

(B) 下次请求超过web.xml中的设定时间 (C) 存活时间超过setMaxInactiveInterval()方法设定的时间 (D) 关闭浏览器 答案:A、B 提示:无论是或setMaxInactiveInterval()所设定的时间,都是指浏览器没有再次请求活动的时间,而不是指HttpSession本身的存活时间。

? 实作题

1. 请实作一个Web应用程序,可动态产生使用者登入密码,送出窗体后必须

通过密码验证才可观看到使用者页面。

提示:此题仍第3章课后练习第2个实作题之延伸。

图5.10 图片验证

2. 实作一个登入窗体,如果使用者核取「记住名称、密码」,则下次造访窗体

时,将会自动在名称、密码字段填入上次登入时所使用的值。

图5.11 记住名称、密码

20

第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

第7章课后练习

? 选择题

1. 以下哪几个倾听器,必须在web.xml中设定? (A) HttpSessionListener (B) RequestListener

(C) ServletContextListener (D) ServletAttributeListener

答案:A、C

提示:没有B、D这两种倾听器。

2. 以下何者为倾听器的事件类型之一?

(A) HttpSessionEvent

(B) RequestAttributeEvent

(C) ServletContextAttributeEvent (D) ServletContextEvent 答案:A、C、D

3. 以下倾听器中,不需要在web.xml中设定的是? (A) HttpSessionListener

(B) HttpSessionBindingListener (C) ServletContextListener (D) ServletAttributeListener

答案:B

4. 以下哪几个事件类型,拥有getName()与getValue()方法?(A) HttpSessionEvent

(B) ServletRequestAttributeEvent (C) ServletContextAttributeEvent (D) HttpSessionBindingListener 答案:B、C、D。

5. 你有一段程序代码片段:

HttpSession session = request.getSession(); User user = new User();

session.setAttrubute(\

25

以下何种作法,可以让你在不修改程序代码的情况下,实作统计在线人数? (A) 实作HttpSessionBindingListener (B) 实作HttpSessionListener

(C) 实作HttpSessionActivationListener (D) 以上皆非 答案:B

提示:题目要求不修改原有的程序代码,所以B是唯一的可能性。

6. 在web.xml中有以下的设定:

Some

cc.openhome.SomeServlet 1

Other

cc.openhome.OtherServlet 1

AnOther

cc.openhome.AnOtherServlet 2

请问以下描述何者正确?

(A) 容器会产生两个AnotherServlet实例

(B) 容器会先初始化SomeServlet,再初始化OtherServlet (C) 容器会先初始化AnOtherServlet,然后才是其它Servlet (D) 容器在请求来到时,才会初始化对应的Servlet 答案:B

7. 哪个URL模式设定方式,可以符合/guest/list.view的请求? (A) *.view

(B) /guest/*.view (C) /guest/*

(D) /guest/list.view 答案:A、C、D

26

8. 如果想要请求guest目录时,自动显示欢迎档案,则以下空格可以填上什

么?

______________

(A) (B) (C) (D) 答案:C

/guest/index.html /index.html default.jsp default.*

9. 关于以下web.xml中的设定,何者描述正确?

NullPointerException report.view

(A) (B) (C) (D) 答案:B、C

发生NullPointerException时会转发report.view处理 例外型态必须指定完全符合名称(Full Qualified Name) report.view必须改为/report.view 例外类型不可以指定特定的例外类别名称

10. 在过滤器设定中,哪个URL模式设定方式,在/guest/list.view的请求时会

触发过滤器?

(A) *.view

(B) /guest/*.view (C) /guest/*

(D) /guest/list.view 答案:A、C、D

提示:过滤器的设定原则与Servlet相同。

? 实作题

1. 请扩充7.1.1节中的范例,不仅统计在线人数,还可以在页面上显示目前登

27

入使用者的名称、浏览器信息、最后活动时间。

图7.14 在线使用者信息

2. 在7.1.3节中,使用HttpSessionBindingListener来实作使用者登入、

注销的日志记录功能,请改用HttpSessionAttributeListener来实作这个功能。

28

第8章课后练习

? 选择题

1. 关于JSP的描述,哪个正确?

(A) JSP是直译式的网页,与Servlet无关

(B) JSP会先转译为.java,然后编译为.class载入容器 (C) JSP会直接由容器动态生成Servlet实例,无需转译 (D) JSP是丢到浏览器端,由浏览器进行直译 答案:B

2. 关于JSP的描述,哪个正确?

(A) 要在JSP中撰写Java程序代码,必须重新定义_jspService() (B) 重新定义jspInit()来作JSP初次载入容器的初始化动作 (C) 重新定义jspDestroy()来作JSP从容器销毁时的结尾动作 (D) 要在JSP中撰写Java程序代码,必须重新定义service() 答案:B、C

3. 如果想要在JSP中定义方法,应该使用哪个JSP元素? (A) (B) (C) (D) 答案:C

<% %> <%= %> <%! %> <%-- --%>

4. 当JSP中有撰写中文时,而执行结果出现乱码,必须检查page 指示元素

的哪些属性设定是否正确?

(A) contentType (B) language

(C) extends

(D) pageEncoding 答案:A

提示:基本上还得检查一下编辑器的预设编码与pageEncoding是否一致。

29

5. 哪个JSP隐含对象,转译后对应ServletContext物件? (A) (B) (C) (D) 答案:D

pageContext config page

application

6. 在Session范围中以名称\放置了一个JavaBean属性,JavaBean上

有个getMessage()方法,请问以下哪个方式呼叫getMessage()以取得讯息并显示出来?

(A)

(C) <%= request.getBean().getMessage() %> (D) ${bean.message} 答案:B、D

提示:前必须先使用并指定scope为request,否则只会在page范围中寻找属性。

7. 在Web应用程序中有以下的程序代码,执行后转发至某个JSP网页:

Map map = new HashMap();

map.put(\map.put(\

request.setAttribute(\

以下哪个选项可以正确地使用EL取得map中的值? (A) ${map.user} (B) ${map[\(C) ${login.user} (D) ${login[role]} 答案:C

提示:选项D必须改为${login[\才是正确。

30

8. 在Web应用程序中有以下的程序代码,执行后转发至某个JSP网页:

Map map = new HashMap();

map.put(\request.setAttribute(\

以下哪个选项可以正确地使用EL取得map中的值?

(A) ${map.local.role} (B) ${login.local.role} (C) ${map[\(D) ${login[\答案:D

9. 在Web应用程序中有以下的程序代码,执行后转发至某个JSP网页:

List names = new ArrayList(); names.add(\

request.setAttribute(\

以下哪个选项可以正确地使用EL取得List中的值? (A) (B) (C) (D) 答案:B、D

${names.0} ${names[0]} ${names.[0]} ${names[\

提示:在[]指定索引值时可以用双引号,所以D也是正确的。

10. 以下何者不是EL隐含物件? (A) (B) (C) (D) 答案:B

param request

pageContext cookie

? 实作题

1. 先前章节实作在线留言版时,使用Servlet来实现画面的输出,请将之改为

JSP,并尽量使用本章所学得的JSP元素,减少Scriptlet的使用。

31

第9章课后练习

? 选择题

1. 哪些JSTL标签可用来进行Java程序中if、if..else的功能? (A) (B) (C)

(D) 答案:A、C、D

2. 如果打算使用request对象的setCharacterEncoding()方法设定字

符编码处理方式,则以下哪个JSTL标签可以让你不用使用Scriptlet? (A) (B) (C) (D) 答案:B

3. 如果taglib设定如下:

<%@taglib prefix=\

则以下何者会是使用自订标签的正确方式? (A) (B) (C) (D) 答案:D

4. 在使用Tag File自订标签时,若JSP中有以下的内容:

<%@taglib prefix=\

以下何者描述正确?

(A) 可以的方式使用自订标签 (B) 可以的方式使用自订标签 (C) 可以的方式使用自订标签 (D) taglib的定义有误,无法使用自订标签 答案:D 提示:如果是Tag File,则tagdir只有可能是/WEB-INF/tags或其子资料夹。

32

5. 关于tag指示元素的body-content属性,以下说明何者正确? (A) 可设定的值有JSP、scriptless、empty与tagdependent (B) 默认值是scriptless

(C) 设定为tagdependent时,本体内容将不作任何处理直接传入

Tag File中

(D) 如果本体中要执行Scriptlet,则要设定为JSP 答案:B、C

提示:可设定的值只有scriptless、empty与tagdependent,预设是scriptless。无论如何,Tag File的本体是绝不能有Scriptlet。

6. 在继承SimpleTagSupport后,doTag()的实作如下:

public void doTag() throws JspException { try {

if(test) {

getJspBody(). ; }

} catch (java.io.IOException ex) {

throw new JspException(\执行错误\ } }

如果test为true时,将执行本体内容并输出结果至浏览器,则空白部份应填入? (A) (B) (C) (D) 答案:C

invoke()

invoke(new JspWriter()) invoke(null)

invoke(new PrintWriter())

7. 在继承SimpleTagSupport后,doTag()的实作如下:

public void doTag() throws JspException { try {

if(test) { // ... } else {

throw new ; }

} catch (java.io.IOException ex) {

33

throw new JspException(\执行错误\ } }

如果test为false时,希望能中断JSP后续页面的处理?则空白部份应填入? (A) (B) (C) (D) 答案:A

SkipPageException() IOException()

ServletException() Exception()

8. 在继承TagSupport后,有个程序片段实作如下:

public int ______ ______ throws JspException { if(test) { // ...

return EVAL_PAGE; }

return SKIP_PAGE; }

如果test为false时,希望能中断JSP后续页面的处理?则空白部份应是实作哪个方法? (E) (F) (G) (H) 答案:G

doTag()

doStartTag() doEndTag() doAfterBody()

9. 在继承BodyTagSupport类别实作自订标签时,基本上doStartTag()

方法可以传回的有效值有哪几个? (A) SKIP_BODY

(B) EVAL_BODY_BUFFERED (C) EVAL_BODY_INCLUDE (D) EVAL_PAGE 答案:A、B、C

10. 在TagSupport类别的实作中,doStartTag()、doEndTag()的预设传

回值是?

34

(A) SKIP_BODY、EVAL_PAGE

(B) EVAL_BODY_INCLUDE、EVAL_PAGE (C) EVAL_BODY_INCLUDE、SKIP_PAGE (D) SKIP_BODY、SKIP_PAGE 答案:A

? 实作题

1. 请开发一个自订标签,可以如下使用:

你可以指定某个目录,这个自订卷标将取得该目录下所有图片的路径,并设定给var所指定的变量名称,之后在标签本体中可以使用该名称(像上例使用${image}搭配卷标将图片显示在浏览器上)。 2. 请将第8章课后练习的留言版程序,JSP页面中的Scriptlet使用EL、JSTL

或自订标签取代,让JSP页面中不出现任何的Scriptlet。

35

第10章课后练习

? 选择题

1. 哪几个Web容器提供的验证方式,会出现对话框让使用者输入名称、密码? (A) BASIC

(B) FORM (C) DIGEST

(D) CLIENT_CERT 答案:A、C、D

2. 以下何者验证方式,有机会自行设计登入画面与注销机制? (A) BASIC (B) FORM (C) DIGEST

(D) CLIENT_CERT

答案:B

3. 在使用容器窗体验证时,

的action属性应设置为? (A) j_security (B) j_check

(C) j_security_check (D) 没有规范

答案:C

4. 假设有以下的web.xml设定档:

Login Required /delete.jsp /delete.do GET POST

admin

36

以下描述何者正确?

(A) 只有admin角色才可以存取/delete.jsp与/delete.do (B) admin角色只允许使用GET与POST方法 (C) GET与POST方法只允许admin使用

(D) 其它角色可使用GET、POST以外的HTTP方法存取 答案:A、C、D

提示:admin可以使用所有的HTTP方法来存取/delete.jsp与/delete.do。

5. 如果要保证数据传输时的完整性与机密性,必须在

中使用哪两个标签? (A) (B) (C) (D) 答案:A、B

6. 假设有以下的web.xml设定档:

Login Required /delete.jsp /delete.do

以下描述何者正确?

(A) 所有角色都可以存取/delete.jsp与/delete.do

(B) 存取/delete.jsp与/delete.do任何HTTP方法都是允许的 (C) 没有任何角色可以存取/delete.jsp与/delete.do (D) 这个设定片段是错误的,无法部署 答案:C

7. 验证成功但授权失败,则会出现哪种状态码及讯息?

(A) (B) (C) (D)

404 Not Found 401 Unauthorized 403 Forbidden 500 Error

37

答案:C

8. 哪几个Web容器提供的验证方式,会需要使用到凭证? (A) (B) (C) (D) 答案:D

BASIC FORM DIGEST

CLIENT_CERT

9. HttpServletRequest中的isUserInRole()可以协助达到安全的哪项

要求? (A) 验证 (B) 授权 (C) 机密性 (D) 完整性 答案:B

提示:会使用到isUserInRole()方法的URL,基本上会先透过宣告式安全的验证及授权,再透过isUserInRole()作更细部的授权控制。

10. 以下何者是的合法设定值? (A) NONE

(B) CONFIDENTIAL (C) INTEGRAL (D) SSL 答案:A、B、C

? 实作题

1. 以第9章的课后练习为基础,假设你将开发一个删除留言的功能,这个功能

只能登入且具备admin角色的使用者才可以使用,若删除留言需要用到

/delete.jsp与/delete.do两个URL,请使用容器宣告式窗体验证对这两个URL加以保护。

38

第11章课后练习

? 选择题

1. 哪些JDBC驱动程序可以有跨平台的特性? (A) TYPE 1 (B) TYPE 2 (C) TYPE 3 (D) TYPE 4 答案:C、D

2. 哪种JDBC驱动程序是基于数据库所提供的API来进行实作? (A) (B) (C) (D) 答案:B

TYPE 1 TYPE 2 TYPE 3 TYPE 4

3. JDBC相关接口或类别,是放在哪个套件之下加以管理? (A) (B) (C) (D) 答案:C

java.lang javax.sql java.sql java.util

4. 使用JDBC时,通常会需要处理哪个受检例外(Checked Exception)?

(A) RuntimeException (B) SQLException (C) DBException (D) DataException 答案:B

5. 关于Connection的描述,何者正确?

(A) 可以从DriverManager上取得Connection (B) 可以从DataSource上取得Connection (C) 在方法结束之后Connection会自动关闭 (D) Connection是执行绪安全(Thread-safe)

39

答案:A、B

提示:Connection不是执行绪安全的,不可以在多执行绪环境下共享Connection,以免发生数据错乱的问题。

6. 使用Statement来执行SELECT等查询用的SQL指令时,应使用下列哪

个方法? (A) (B) (C) (D) 答案:B

executeSQL() executeQuery() executeUpdate() executeFind()

7. 哪个对象正确使用下,可以适当地避免SQL Injection的问题? (A) (B) (C) (D) 答案:B

Statement ResultSet

PreparedStatement Command

8. 取得Connection之后,如何取得Statement对象? (A) (B) (C) (D) 答案:A

conn.createStatement() conn.buildStatement() conn.getStatement()

conn.createSQLStatement()

9. 以下描述何者有误?

(A) 使用Statement一定会发生SQL Injection

(B) 使用PreparedStatement就不会发生SQL Injection (C) 不使用Connection时必须加以关闭

(D) ResultSet代表查询的结果集合 答案:A、B

提示:只要有正确的使用观念,即使用Statement也不一定会发生SQL Injection。如果使用不正确,使用PreparedStatement也有可能发生SQL Injection。

10. 使用Statement的executeQuery()方法,会传回哪个型态?

(A) int

40

(B) boolean (C) ResultSet (D) Table 答案:C

? 实作题

1. 以第9章的课后练习为基础,将先前的留言版程序,改用数据库储存留言版

讯息,并新增「删除留言」功能。

2. 请继续扩充留言版程序,使之具备响应留言、删除留言、分页显示等功能。

41

第12章课后练习

? 选择题

1. 当继承HttpServlet后,重新定义doGet()方法,以在GET请求来到时

执行,这实际上是哪个模式的实现结果? (A) Factory Method模式 (B) Template Method模式 (C) Command模式 (D) Proxy模式 答案:B

2. 在web.xml中定义使用者登入验证过滤器、效能过滤器,就可以有拦截请

求,这是哪个模式的实现?

(A) Business Delegate模式 (B) Interceptor Filter模式 (C) Service Locator模式 (D) Front Controller模式 答案:B

3. 以下哪几个属于Java EE模式?

(A) Business Delegate模式 (B) Interceptor Filter模式 (C) Service Locator模式 (D) Front Controller模式 答案:A、B、C、D

4. 想要降低前端所采用技术及后端服务对象的耦合度,例如为免日后前端从

Servlet/JSP改用JSF时必须对后端对象作出修改,则适合采用哪个模式? (A) (B) (C) (D) 答案:A

Business Delegate模式 Interceptor Filter模式 Service Locator模式 Front Controller模式

5. 在分布式的应用当中,你希望对某个对象隐藏取得远程服务对象的细节(也

许是透过RMI、JNDI等),则应采用哪个模式?

42

(A) Business Delegate模式 (B) Interceptor Filter模式 (C) Service Locator模式 (D) Front Controller模式 答案:C

43