文档库

最新最全的文档下载
当前位置:文档库 > JSP课后习题答案

JSP课后习题答案

第1章

1.什么是静态网页?什么是动态网页?两者的区别是什么?试举例说明。

答:在网站设计中,纯粹HTML格式的网页通常被称为“静态网页”,早期的网站一般都是由静态网页制作的。静态网页是相对于动态网页而言,是指没有后台数据库、不含程序和不可交互的网页。你编的是什么它显示的就是什么、不会有任何改变。静态网页相对更新起来比较麻烦,适用于一般更新较少的展示型网站。静态网页的网址形式通常为:http://www.wendangku.net/doc/b976f04ee518964bcf847c9d.html/eg/eg.htm,也就是以.htm、.html、.shtml、.xml等为后后缀的。在HTML 格式的网页上,也可以出现各种动态的效果,如.GIF格式的动画、FLASH、滚动字母等,这些“动态效果”只是视觉上的,与下面将要介绍的动态网页是不同的概念。

我们将静态网页的特点简要归纳如下:

(1)静态网页每个网页都有一个固定的URL,且网页URL以.htm、.html、.shtml等常见形式为后缀,而不含有“?”;

(2)网页内容一经发布到网站服务器上,无论是否有用户访问,每个静态网页的内容都是保存在网站服务器上的,也就是说,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件;

(3)静态网页的内容相对稳定,因此容易被搜索引擎检索;

(4)静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难;

(5)静态网页的交互性交叉,在功能方面有较大的限制

动态网页是与静态网页相对应的,也就是说,网页URL的后缀不是.htm、.html、.shtml、.xml等静态网页的常见形式,而是以.asp、.jsp、.php、.perl、.cgi等形式为后缀,并且在动态网页网址中有一个标志性的符号——“?”,如有这样一个动态网页的地址为:http://www.wendangku.net/doc/b976f04ee518964bcf847c9d.html/ip/index.asp?id=1这就是一个典型的动态网页URL形式。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的“动态效果”没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,采用动态网站技术生成的网页都称为动态网页。

我们将动态网页的一般特点简要归纳如下:

(1)动态网页以数据库技术为基础,可以大大降低网站维护的工作量;

(2)采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、用户管理、订单管理等等;

(3)动态网页实际上并不是独立存在于服务器上的网页文件,只有当用户请求时服务器才返回一个完整的网页;

(4)动态网页中的“?”对搜索引擎检索存在一定的问题,搜索引擎一般不可能从一个网站的数据库中访问全部网页,或者出于技术方面的考虑,搜索蜘蛛不去抓取网址中“?”后面的内容,因此采用动态网页的网站在进行搜索引擎推广时需要做一定的技术处理才能适应搜索引擎的要求。

静态网页与动态的区别

程序是否在服务器端运行,是重要标志。在服务器端运行的程序、网页、组件,属于动态网页,它们会随不同客户、不同时间,返回不同的网页,例如ASP、PHP、JSP、http://www.wendangku.net/doc/b976f04ee518964bcf847c9d.html、CGI等。运行于客户端的程序、网页、插件、组件,属于静态网页,例如html页、Flash、

JavaScript、VBScript等等,它们是永远不变的。

2. 什么是B/S模式?什么是C/S模式?试举例说明。

答:即浏览器服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面通过浏览器来实现,极少部分事务逻辑在前端(Browser)实现,主要事务逻辑在服务器端(Server)实现,形成所谓三层结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本。客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或SQL Server等数据库。浏览器通过Web Server 同数据库进行数据交互。

这种模式,我们通常将其成为瘦客户端模式。

典型的系统:网上银行、网上书店、Blog等等

客户机/服务器(Client/Server,C/S)模式

即客户机和服务器结构。这种体系结构模式是以数据库服务器为中心、以客户机为网络基础、在信息系统软件支持下的两层结构模型。这种体系结构中,用户操作模块布置在客户机上,数据存储在服务器上的数据库中。客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。目前大多数信息系统是采用Client/Server结构。

服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQL Server。客户端需要安装专用的客户端软件。

这种模式我们也通常成为胖客户端模式。

典型的系统:QQ、MSN

3. 什么是JSP?与ASP、PHP、http://www.wendangku.net/doc/b976f04ee518964bcf847c9d.html相比,JSP有哪些优点??

