毕业作品网站

 首 页 机械毕业设计 电子电气毕业设计 计算机毕业设计 土木工程毕业设计 视觉传达毕业设计 理工论文 文科论文 毕设资料 帮助中心 设计流程 
垫片
您现在所在的位置:首页 >>毕设资料 >> 文章内容
                 
垫片
   我们提供全套毕业设计和毕业论文服务,联系微信号:biyezuopinvvp QQ:1015083682   

Servlet&JSP课后习题解答

文章来源:www.biyezuopin.vip   发布者:毕业作品网站  

<param-name>param1</param-name>

<param-value>1</param-value>

</init-param>

<init-param>

<param-name>param2</param-name>

<param-value>2</param-value>

</init-param>

</servlet>

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

public void init() throws ServletException {

super.init();

int param1 = getInitParameter("param1");

int param2 = getInitParameter("param2");

}

以下何者描述正确?

(A) 第二对<param-name>、<param-value>可以直接撰写在第一个<init-param>之中

(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中有以下的设定:

<web-app ...>

<listener>

<listener-class>cc.openhome.SomeListener</listener-class>

</listener>

...

<web-app>

以下何者正确?

(A) SomeListener类别要实作ServletContextListener接口

(B) 每生成一个Servlet实例就会呼叫ServletContextListener的init()方法

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

(D) 不需要<listener-class>这个标签

答案:A、C

l 实作题

1. 请使用目前所学得的Servlet相关技巧,实作一个在线留言版程序,其中必须包括以下的功能:

(1). 有个档案会储存留言,应用程序初始时,必须从该档案中加载留言记录。

(2). 「观看留言」功能,每笔留言中包括了留言者的头像、名称与留言讯息。下图是个简单的示范。

图4.8 观看留言

(3). 动态「留言窗体」功能,新增留言时使用的窗体。其中包括了输入留言者名称、留言的字段,并可以让使用者选取头像。头像存放的目录可以由Servlet初始参数设定。窗体必须可以自动显示头像存放目录中的图片,有多少图片就显示多少个头像。若新增留言失败也会将请求转发回窗体,此时要显示错误讯息以及使用者先前填写的名称与留言。下图是个简单的示范。

图4.9 新增留言窗体

(4). 「新增留言」功能,必须作基本的请求参数检查。留言失败及成功的URL,必须可以由Servlet初始参数来设定。留言成功时必须显示留言成功讯息、使用者名称、留言与头像。下图是个简单的示范。

图4.10 新增留言成功

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


第5章课后练习

l 选择题

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

(A) HttpSession

(B) URL重写

(C) 隐藏字段

(D) Cookie API

答案:B、C

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

(A) 使用setMaxAge()

(B) 使用setMaxInactive()

(C) 使用setMaxInactiveInterval()

(D) 在web.xml中设定<cookie-timeout>

答案:A

3. web.xml中<session-timeout>的设定单位是?

(A) 时

(B) 分

(C) 秒

(D) 毫秒

答案:B

4. 何者可以实作使用者的自动登入机制?

(A) HttpSession

(B) Cookie

(C) HttpServletRequest

(D) URL重写

答案:B

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

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

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

(C) 用来设定Cookie的失效时间

(D) 会覆盖web.xml中<session-timeout>的设定

答案: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) ServletRequest

(B) HttpSession

(C) ServletConfig

(D) ServletContext

答案:B、D

10. HttpSession失效的时机为何?

(A) 执行invaliate()方法

(B) 下次请求超过web.xml中<session-timeout>的设定时间

(C) 存活时间超过setMaxInactiveInterval()方法设定的时间

(D) 关闭浏览器

答案:A、B

提示:无论是<session-timeout>或setMaxInactiveInterval()所设定的时间,都是指浏览器没有再次请求活动的时间,而不是指HttpSession本身的存活时间。

l 实作题

1. 请实作一个Web应用程序,可动态产生使用者登入密码,送出窗体后必须通过密码验证才可观看到使用者页面。

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

图5.10 图片验证

2. 实作一个登入窗体,如果使用者核取「记住名称、密码」,则下次造访窗体时,将会自动在名称、密码字段填入上次登入时所使用的值。

图5.11 记住名称、密码


第6章课后练习

l 选择题

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

(A) Filter接口定义了init()、service()与destroy()方法