答:JSP(Java Server Pages)是由Sun Microsystems公司倡导的、许多公司参与一起建立的一种动态网页技术标准。JSP技术是用Java语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。

JSP不像CGI,ISAPI和NSAPI那样难于编写和维护,不像PHP那样只能适应中小流量的网站,也不像ASP那样受到跨平台的限制(只能运行于Microsoft公司开发的IIS和PWS 上)。JSP体现了当今最先进的网站开发思想,和其他Web开发工具相比,JSP有着它自己强大的优势。

程序可以跨台平执行。JSP可以让开发人员在任意环境中进行开发,在任意环境中进行系统部署,在任意环境中扩展应用程序。

多样化和功能强大的开发工具支持。Java有许多非常优秀的开发工具,而且有许多可以免费得到,并且其中的许多已经可以顺利地运行于多种平台之下。

强大的可伸缩性。从只有一个小的jar文件就可以运行servlet/jsp到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,一台服务器到无数台服务器,Java显示了巨大的生命力。。

4. JSP、Java和JavaScript有什么区别与联系??

答:JAVASCRIPT从其名称含义是JAVA脚本,是在浏览器中运行的脚本语言,由于其大部分语法规范取自于JAVA语法规范,所以取名为JAVASCRIPT。JAVASCRIPT是一门基于对象的弱类型脚本编程语言,主要用来制作网页前台的技术。并且是现在比较热门的AJAX技术的核心。

JSP是JAVA SERVER PAGE的首字母缩写,顾名思义,是JAVA的服务端页面,其动态语法部分完全是JAVA规范。JSP是基于Java的技术,用于创建可支持跨平台及Web服

务器的动态网页。从构成情况上来看,JSP页面代码一般由普通的HTML语句和特殊的基于Java语言的嵌入标记组成,所以它具有了Web和Java功能的双重特性。JSP是和ASP,PHP 一样的服务器端语言,主要用来制作网站后台的技术。

JAVA是和C/C++一个等级的强类型编程语言,是纯面向对象的.比起JSP和JAVASCRIPT要复杂的多。一般学好JAVA就能很容易转向其他两门语言。

总结:JSP是JAVA技术的其中之一,所以学好了JAVA过渡到JSP从编程角度来讲比较容易,学好JSP以后要想学好JAVA,就还要学习更多的JAVA方面的东西,比如JAVABEAN,企业级应用等等。

JAVASCRIPT严格来讲,除了语法参照了JAVA语法规范外,和JAVA毫无关系,所以两者之间只是语法规范类似,相互之间的过渡就只有语法能够参照,其他的都得分别去了解,JAVASCRIPT是过程式语言,JAVA则是面向对象的。

第2章

1. 什么是HTML 语言?HTML文件有什么特征?

答:HTML是超文本标记语言(Hypertext Mark-up Language)的缩写,主要用来创建与系统平台无关的网页文档。它是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言,它不是编程语言,而是一种描述性的标记(标签)语言。

HTML文件是纯文本文件,是由HTML命令组成的描述性文本,HTML命令可以说明文字、图形、动画、声音、表格、链接等。HTML文件能用任意的文本编辑器编辑,如:记事本、写字板、Word等,也可以使用所见即所得的编辑器来编辑HTML文件,如Dreamweaver等。

2. 什么是JavaScript?

答:JavaScript是由Netscape公司开发的一种网页的脚本编程语言,它支持客户端与服务器端的应用程序以及构件的开发。JavaScript是一种解释性的语言,它的基本结构形式与其他编程语言相似,需要先编译后执行。JavaScript是适应动态网页制作的需要而诞生的一种新的编程语言,如今越来越广泛地使用于Internet网页制作上。在HTML基础上,使用Javascript可以开发交互式Web网页。JavaScript的出现使得网页和用户之间实现了一种实时性的、动态的、交互性的关系,使网页包含更多活跃的元素和更加精彩的内容。

3. 简述HTML和JavaScript在JSP动态网页中所扮演的角色。

答:要使用JSP开发出专业的动态网站,首先必须熟练掌握静态网站的制作技术。HTML 是在学习JSP之前必须了解的基础知识,很多JSP语法的使用都是建立在HTML文档的基础上。实际开发中,一般都是使用现成的HTML文档来添加JSP的动态脚本并做适当修改,除了特殊的应用,很少从零开始写一个JSP页面,所以读懂HTML文档并了解HMTL语言中的技巧为更快地上手JSP提供了很大的帮助。

JavaScript是JSP知识体系中一个可选的知识模块。也就是说不了解JavaScript知识也不会影响JSP的应用开发,但是如果掌握了JavaScript的知识,将可以更加方便地解决网页开发中的某些特定问题,例如经常使用JavaScript判断用户在表单中输入数据的合法性。

第3章

第4章

1.如何在HTML网页中嵌入JSP程序代码?怎样来定义JSP中的声明区与程序区?

答:在JSP网页中必须于<%与%>符号间嵌入程序代码。

JSP声明的语法格式为:

<%! declaration; [ declaration; ] ... %> 或<%! 声明; [声明; ] ... %>

脚本代码的语法格式如下:

<% code fragment %> 或<% 代码%>

2.请说明JSP中有哪3个指令元素,以及这3个指令的主要用途。

答:page指令:可用来设置JSP网页的特性,如编码方式、引用类、缓冲区等。

include指令:可用来将HTML、文本文件或者JSP程序加载当前的JSP网页。

taglib指令:可用来引用一个自定义的标签库。

3.JSP中include指令与include动作的区别?

答:include指令是指把其它页面的Java代码(源码)加进来,跟本页面的代码合并在一起,相当于把源码从那个页面复制到本页面中来,然后再编译。并且由于本页面编译时已经包含了别的文件的源码,所以以后其它页面更改时,本页面并不理会,因为已经编译过了。动作是指两个页面的代码运行完以后,再把包含的那个页面运行后的HTML结果页面加到本页面运行后的HTML结果页面中来。所以是运行时包含,并且还可以传递参数给被包含的页面。

4. JSP网页可以使用的特殊操作元素有哪些?其中操作元素各有什么功能?

答:可使用的操作元素有

:可将当前浏览器显示网页的网址,重新导向新的网址。

:主要用来传递参数给JSP程序,而由程序取得参数值。

第5章

1. JSP中的内建对象包含哪些?试简述这些对象在JSP中的主要功能。

答:request:取得客户端数据与系统的信息。

response:响应客户端信息。

application:记录与处理上线者共享的数据。

session:记录与处理上线者的个别数据。

out:控制数据输出的操作。

config:取得JSP编译后Servlet的信息。

pageContext:存取与处理系统运行时期的各项信息。

page:表示当前的JSP网页。

2. response重定向方法sendRedirect和动作元素的区别是什么?

(1)response.sendredirect()会在客户端呈现跳转后的URL地址;这种跳转称为客户端跳转。使用response.sendredirect()将重定向的URL发送到客户端,浏览器再根据这个URL 重新发起请求。所以用这个方法时,你在浏览器地址栏上会看到新的请求资源的地址。并且这个时候的request,response都和第一次的不一样了。这时是重新产生了新的request,response。

(2)使用完全是在服务器上进行,浏览器地址栏中的地址保持不变;这种跳转称为服务器端跳转。所以使用这个方法时没有产生新的用request,response。因为request没有变,在同一个请求内,可以用request来转递参数。

(3)response.sendRedirect()想带参数的话,自己在地址中写成xxx.jsp?param1=aaa&... 这种形式传递参数。能够使用标签向目标文件传送参数和值,目标文件必须是一个动态的文件,能够处理参数。

(4)后面的语句不会被执行也不会继续发送到客户端,response.sendRedirect()后面的语句会继续执行,除非语句前面有return。

(5)是在服务器的内部进行转换,只发送给客户端最后转到的页面,速度会比较快;response.sendRedirect()需要服务器与客户端之间的往返,可以转到任何页面,包括网络有效域名。但速度比较慢。

3. application与session存储数据变量的方式有何区别?

答:application:记录联机用户共享的数据。session:记录联机用户的个别数据。

4. 请说明session对象的生命周期在哪些状况下会结束。

答:当以下四种情形之一发生时,session与其中的数据便会消失:

(1)用户关闭当前正在使用的浏览器程序。

(2)关闭网页服务器。

(3)用户未向服务器提出请求超过预设的时间,Tomcat服务器预设为30分钟。

(4)运行程序结束session。

第6章

1. 请简述Cookie的概念与使用方式。