(B) 会传入ServletRequest与ServletResponse至Filter

(C) 要执行下一个过滤器,必须执行FilterChaing的next()方法

(D) 如果要取得初始参数,要使用FilterConfig物件

答案:B、D

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

<filter>

<filter-name>SecurityFilter</filter-name>

<filter-class>cc.openhome.SecurityFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>SecurityFilter</filter-name>

<url-pattern>*.do</url-pattern>

<init-param>

<param-name>USER</param-name>

<param-value>caterpillar</param-value>

</init-param>

<init-param>

<param-name>PASSWORD</param-name>

<param-value>123456</param-value>

</init-param>

</filter-mapping>

以下描述何者正确?

(A) 根据<filter-mapping>,过滤器会套用在所有以.do结尾的URL请求

(B) 可以透过FilterConfig来读取USER与PASSWORD初始参数

(C) 初始参数设定位置错误,<init-param>等标签应放在<filter>标签之中

(D) <url-pattern>应改为<servlet-name>才是正确设定

答案:A、C

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

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

<filter-mapping>

<filter-name>SecurityFilter</filter-name>

<url-pattern>/add.do</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>SecurityFilter</filter-name>

<url-pattern>*.view</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>CharacterFilter</filter-name>

<url-pattern>/add.do</url-pattern>

</filter-mapping>

以下描述何者正确?