答:Cookie为浏览器提供的功能,是一种可将联机用户的数据存储在客户端计算机上的技术,要运用Cookie必须先建立一个Cookie对象来存储字符串数据,再将此Cookie对象传送到客户端。

2.查看自己计算机上Cookie文件的保存位置。浏览网页,运行书上的例子,看是否会把信息记录在此位置?文件是如何命名的?文件的内容是什么?

答:在默认情况下,Cookie是随着用户关闭浏览器而自动消失的。所以书上例子不会保存Cookie。如果在例2中我们在usingCookie.jsp中使用setMaxAge()方法,设置Cookie 对象的存在期限。这样Cookie对象就会保存在硬盘中的Cookies文件夹中如“C:\Documents and Settings\Administrator\Cookies”如文件“administrator@ch06[1].txt”。内容是如下代码“name

d

localhost/ch06/

1024

1524104704

30118001

4117789296

30117999

*”

3.Cookie的常见用途有哪些?

(1)网站浏览人数管理

由于代理服务器、缓存等的使用,唯一能帮助网站精确统计来访人数的方法就是为每个访问者建立一个唯一的ID。使用Cookie,网站可以完成以下工作:测定多少人访问过;测定访问者中有多少是新用户(即第一次来访),多少是老用户;测定一个用户多久访问一次网站。

通常情况下,网站设计者是借助后台数据库来实现以上目的的。当用户第一次访问该网站时,网站在数据库中建立一个新的ID,并把ID通过Cookie传送给用户。用户再次来访时,网站把该用户ID对应的计数器加1,得到用户的来访次数或判断用户是新用户还是老用户。

(2)按照用户的喜好定制网页外观

有的网站设计者,为用户提供了改变网页内容、布局和颜色的权力,允许用户输入自己的信息,然后通过这些信息对网站的一些参数进行修改,以定制网页的外观。

(3)在电子商务站点中实现诸如“购物篮”等功能

可以使用Cookie记录用户的ID,这样当你往“购物篮”中放了新东西时,网站就能记录下来,并在网站的数据库里对应着你的ID记录当你“买单”时,网站通过ID检索数据库中你的所有选择就能知道你的“购物篮”里有些什么。

4.Cookie与session有何不同?

session与Cookie同样是用来记录上线用户的个别数据的,两者的差异在于session是存在于服务器端,而Cookie则是存在于客户端。

第7章

1. 试说明什么是JavaBean。

答:JavaBean是一种特殊的Java程序,是用于包装特定功能的程序代码,可以被JSP 网页重复使用,其本身无法独立运行,是JSP网页程序组件化的核心。

2. 请说出如何在JSP网页中载入JavaBean。

A:

3. JavaBean对象可声明哪些不同的生命周期?

答:request、session、page及applaction。

4. JavaBean程序除了必须要有一个无传入值的建构式之外,还有哪些特色?

答:除了必须要有一个无传入值的建构式之外,还必须是一个公开的类,并以set及get 开头的方法来设置与取得属性。

5. 试说明Get和Post方法之间的差异?

答:Post和Get这两种设置方式主要的差异在于数据的传送方式,前者将所要传送的数

据包含在HTTP文件头中,后者则是将数据直接串接在网址栏的后端,两者都可使用GetParameter取得传送的数据内容。

第8章

1. import="java.io.*"

2. 试说明如何利用File类进行文件目录的操作?

答:利用File类进行文件目录的操作首先必需建立一个File对象,将所要操作文件或是目录完整路径当作参数传入,当File对象建立之后,JSP网页便可以利用这个对象调用File类的所有方法,以进行各种文件目录的操作。

3. 简述文件存取操作的操作过程。

答:首先利用File类建立一个参照指定文件的目录的File实体对象,接下来利用FileWriter和FileReader这两个类,进行指定文件的读写,其中的FileWriter的write方法,负责将数据写入文件,而FileReader的read则用来读取文件中的数据。

第9章

1) 创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话

create table student

(

学号int,

姓名varchar(10),

年龄int,

性别varchar(4),

家庭住址varchar(50),

联系电话varchar(11)

);

--------------------------------------------------------------------

2) 修改学生表的结构,添加一列信息,学历

alter table student add column 学历varchar(6);

--------------------------------------------------------------------

3) 修改学生表的结构,删除一列信息,家庭住址

alter table student drop column 家庭住址;//注意此处用drop而非delete

--------------------------------------------------------------------

4) 向学生表添加如下信息:

学号姓名年龄性别联系电话学历

1A22男123456小学

2B21男119中学

3C23男110高中

4D18女114大学

insert into student (学号,姓名,年龄,性别,联系电话,学历) values(1,"A",22,"男","123456","小学");

insert into student (学号,姓名,年龄,性别,联系电话,学历) values(1,"B",21,"男","119","中学");

insert into student (学号,姓名,年龄,性别,联系电话,学历) values(1,"C",23,"男","123456","高中");

insert into student (学号,姓名,年龄,性别,联系电话,学历) values(1,"D",23,"女","114","大学");

--------------------------------------------------------------------

5) 修改学生表的数据,将电话号码以11开头的学员的学历改为“大专”

update student set 学历="大专" where 联系电话like "11%";

--------------------------------------------------------------------

6) 删除学生表的数据,姓名以C开头,性别为‘男'的记录删除

delete from student where 姓名like "C" and 性别="男";

--------------------------------------------------------------------

7) 查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号示出来

select 姓名,学号from student where 年龄<22 and 学历="大专";

--------------------------------------------------------------------

8) 查询学生表的数据,查询所有信息,列出前25%的记录

select top 25 percent * from student ; ????

select * from student limit 25%;????

这条有问题,在sql 2000中应该是select top 25 percent * from student ;

--------------------------------------------------------------------

9) 查询出所有学生的姓名,性别,年龄降序排列

select 姓名,性别,年龄from student order by 年龄desc;

--------------------------------------------------------------------

10) 按照性别分组查询所有的平均年龄

select avg(年龄) as 平均年龄from student group by 性别;

select avg(年龄) from student group by 性别;

select avg(年龄) 平均年龄from student group by 性别;

第10章

1. 说明Statement与ResultSet接口的意义,以及这两个生成的对象在JSP程序处理数据库时,分别扮演着什么样的角色?

答:Statement:Statement接口中主要是提供了一些SQL运行的方法,以及设置运行SQL 后所返回ResultSet类型对象的属性。由此接口所生成的对象在JSP中同样是用来运行各种SQL指令与设置Resultset对象的属性。

ResultSet:ResultSet接口下所定义的方法大都是用来控制ResultSet对象中指针的移动的,以取得其中的数据元素。

2. 试列举说明Statement运行SQL指令的3种方法成员。

答:execute():运行一般SQL指令,例如建立数据库、修改数据表等等。

executeQuery():运行以SELECT语句开头的描述,这个方法同时返回一个包含查看结果的ResultSet对象。

executeUpdate():修改数据表内容,例如新增、删除与修改数据等。

3. 说明如何一次运行多段SQL语句。

答:首先建立一个Statement对象,将多个想要运行的SQL指令以addBatch()方法加到批处理文档中,最后引用executeBacth()方法运行。

第12章Servlet基础

1.简述Servlet和JSP的关系。

答:

Servlet是服务器端运行的一种Java应用程序。当浏览器端有请求则将其结果传递给浏览器。在JSP中使用到的所有对象都将被转换为Servlet或者非Servlet的Java对象,然后被执行,所以执行JSP实际上与执行Servlet是一样的。

2.简述Servlet的生命周期。

答:

Servlet的生命周期可分为下面几个阶段:

(1)装载Servlet。

(2)实例化一个Servlet实例对象。

(3)调用Servlet的init( )方法进行初始化。

(4)服务。

(5)卸载。

3.简述HttpSession接口的功能和使用方法。

答:

.HttpSession接口是Servlet提供会话追踪解决方案。HttpSession对象存放在服务器端,只是对cookie和url重写技术的封装应用。

使用HttpSession进行会话控制的过程:

(1)获得一个HttpSession实例对象;

(2)访问和设置与会话相关联信息,维护会话的状态;

(3)废弃会话数据。

4.简述开发一个Servlet所需要的步骤。

答:

第一步:编写Servlet实例

第二步:在web.xml文件中配置该Servlet

第三步:编写其它文件

5.编写一个html页面和一个Servelt,实现利用Servelt的doPost方法读取html文件中

Form表单内容。

答:

参考12.6.2

6.写一个利用HttpSession接口的用户登录的Servlet,当用户已经登录时,返回欢迎信息;否则转向登录页面。

答:

第一步:编写Servlet实例SessionServlet.java所示。

package com;

import java.io.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

/**

*

* 使用HttpSession管理会话的登录Servlet

*/

public class LoginServlet extends HttpServlet {

p rotected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

doPost(request, response);

}

p rotected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html;charset=GB2312");

PrintWriter out = response.getWriter();

out.println("");

out.println("");

out.println("");

out.println("使用HttpSession管理会话的登录页面");

out.println("");

out.println("");

// 获取会话对象

HttpSession session = request.getSession();

// 从会话对象中读取数据

Boolean isLogin = (Boolean) session.getAttribute("isLogin");

if (isLogin == null) {

isLogin = Boolean.FALSE;

}

String user = request.getParameter("user");

String password = request.getParameter("pass");

if (isLogin.booleanValue()) {

// 从会话对象中读取数据

user = (String) session.getAttribute("user");

Date loginTime = new Date(session.getCreationTime());

out.println("

欢迎您," + user + "!

");

out.println("

您的登录时间是:" + loginTime + "!

");

} else if ((user != null) && (password != null)) {

// 在会话对象中保存数据

session.setAttribute("user", user);

session.setAttribute("isLogin", Boolean.TRUE);

Date loginTime = new Date(session.getCreationTime());

out.println("

欢迎您," + user + "!

");

out.println("

您的登录时间是:" + loginTime + "!

");

} else {

out.println("

请在下面输入登录信息

");

out.println("

");

out.println("

");

out.println("

");

out.println("

");

out.println("

");

out.println("

");

out.println("

");

out.println("

");

out.println("

");

out.println("

");

out.println("

");

out.println("

");

out.println("

");

out.println("

");

out.println("

用户名:
密码:
");

out.println("

");

out.println("

");

}

out.println("");

out.println("");

}

}

第二步:在web.xml文件中配置该Servlet

……

getSession

getSession

com.SessionServlet

getSession

/getSession

……

第13章使用Servlet过滤器和监听器

1、什么是过滤器?什么是监听器?分别应用在哪些方面?

答:

对Web应用来说,过滤器就是驻留在服务器端,在源数据和目的数据间,对Web请求和Web响应的头属性(Header)和内容体(Body)进行操作的一种特殊Web组件。

Servlet监听器是WEB应用程序事件模型的一部分,Servlet监听器用于监听一些WEB应用中重要事件的发生,监听器对象可以在事情发生前、发生后Servlet容器就会产生相应的事件, Servlet监听器用来处理这些事件。

2、Filter接口、FilterConfig接口、FilterChain接口的功能分别是什么?提供的方法有哪些?

答:

所有的过滤器在开发中必须实现javax.servlet.Filter接口,并且提供一个公开的不带参数的构造方法。接口定义了init()、doFilter()和destroy()三方法,和Servelt接口类似,这三个方法分别对应Servlet过滤器生命周期中的初始化、响应和销毁三个阶段。

当容器对Filter对象进行初始化时,容器调用Filter的init方法,并传入一个实现FilterConfig接口的对象。Filter可使用该对象获得一些有用的信息。

javax.servlet.FilterChain接口由容器实现,容器将其实例作为参数传入过滤器对象的doFilter()方法中。过滤器对象使用FilterChain对象调用过滤器链中的下一个过滤器或者是将调用目标资源。

3、ServletContextListener接口、ServletContextAttributeListener接口、

4HttpSessionBindingListener接口的功能分别是什么?提供的方法有哪些?

答:

在Web应用程序启动时需要执行一些初始化任务时,可以编写实现了ServletContextListener接口的监听器类。在ServletContextListener接口中定义了两个事件处理方法,分别是contextInitialize()和contextDestroyed()。

为保证属性在整个Web应用范围内的一致性,有必要监视ServletContext对象的任何属性的改变。ServletContextAttributeListener侦听器就是为了这一目的而设立的。该侦听器是一个实现了接口ServletContextAttributeListener的Java类。ServletContextAttributeListener接口共提供了3种方法:(1)public void attributeAdded(ServletContextAttributeEvent scab)通知向

servlet 上下文中添加了一个新属性。在添加属性之后调用本方法。(2)public void attributeRemoved(ServletContextAttributeEvent scab)通知现有属性已从servlet 上下文中移除。在移除属性之后调用本方法。(3)public void attributeReplaced(ServletContextAttributeEvent scab)。

如果一个对象实现了HttpSessionBindingListener接口,当这个对象被绑定到Session中或从Session中删除时,Servlet容器会通知这个对象,这个对象在接收到通知后,做初始化操作或清除状态的操作。HttpSessionBindingListener接口提供了如下方法:(1)public void valueBound(HttpSessionBindingEvent event)当对象正在被绑定到Session中,Servlet容器通知对象它将被绑定到某个会话并标识该会话。(2)public void valueUnbound(HttpSessionBindingEvent event) 当从Session中删除对象时,Servlet容器通知对象要从某个会话中取消对它的绑定并标识该会话。

4、jsp乱码如何解决,几种解决方案?

答:添加编码方式、使用过滤器。

5、如何编写、配置过滤器,举例说明?

答:

第一步:开发jsp页面。

第二步:编写过滤器类

第三步:在web.xml文件中添加配置过滤器的代码

第四步:验证过滤器运行效果

6、如何编写、配置监听器,举例说明?

答:

第一步:开发jsp页面。

第二步:编写监听器类

第三步:在web.xml文件中添加配置监听器的代码

第四步:验证监听器运行效果

第14章JSTL标准标签库

1.请简述JSTL与一般的JSP技术有何差异。

答:使用JSTL实现动态JSP页面的最大特点在于简单,避免了使用脚本片段带来的许多问题,Web应用开发人员利用JSTL可以取代直接嵌入页面的代码片段,提高程序可读性和可维护性。

2.JSTL标签的分类主要有哪几种,请简单说明。

答:核心标签库、I18N 格式标签库、SQL 标签库、XML 标签库、函数标签库3.

4.在Tomcat中安装使用JSTL的步骤有哪些?

1)Sun的JSTL页面(http://www.wendangku.net/doc/b976f04ee518964bcf847c9d.html/products/jsp/jstl)提供JSTL规范文档和相关

实现的下载。Apache Jakarta项目是JSTL标准的一种实现,具体下载网址为:

http://www.wendangku.net/doc/b976f04ee518964bcf847c9d.html/dist/jakarta/taglibs/standard/。Windows系统下软件包的对应下载的文件名为:jakarta-taglibs-application-current.zip。

2)Jakarta JSTL的实现是一些JAR文件,如果在Web应用中使用JSTL,就需要在Web

应用的WEB-INF\lib目录下包含JSTL的JAR文件。将jstl.jar和standard.jar复制到Tomcat 网站根目录下的文件夹WEB-INF\lib当中,并将tld目录复制到Tomcat的WEB-INF目录下,重新启动Tomcat之后,就可以开始使用JSTL了。

5.这两种标签都可以用来进行流程判断,请说明它们的差异及用法。

答:标签用于进行条件判断,只有当其test属性指定的Boolean表达式值为true 时才会处理其本体的内容,否则不执行。

标记用来处理多个可选条件下的选择。标记需要和标记配套使用,并且必须依附在标签下。

6.使用JSTL标准标记库中的标记输出1到100中所有的数字之和。

提示:本程序所使用的JSTL核心标记库的uri为http://www.wendangku.net/doc/b976f04ee518964bcf847c9d.html/jsp/jstl/core

7.使用标准标签库中的标签、标签和标签列出1到100中能被2

整除不能被3整除的数字。

< c:if test!=${st.count%2}>

8.说明如何使用JSTL所提供的标签设置联机信息。

答:

使用标记来指定数据源,其语法为:

{ dataSource=“dataSource”| url=“jdbcUrl”

[driver=“driverClassName”]

[user=“userName”]

[password=“password”] }

[var=“varName”]

[scope=“{page|request|session|application}”] />

url属性用于指定连接的url。driver属性用于指定驱动程序。

dataSource属性为数据源。

第15章自定义标签库

1.创建自定义标签有几种方式?如何使用自定义标签?

答:

创建自定义标签:

1)传统标签的开发

2)Simple标签的开发

在标签库定义完成后,我们就可以在JSP页面中引用了自定义标签了:

1)在JSP文件中通过taglib指令引入了标签库。

2)在JSP页面通过标签前缀和标签名称使用标签。

2.编写自定义标签的步骤。

答:

1)编写标签处理类

2)在TLD文件中配置标签

3)在web.xml文件中配置标签库信息

4)在JSP页面中引用标签

3.使用Tag接口编写一个输出welcome的自定义标签。

WelcomeTag.java

package demo.tag;

/**

*自定义标签WelcomeTag

*

*/

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

import java.util.Hashtable;

import java.io.Writer;

import java.io.IOException;

import java.util.Date;

public class WelcomeTag implements Tag {

p rivate PageContext pageContext;

p rivate Tag parent;

p ublic WelcomeTag() {

super();

}

/**

* 设置标签的JSP页面上下文

*/

p ublic void setPageContext(PageContext pageContext) {

this.pageContext = pageContext;

}

/**

* 设置上一级标签

*/

p ublic void setParent(Tag parent) {

this.parent = parent;

}

p ublic Tag getParent() {

return parent;

}

/**

* 开始标签时的操作

*/

p ublic int doStartTag() throws JspException {

return Tag.SKIP_BODY;// 返回SKIP_BODY,表示不计算标签体}

/**

* 结束标签时的操作

*/

p ublic int doEndTag() throws JspException {

try {

pageContext.getOut().write("Welcome!");

} catch (IOException e) {

throw new JspTagException("IO Error:" + e.getMessage());

}

return Tag.EVAL_PAGE;

}

p ublic void release() {

}

}

标签库描述文件mytag.tld

……

welcome

ch15.Welcome

empty

配置web.xml

……

/mytag.tld

/WEB-INF/mutag.tld

JSP页面引用标签WelcomeTag.jsp

<%@page contentType="text/html;charset=gb2312" %>

<%@taglib uri="/WEB-INF/mytag.tld" prefix="my"%>

测试自定义标签




JSP爱好者

<% String outValue=",Welcome!"; %>

JSP爱好者

4.通过继承TagSupper类实现输出welcome的自定义标签。

WelcomeTagSupport.java

package demo.tag;

/**

*自定义标签WelcomeTagSupport

*/

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

import java.util.Hashtable;

import java.io.Writer;

import java.io.IOException;

import java.util.Date;

public class WelcomeTagSupport extends TagSupport {

/**

*开始标签时的操作

*/

public int doStartTag()throws JspException{

try{

pageContext.getOut().write("Welcome ,");

}catch(IOException e){

throw new JspTagException("IO Error:" + e.getMessage());

}

return Tag.EVAL_BODY_INCLUDE;//返回EVAL_BODY_INCLUDE,表示计算标签体}

/**

*结束标签时的操作

*/

public int doEndTag() throws JspException{

try{

pageContext.getOut().write(",Welcome!");

}catch(IOException e){

throw new JspTagException("IO Error:" + e.getMessage());

}

return Tag.EVAL_PAGE;

}

}

标签库描述文件mytag.tld

Welcome

ch15.WelcomeTagSupport

JSP

5.通过继承BodyTagSupport类实现welcome迭代输出。WelcomeBodyTagSupport.java

package demo.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.*;

public class WelcomeBodyTagSupport extends BodyTagSupport{

p rivate int count; //控制处理标签内容体的次数

/* 属性设置*/

public void setCount(int count){

this.count = count;

}

public int doStartTag() throws JspException {

if(this.count>0){

System.out.println("doStartTag");

return Tag.EVAL_BODY_INCLUDE;

}else{

return Tag.SKIP_BODY;

}

}

public void doInitBody() throws JspException {

System.out.println("initBody");

}

public void setBodyContent(BodyContent content) {

System.out.println("BodyContent");

bodyContent=content;

}

public int doAfterBody() throws JspException {

if((--count)>0){

System.out.println("doAfterBody:"+count);

return BodyTag.EVAL_BODY_AGAIN;

}

return BodyTag.SKIP_BODY;

}

public int doEndTag() throws JspException {

System.out.println("doEndTag");

if(bodyContent!=null){

try { //输出缓冲区里面的out中的内容

bodyContent.writeOut(bodyContent.getEnclosingWriter());

} catch (IOException e) { e.printStackTrace(); }

}

return super.doEndTag();

}

}// end of class

标签库描述文件mytag.tld

……

welcomeloop

demo.tag.WelcomeBodyTagSupport

JSP

count

true

true

第16章Web开发的应用

采用MVC模式编写用户登录验证程序。

系统中的文件可参考表16-5提示:

JSP课后习题答案