(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中<filter>设定的代表对象

(C) 可读取<servlet>标签中<init-param>所设定的初始参数

(D) 可使用getInitParameter()方法读取初始参数

答案: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

9. 在开发过滤器时,以下何者是正确的观念?

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

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

(C) 设计Servlet时必须考虑到未来加装过滤器的需求

(D) 每个过滤器要设计为独立互不影响的组件

答案:B、D

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()方法。

l 实作题

1. 模仿本单元综合练习,重构第4章元课后练习中的留言版程序,将从档案读写留言版讯息的职责封装至一个MessageServlce类别中。。

2. 你的留言版程序不允许使用者输入HTML标签,但可以允许使用者输入一些代码作些简单的样式。例如:

l [b]粗体[/b]

l [i]斜体[/i]

l [big]放大字体[/big]

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

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


第7章课后练习

l 选择题

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("user", user);

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

(A) 实作HttpSessionBindingListener

(B) 实作HttpSessionListener

(C) 实作HttpSessionActivationListener

(D) 以上皆非

答案:B

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

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

<servlet>

<servlet-name>Some</servlet-name>

<servlet-class>cc.openhome.SomeServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet>

<servlet-name>Other</servlet-name>

<servlet-class>cc.openhome.OtherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet>

<servlet-name>AnOther</servlet-name>

<servlet-class>cc.openhome.AnOtherServlet</servlet-class>

<load-on-startup>2</load-on-startup>

</servlet>

请问以下描述何者正确?

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

(B) 容器会先初始化SomeServlet,再初始化OtherServlet

(C) 容器会先初始化AnOtherServlet,然后才是其它Servlet

(D) 容器在请求来到时,才会初始化对应的Servlet

答案:B

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

(A) <url-pattern>*.view</view>

(B) <url-pattern>/guest/*.view</view>

(C) <url-pattern>/guest/*</view>

(D) <url-pattern>/guest/list.view</view>

答案:A、C、D

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

<web-app …>

<welcome-file-list>

<welcome-file>______________</welcome-file>

</welcome-file-list>

</web-app>

(A) /guest/index.html

(B) /index.html

(C) default.jsp

(D) default.*

答案:C

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

<web-app …>

<error-page>

<exception-type>NullPointerException</exception-type>

<location>report.view</location>

</error-page>

</web-app>

(A) 发生NullPointerException时会转发report.view处理

(B) 例外型态必须指定完全符合名称(Full Qualified Name)

(C) report.view必须改为/report.view

(D) 例外类型不可以指定特定的例外类别名称

答案:B、C

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

(A) <url-pattern>*.view</view>

(B) <url-pattern>/guest/*.view</view>

(C) <url-pattern>/guest/*</view>

(D) <url-pattern>/guest/list.view</view>

答案:A、C、D

提示:过滤器的<url-pattern>设定原则与Servlet相同。

l 实作题

1. 请扩充7.1.1节中的范例,不仅统计在线人数,还可以在页面上显示目前登入使用者的名称、浏览器信息、最后活动时间。

图7.14 在线使用者信息

2. 在7.1.3节中,使用HttpSessionBindingListener来实作使用者登入、注销的日志记录功能,请改用HttpSessionAttributeListener来实作这个功能。


第8章课后练习

l 选择题

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是否一致。

5. 哪个JSP隐含对象,转译后对应ServletContext物件?

(A) pageContext

(B) config

(C) page

(D) application

答案:D

6. 在Session范围中以名称"bean"放置了一个JavaBean属性,JavaBean上有个getMessage()方法,请问以下哪个方式呼叫getMessage()以取得讯息并显示出来?

(A) <jsp:getProperty name="bean" property="message">

(B) ${requestScope.bean.message}

(C) <%= request.getBean().getMessage() %>

(D) ${bean.message}

答案:B、D

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

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

Map map = new HashMap();

map.put("user", "caterpillar");

map.put("role", "admin");

request.setAttribute("login", map);

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

(A) ${map.user}

(B) ${map["role"]}

(C) ${login.user}

(D) ${login[role]}

答案:C

提示:选项D必须改为${login["role"]}才是正确。

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

Map map = new HashMap();

map.put("local.role", "admin");

request.setAttribute("login", map);

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

(A) ${map.local.role}

(B) ${login.local.role}

(C) ${map["local.role"]}

(D) ${login["local.role"]}

答案:D

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

List names = new ArrayList();

names.add("caterpillar");

request.setAttribute("names", names);

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

(A) ${names.0}

(B) ${names[0]}

(C) ${names.[0]}

(D) ${names["0"]}

答案:B、D

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

10. 以下何者不是EL隐含物件?

(A) param

(B) request

(C) pageContext

(D) cookie

答案:B

l 实作题

1. 先前章节实作在线留言版时,使用Servlet来实现画面的输出,请将之改为JSP,并尽量使用本章所学得的JSP元素,减少Scriptlet的使用。


第9章课后练习

l 选择题

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

(A) <c:if>

(B) <c:else>

(C) <c:when>

(D) <c:otherwise>

答案:A、C、D

2. 如果打算使用request对象的setCharacterEncoding()方法设定字符编码处理方式,则以下哪个JSTL标签可以让你不用使用Scriptlet?

(A) <c:if>

(B) <c:set>

(C) <c:out>

(D) <c:url>

答案:B

3. 如果taglib设定如下:

<%@taglib prefix="x" uri="http://openhome.cc/magic/x"%>

则以下何者会是使用自订标签的正确方式?

(A) <x:if>

(B) <magic:forEach>

(C) <if/>

(D) <x:if/>

答案:D

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

<%@taglib  prefix="html" tagdir="/WEB-INF/tagFile" %>

以下何者描述正确?

(A) 可以<html:Errors/>的方式使用自订标签

(B) 可以<htmlErrors/>的方式使用自订标签

(C) 可以<Errors/>的方式使用自订标签

(D) taglib的定义有误,无法使用自订标签

答案:D

提示:如果是Tag File,则tagdir只有可能是/WEB-INF/tags或其子资料夹。

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("执行错误", ex);

}

}

如果test为true时,将执行本体内容并输出结果至浏览器,则空白部份应填入?

(A) invoke()

(B) invoke(new JspWriter())

(C) invoke(null)

(D) invoke(new PrintWriter())

答案:C

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

public void doTag() throws JspException {

try {

if(test) {

// ...

}

else {

throw new                           ;

}

} catch (java.io.IOException ex) {

throw new JspException("执行错误", ex);

}

}

如果test为false时,希望能中断JSP后续页面的处理?则空白部份应填入?

(A) SkipPageException()

(B) IOException()

(C) ServletException()

(D) Exception()

答案:A

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

public int ______    ______ throws JspException {

if(test) {

// ...

return EVAL_PAGE;

}

return SKIP_PAGE;

}

如果test为false时,希望能中断JSP后续页面的处理?则空白部份应是实作哪个方法?

(E) doTag()

(F) doStartTag()

(G) doEndTag()

(H) doAfterBody()

答案:G

9. 在继承BodyTagSupport类别实作自订标签时,基本上doStartTag()方法可以传回的有效值有哪几个?

(A) SKIP_BODY

(B) EVAL_BODY_BUFFERED

(C) EVAL_BODY_INCLUDE

(D) EVAL_PAGE

答案:A、B、C

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

(A) SKIP_BODY、EVAL_PAGE

(B) EVAL_BODY_INCLUDE、EVAL_PAGE

(C) EVAL_BODY_INCLUDE、SKIP_PAGE

(D) SKIP_BODY、SKIP_PAGE

答案:A

l 实作题

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

<g:eachImage var="image" dir="/avatars">

<img src="${image}"/><br>

</g:eachImage>

你可以指定某个目录,这个自订卷标将取得该目录下所有图片的路径,并设定给var所指定的变量名称,之后在标签本体中可以使用该名称(像上例使用${image}搭配<img>卷标将图片显示在浏览器上)。

2. 请将第8章课后练习的留言版程序,JSP页面中的Scriptlet使用EL、JSTL或自订标签取代,让JSP页面中不出现任何的Scriptlet。


第10章课后练习

l 选择题

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. 在使用容器窗体验证时,<form>的action属性应设置为?

(A) j_security

(B) j_check

(C) j_security_check

(D) 没有规范

答案:C

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

<security-constraint>

<web-resource-collection>

<web-resource-name>Login Required</web-resource-name>

<url-pattern>/delete.jsp</url-pattern>

<url-pattern>/delete.do</url-pattern>

<http-method>GET</http-method>

<http-method>POST</http-method>

</web-resource-collection>

<auth-constraint>

<role-name>admin</role-name>

</auth-constraint>

</security-constraint>

以下描述何者正确?

(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. 如果要保证数据传输时的完整性与机密性,必须在<security_contraint>中使用哪两个标签?

(A) <user-data-constraint>

(B) <transport-guarantee>

(C) <auth-constraint>

(D) <form-login-config>

答案:A、B

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

<security-constraint>

<web-resource-collection>

<web-resource-name>Login Required</web-resource-name>

<url-pattern>/delete.jsp</url-pattern>

<url-pattern>/delete.do</url-pattern>

</web-resource-collection>

<auth-constraint/>

</security-constraint>

以下描述何者正确?

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

(B) 存取/delete.jsp与/delete.do任何HTTP方法都是允许的

(C) 没有任何角色可以存取/delete.jsp与/delete.do

(D) 这个设定片段是错误的,无法部署

答案:C

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

(A) 404 Not Found

(B) 401 Unauthorized

(C) 403 Forbidden

(D) 500 Error

答案:C

8. 哪几个Web容器提供的验证方式,会需要使用到凭证?

(A) BASIC

(B) FORM

(C) DIGEST

(D) CLIENT_CERT

答案:D

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

(A) 验证

(B) 授权

(C) 机密性

(D) 完整性

答案:B

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

10. 以下何者是<transport-guarantee>的合法设定值?

(A) NONE

(B) CONFIDENTIAL

(C) INTEGRAL

(D) SSL

答案:A、B、C

l 实作题

1. 以第9章的课后练习为基础,假设你将开发一个删除留言的功能,这个功能只能登入且具备admin角色的使用者才可以使用,若删除留言需要用到/delete.jsp与/delete.do两个URL,请使用容器宣告式窗体验证对这两个URL加以保护。


第11章课后练习

l 选择题

1. 哪些JDBC驱动程序可以有跨平台的特性?

(A) TYPE 1

(B) TYPE 2

(C) TYPE 3

(D) TYPE 4

答案:C、D

2. 哪种JDBC驱动程序是基于数据库所提供的API来进行实作?

(A) TYPE 1

(B) TYPE 2

(C) TYPE 3

(D) TYPE 4

答案:B

3. JDBC相关接口或类别,是放在哪个套件之下加以管理?

(A) java.lang

(B) javax.sql

(C) java.sql

(D) java.util

答案:C

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)

答案:A、B

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

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

(A) executeSQL()

(B) executeQuery()

(C) executeUpdate()

(D) executeFind()

答案:B

7. 哪个对象正确使用下,可以适当地避免SQL Injection的问题?

(A) Statement

(B) ResultSet

(C) PreparedStatement

(D) Command

答案:B

8. 取得Connection之后,如何取得Statement对象?

(A) conn.createStatement()

(B) conn.buildStatement()

(C) conn.getStatement()

(D) conn.createSQLStatement()

答案:A

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

(B) boolean

(C) ResultSet

(D) Table

答案:C

l 实作题

1. 以第9章的课后练习为基础,将先前的留言版程序,改用数据库储存留言版讯息,并新增「删除留言」功能。

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


第12章课后练习

l 选择题

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) Business Delegate模式

(B) Interceptor Filter模式

(C) Service Locator模式

(D) Front Controller模式

答案:A

5. 在分布式的应用当中,你希望对某个对象隐藏取得远程服务对象的细节(也许是透过RMI、JNDI等),则应采用哪个模式?

(A) Business Delegate模式

(B) Interceptor Filter模式

(C) Service Locator模式

(D) Front Controller模式

答案:C

,

第1章课后练习

l 选择题

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。

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

10. Java EE中各技术标准最后将由什么文件明订规范?

(A) JCP

(B) JSR

(C) JDK

答:B

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


第2章课后练习

l 选择题

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

答案:C

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

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

<servlet>

<servlet-name>Goodbye</servlet-name>

<servlet-class>cc.openhome.LogutServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>GoodBye</servlet-name>

<url-pattern>/goodbye</url-pattern>

</servlet-mapping>

哪个URL可以正确的要求Servlet进行请求处理?

(A) /GoodBye

(B) /goodbye.do

(C) /LoguotServlet

(D) /goodbye

答案:D

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应用程序的档案与目录结构中,web.xml是直接放置在哪个目录之中?

(A) WEB-INF目录

(B) conf目录

(C) lib目录

(D) classes目录

答案:A

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

<servlet>

<servlet-name>HelloServlet</servlet-name>

<java-class>cc.openhome.HelloServlet</java-class>

</servlet>

<servlet-mapping>

<mapping-name>HelloServlet</mapping-name>

<url-pattern>/hello</url-pattern>

</servlet-mapping>

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

(A) <url-pattern>标签中的设定一定要用.do作结尾

(B) <mapping-name>标签应改为<servlet-name>,结尾标签名称也要修改

(C) <java-name>标签应改为<servlet-class>,结尾标签名称也要修改

(D) <servlet>标签应改为<servlet-definition>,结尾标签名称也要修改

答案:B、C

提示:<url-pattern>可以无需.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联机来进行。

l 实作题

1. 讲师提示:这个练习在让学生动手实作HttpServlet的继承、web.xml的定义,并能够自行查询在线API文件,了解HttpServletRequest有哪些方法可以利用。

2. 提示:这个练习在让学生动作撰写窗体(学生必须自行学习基本的HTML),了解GET与POST如何在Servlet中进行处理,学生必须重新定义doPost()方法,并了解如何在Servlet中撰写判断分支来呈现不同条件下的结果画面。


第3章课后练习

课后练习

l 选择题

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

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.____________;

out.println("<html>");

...

(A) getPrintWriter()

(B) getWriter()

(C) getBufferedWriter()

(D) getOutputWriter()

答案:B

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

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

out.flush();

request.getRequestDispatcher("message.jsp")

.forward(request,response);

out.println("Hello!World!");

(A) 显示"第一个Servlet程序"后转发message.jsp

(B) 显示"第一个Servlet程序"与"Hello!World!"

(C) 直接转发给message.jsp进行响应

(D) 丢出IllegalStateException

答案:A

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

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

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

(B) request.getRequestDispatcher("/WEB-INF/secret.jsp")并进行forward()

(C) 使用response.sendRedirect("/WEB-INF/secret.jsp")

(D) 使用response.sendError("/WEB-INF/secret.jsp")

答案:B

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

(A) request.getHeaderParameter("User-Agent")

(B) request.getParameter("User-Agent")

(C) request.getHeader("User-Agent")

(D) request.getRequestHeader("User-Agent")

答案:C

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("password");

(B) request.getParameters("password")[0];

(C) request.getParameterValues("password")[0];

(D) request.getRequestParameter("password");

答案:A、C

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

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

PrintWriter writer = response.getWriter();

writer.println("第一个Servlet程序");

OutputStream stream = response.getOutputStream();

stream.println("第一个Servlet程序".getBytes());

(A) 浏览器会看到两段"第一个Servlet程序"的文字

(B) 浏览器会看到一段"第一个Servlet程序"的文字

(C) 丢出IllegalStateException

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

答案:C

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

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

(A) response.setHeader("Content-Type", "text/html");

(B) response.setContentType("text/html");

(C) response.addHeader("Content-Type", "text/html");

(D) response.setContentHeader("text/html");

答案:A、B、C

9. 下面哪个选项,可以正确地追加自订标头"MyHead"的值?

(A) response.setHeader("MyHeader", "Value2");

(B) response.appendHeader("MyHeader", "Value2");

(C) response.addHeader("MyHeader", "Value2");

(D) response.insertHeader("MyHeader", "Value2");

答案:C

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

(A) getMethod()

(B) getHeader()

(C) getParameter()

(D) getCookies()

答案:A、B、C

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

l 实作题:

1. 请实作一个Web应用程序,可以将使用者所发送的name请求参数值画在一张图片上(参考下图,底图可任选)。

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

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

2. 请实作一个Web应用程序,可动态产生使用者登入密码(参考下图,仅需先确作出动态产生密码图片的功能即可,送出窗体后的密码验证功能还不用实现)。

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

图3.21 动态产生登入密码


第4章课后练习

课后练习

l 选择题

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

(A) ServletConfig

(B) ServletContext

(C) ServletRequest

(D) Session

答案:B

2. 如果要取得ServletContext初始参数,则可以执行哪个方法?

(A) getContextParameter()

(B) getParameter()

(C) getInitParameter()

(D) getAttribute()

答案:C

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

public class SomeServlet extends HttpServlet {

private String param;

public SomeServlet() {

param = getInitParameter("PARAM");

}

}

以下何者正确?

(A) param被设定为web.xml中的初始参数值

(B) 无法通过编译

(C) 应该改用getServletParameter()方法

(D) 发生NullPointerException

答案:D

提示:getInitParameter()也是透过ServletConfig来取得初始参数,在建构式执行时,由于尚未进行Servlet初始化,ServletConfig尚未经由init()方法传入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) <init-param>

<param-name>PARAM</param-name>

<param-value>VALUE</param-value>

</init-param>

(B) <context-param>

<param-name>PARAM</param-name>

<param-value>VALUE</param-value>

</context-param>

(C) <init-param>

<param-name>PARAM1</param-name>

<param-value>VALUE1</param-value>

<param-name>PARAM1</param-name>

<param-value>VALUE1</param-value>

</init-param>

(D) <context-param>

<param-name>PARAM1</param-name>

<param-value>VALUE1</param-value>

</context-param>

<context-param>

<param-name>PARAM2</param-name>

<param-value>VALUE2</param-value>

</context-param>

答案:B、D

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

(A) FileInputStream input =

new FileInputStream("/WEB-INF/data.txt");

(B) FileInputStream input = new FileInputStream(

new File("/WEB-INF/data.txt"));

(C) InputStream input =

getResourceAsStream("/WEB-INF/data.txt");

(D) FileInputStream input =

getResourceAsStream("/WEB-INF/data.txt");

答案:C

7. ServletContext定义与属性相关的方法是哪三个?

(A) getAttribute();

(B) setAttribute();

(C) deleteAttribute()

(D) removeAttribute();

答案:A、B、D

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

<servlet>

<servlet-name>Some</servlet-name>

<servlet-class>cc.openhome.SomeServlet</servlet-class>

<init-param>

  全套毕业设计论文现成成品资料请咨询微信号:biyezuopinvvp QQ:1015083682     返回首页 如转载请注明来源于www.biyezuopin.vip  

                 

打印本页 | 关闭窗口
  下一篇文章:Java Web应用开发复习题
本类最新文章
手部康复指板屈伸按摩装置的机构设 智能电表控制电路设计 论文指导记 家用光伏发电系统逆变电源设计 开
家用光伏发电系统逆变电源设计 任 家用光伏发电系统逆变电源设计 选 钢筋调直机机械结构设计 开题报告
| 关于我们 | 友情链接 | 毕业设计招聘 |

Email:biyeshejiba@163.com 微信号:biyezuopinvvp QQ:1015083682  
本站毕业设计毕业论文资料均属原创者所有,仅供学习交流之用,请勿转载并做其他非法用途.如有侵犯您的版权有损您的利益,请联系我们会立即改正或删除有关内容!