JSP程序设计习题解答

更新时间:2024-06-19 03:21:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

习题一

1.运行startup.bat启动Tomcat服务器的好处是什么?

答:确保Tomcat服务器使用的是Java_home环境变量设置的JDK。

2.请在C:\\下建立一个名字为book的目录,并将该目录设置成一个Web服务目录,然后编写一个简单的JSP页面,保存到该目录中,让用户使用虚拟目录red访问该JSP页面。 答:属于操作题,解答略。

3.怎样访问Web服务目录子目录中的JSP页面?

答:Web服务目录的下的目录称为该Web服务目录下的相对Web服务目录。浏览器的地址栏中键入:http://IP:8080/Web目录名字/子目录名字/JSP页面。

4.如果想修改Tomcat服务器的端口号,应当修改哪个文件?能否将端口号修改为80。 答:修改Tomcat服务器安装目录中conf文件夹中的主配置文件:server.xml,只要没有其他应用程序正在占用80,就可以将端口号设置为80。

习题二

1.“<%!”和“%>”之间声明的变量与“<%”和“%>”之间声明的变量有何不同? 答:“<%!”和“%>”之间声明的变量在整个JSP页面内都有效,称为JSP页面的成员变量,成员变量的有效范围与标记符号<%!、%>所在的位置无关。所有用户共享JSP页面的成员变量,因此任何一个用户对JSP页面成员变量操作的结果,都会影响到其他用户。

“<%”和“%>”之间声明的变量称为局部变量,局部变量在JSP页面后继的所有程序片以及表达式部分内都有效。运行在不同线程中的Java程序片的局部变量互不干扰,即一个用户改变Java程序片中的局部变量的值不会影响其他用户的Java程序片中的局部变量。当一个线程将Java程序片执行完毕,运行在该线程中的Java程序片的局部变量释放所占的内存。

2.如果有两个用户访问一个JSP页面,该页面中的Java程序片将被执行几次? 答:两次。

3.是否允许一个JSP页面同时含有如下两条page指令: <%@ page contentType=\<%@ page contentType=\是否允许JSP页面同时含有如下两条指令: <%@ page import=\

<%@ page import=\

答:第一个问题的答案是不允许;第二个问题的答案是允许。

4.假设有两个用户访问下列JSP页面hello.jsp,请问第一个访问和第二个访问hello.jsp页面的用户所看到的页面的效果有何不同?

1

Hello.jsp

<%@ page contentType=\<%@ page isThreadSafe=\ <%! int sum=10; void add(int m){

}

sum=sum+m;

%>

<% int n=600; add(n); %>

<%=sum%>

答:第一个用户看到的sum的值是610,第二个用户看到的sum的值是1210 5.请编写一个简单的JSP页面,显示大写英文字母表。 答:

<%@ page contentType=\ <%

for(char c='A';c<='Z';c++) {

out.print(\ } %>

6.请简单叙述include指令标记和include动作标记的不同。

答:include指令标记的作用是在JSP页面出现该指令的位置处,静态插入一个文件,即JSP页面和插入的文件合并成一个新的JSP页面,然后JSP引擎再将这个新的JSP页面转译成Java文件。因此,插入文件后,必须保证新合并成的JSP页面符合JSP语法规则,即能够成为一个JSP页面文件。

include动作标记告诉JSP页面动态加载一个文件,不把JSP页面中动作指令include所指定的文件与原JSP页面合并一个新的JSP页面,而是告诉Java解释器,这个文件在JSP运行时(Java文件的字节码文件被加载执行)才被处理。如果包含的文件是普通的文本文件,就将文件的内容发送到客户端,由客户端负责显示;如果包含的文件是JSP文件,JSP引擎就执行这个文件,然后将执行的结果发送到客户端,并由客户端负责显示这些结果。 7.编写两个JSP页面:main.jsp和lader.jsp,将两个JSP页面保存在同一Web服务目录中。main.jsp使用include动作标记动态加载lader.jsp页面。lader.jsp页面可以计算并显示梯形的面积。当lader.jsp被加载时获取main.jsp页面中include动作标记的param子标记提供的梯

2

形的上底、下底和高的值。 答: main.jsp:

<%@ page contentType=\

lader.jsp:

<%@ page contentType=\ <%

String strA=request.getParameter(\ String strB=request.getParameter(\ String strH=request.getParameter(\ double a=Double.parseDouble(strA); double b=Double.parseDouble(strB); double h=Double.parseDouble(strH); double area=(a+b)*h/2; %>

梯形面积:<%=area%>

习题三

1.用户可以使用浏览器直接访问一个Tag文件吗? 答:不可以

2.Tag文件应当存放在怎样的目录中?

答:如果某个Web服务目录下的JSP页面准备调用一个Tag文件,那么必须在该Web服务目录下,建立目录:Web服务目录\\WEB-INF\\tags,其中,WEB-INF和tags都是固定的子目录名称,而tags下的子目录名字可由用户给定。一个Tag文件必须保存到tags目录或其下的子目录中。

3.Tag文件中的tag指令可以设置哪些属性的值? 答:body-content、language、import、pageEncoding 。

3

4.Tag文件中的attribute指令有怎样的作用?

答:使用attribute指令可以动态地向该Tag文件传递对象的引用。

5.Tag文件中的varibute指令有怎样的作用?

答:使用variable指令可以将Tag文件中的对象返回给调用该Tag文件的JSP页面。 6.编写两个Tag文件Rect.tag和Circle.tag。Rect.tag负责计算并显示矩形的面积,Circle.tag负责计算并显示圆的面积。编写一个JSP页面lianxi6.jsp,该JSP页面使用Tag标记调用Rect.tag和Circle.tag。调用Rect.tag时,向其传递矩形的两个边的长度;调用Circle.tag时,向其传递圆的半径。 答:

Lianxi6.jsp:

<%@ page contentType=\<%@ taglib tagdir=\

以下是调用Tag文件的效果:

以下是调用Tag文件的效果: Rect.tag:

这是一个Tag文件,负责计算矩形的面积。 <%@ attribute name=\<%@ attribute name=\ <%!

public String getArea(double a,double b) { if(a>0&&b>0) {

double area=a*b ;

return \矩形的面积:\ } else

{ return(\不能构成一个矩形,无法计算面积\ } } %>

<% out.println(\页面传递过来的两条边:\ double a=Double.parseDouble(sideA); double b=Double.parseDouble(sideB); out.println(getArea(a,b)); %> Circle.tag:

4

这是一个Tag文件,负责计算园的面积。 <%@ attribute name=\ <%!

public String getArea(double r) { if(r>0)

{

double area=Math.PI*r*r ; return \圆的面积:\ } else

{ return(\不能构成一个圆,无法计算面积\ } } %>

<% out.println(\页面传递过来的半径:\ double r=Double.parseDouble(radius); out.println(getArea(r)); %>

7.编写一个Tag文件GetArea.tag负责求出三角形面积,并使用variable指令返回三角形的面积给调用该Tag文件的JSP页面。JSP页面负责显示Tag文件返回的三角形的面积。JSP在调用Tag文件时,使用attribute指令将三角形三边的长度传递给Tag文件。one.jsp和two.jsp都使用Tag标记调用GetArea.tag。one.jsp将返回三角形的面积保留最多3位小数、two.jsp将返回的三角形面积保留最多6位小数。 答:

one.jsp:

<%@ page contentType=\<%@ page import =\

<%@ taglib tagdir=\

面积保留3位小数点: <%

NumberFormat f=NumberFormat.getInstance(); f.setMaximumFractionDigits(3); double result=area.doubleValue(); String str=f.format(result); out.println(str); %>

5

two.jsp:

<%@ page contentType=\<%@ page import =\

<%@ taglib tagdir=\

面积保留6位小数点: <%

NumberFormat f=NumberFormat.getInstance(); f.setMaximumFractionDigits(6); double result=area.doubleValue(); String str=f.format(result); out.println(str); %> GetArea.tag:

<%@ attribute name=\<%@ attribute name=\<%@ attribute name=\

<%@ variable name-given=\ <%

double a=Double.parseDouble(sideA); double b=Double.parseDouble(sideB); double c=Double.parseDouble(sideC); if(a+b>c&&a+c>b&&c+b>a) { double p=(a+b+c)/2.0;

double result=Math.sqrt(p*(p-a)*(p-b)*(p-c)) ; jspContext.setAttribute(\ } else

{ jspContext.setAttribute(\ } %>

8.答:

linxi8.jsp:

6

<%@ page contentType=\<%@ taglib tagdir=\

Biaoge.tag:

<%@ attribute name=\<%@ attribute name=\<%@ attribute name=\<%@ attribute name=\ <%=name%> <%=phone%> <%=email%>

习题四

1.答:(C)。

2.答:将获取的字符串用ISO-8859-1进行编码,并将编码存放到一个字节数组中,然后再将这个数组转化为字符串对象。 3.答:

inputString.jsp:

<%@ page contentType=\

computer.jsp:

<%@ page contentType=\

<% String textContent=request.getParameter(\ byte b[]=textContent.getBytes(\ textContent=new String(b); %>

字符串:<%=textContent%>的长度:<%=textContent.length()%>

4.答:实现用户的重定向。

5.答:(1) 不相同。(2)相同。(3)可能消失。(4)一定消失。6.答:

lianxi6.jsp:

<%@ page contentType=\ <%

session.setAttribute(\请您猜字母\ char a[]=new char[26]; int m=0;

for(char c='a';c<='z';c++) { a[m]=c; m++; }

int randomIndex=(int)(Math.random()*a.length); char ch=a[randomIndex]; //获取一个英文字母

session.setAttribute(\ session.setAttribute(\%>

访问或刷新该页面可以随机得到一个英文字母.


单击超链接去猜出这个字母: guess.jsp:

8

<%@ page contentType=\<%@ taglib tagdir=\

<% String str=request.getParameter(\ if(str==null) { str=\ }

if(str.length()==0) { str=\ } %>

<% if(message.startsWith(\您猜对了\ {

%>
<% } else {

%>
输入您的猜测:

<% } %> GuessLetter.jsp:

<%@ tag pageEncoding=\

<%@ attribute name=\<%@ variable name-given=\ <% String mess=\

Character ch=(Character)session.getAttribute(\ char realLetter=ch.charValue(); char c=(guessLetter.trim()).charAt(0); if(c<='z'&&c>='a') { 9

if(realLetter==c) {

int n=((Integer)session.getAttribute(\ n=n+1;

session.setAttribute(\ mess=\您猜对了,这是第\次猜测\ }

else if(realLetter

int n=((Integer)session.getAttribute(\ n=n+1;

session.setAttribute(\ mess=\您猜大了,这是第\次猜测\ }

else if(realLetter>c) {

int n=((Integer)session.getAttribute(\ n=n+1;

session.setAttribute(\ mess=\您猜小了,这是第\次猜测\ } } else

{ mess=\请输入a至z之间的英文字母。\ }

jspContext.setAttribute(\%>

习题五

1.答:不能

2.答:调用public long length()方法。

3.答:A和D。

4. 答:RandomAccessFile类既不是输入流类InputStream类的子类,也不是输出流类Outputstream类的子类。想对一个文件进行读写操作时,可以创建一个指向该文件的RandomAccessFile流,这样我们既可以从这个流中读取这个文件的数据,也可以通过这个流给这个文件写入数据。 5. 答:

10

input.jsp:

<%@ page contentType=\

read.jsp:

<%@ page contentType=\<%@ taglib tagdir=\

<%

String s1=request.getParameter(\ String s2=request.getParameter(\ if(s1.length()>0&&s2.length()>0) {

%> 读取的文件内容:


<% } %> Read.tag:

<%@ tag pageEncoding=\<%@ tag import=\

<%@ attribute name=\<%@ attribute name=\<%@ variable name-given=\<%

StringBuffer str=new StringBuffer(); try{

File f=new File(dirName,fileName); 11

FileReader in=new FileReader(f);

BufferedReader bufferin=new BufferedReader(in); String temp;

while((temp=bufferin.readLine())!=null) { str.append(temp); }

bufferin.close(); in.close(); }

catch(IOException e) {

str.append(\ }

jspContext.setAttribute(\%>

习题六

1.答:

a.jsp:

<%@ page contentType=\<%@ taglib tagdir=\

表查询到记录:
<%=queryResult %>
GetRecord.tag:

<%@ tag pageEncoding=\<%@ tag import=\

<%@ attribute name=\<%@ attribute name=\<%@ variable name-given=\<%@ variable name-given=\

12

<%

StringBuffer result; result=new StringBuffer(); try {

Class.forName(\ }

catch(Exception e) {

out.print(e); }

Connection con; Statement sql; ResultSet rs;

try{ result.append(\

String uri= \ String user=\ String password=\

con=DriverManager.getConnection(uri,user,password); DatabaseMetaData metadata=con.getMetaData();

ResultSet rs1=metadata.getColumns(null,null,tableName,null); int 字段个数=0; result.append(\ while(rs1.next()) { 字段个数++;

String clumnName=rs1.getString(4); result.append(\ }

result.append(\ sql=con.createStatement();

rs=sql.executeQuery(\ while(rs.next())

{ result.append(\ for(int k=1;k<=字段个数;k++)

{ result.append(\ }

result.append(\ }

result.append(\ con.close(); 13

}

catch(SQLException e)

{ result.append(\请输入正确的用户名和密码\ }

jspContext.setAttribute(\ jspContext.setAttribute(\%>

2.答:

b.jsp:

<%@ page contentType=\<%@ taglib tagdir=\

添加的记录是:
<%=newRecord %>
AddRecord.tag:

<%@ tag pageEncoding=\<%@ tag import=\

<%@ attribute name=\<%@ attribute name=\<%@ attribute name=\<%@ attribute name=\<%@ attribute name=\<%@ variable name-given=\<%@ variable name-given=\<%

float p=Float.parseFloat(price); String condition=

\

\ try{

Class.forName(\

14

}

catch(Exception e) {} Connection con; Statement sql; ResultSet rs; try{

String uri= \ con=DriverManager.getConnection(uri,\ sql=con.createStatement(); sql.executeUpdate(condition); con.close();

String str=(\ jspContext.setAttribute(\ }

catch(Exception e) {

jspContext.setAttribute(\ }

jspContext.setAttribute(\%>

3.答:

c.jsp:

<%@ page contentType=\<%@ taglib tagdir=\

更新后的记录是:
<%=reNewRecord %>
RenewRecord.tag:

<%@ tag pageEncoding=\<%@ tag import=\

<%@ attribute name=\<%@ attribute name=\

15

<%@ attribute name=\<%@ attribute name=\<%@ attribute name=\<%@ variable name-given=\<%@ variable name-given=\<%

float p=Float.parseFloat(price);

String condition1=\ \

condition2=\ \

condition3=\ \

try{

Class.forName(\ }

catch(Exception e) {} Connection con; Statement sql; ResultSet rs; try{

String uri= \ con=DriverManager.getConnection(uri,\ sql=con.createStatement(); sql.executeUpdate(condition1); sql.executeUpdate(condition2); sql.executeUpdate(condition3); con.close();

String str=(\ jspContext.setAttribute(\ }

catch(Exception e) {

jspContext.setAttribute(\ }

jspContext.setAttribute(\%>

4.答:

16

d.jsp:

<%@ page contentType=\<%@ taglib tagdir=\

删除的记录的键字段的值是:
<%=deletedRecord %>
DelRecord.tag:

<%@ tag pageEncoding=\<%@ tag import=\

<%@ attribute name=\<%@ attribute name=\<%@ variable name-given=\

<%@ variable name-given=\<%

String condition=\ try{

Class.forName(\ }

catch(Exception e) {} Connection con; Statement sql; ResultSet rs; try{

String uri= \ con=DriverManager.getConnection(uri,\ sql=con.createStatement(); sql.executeUpdate(condition); con.close();

jspContext.setAttribute(\ }

catch(Exception e) {

jspContext.setAttribute(\17

}

jspContext.setAttribute(\%>

习题七

1.答:把创建bean的字节码保存到 mymoon\\WEB-INF\\classes\\blue\\sky中。 2.答:不允许。 3. 答: C。 4. A 5.

a.jsp:

<%@ page contentType=\

输入矩形的边A:输入矩形的边B: b.jsp:

<%@ page contentType=\<%@ page import=\


边A是:边B是:面积是:

Rect.java:

package tom.jiafei;

18

public class Rect {

double sideA,sideB,area; public void setSideA(double a) {

sideA=a; }

public double getSideA() {

return sideA; }

public void setSideB(double b) { sideB=b; }

public double getSideB() {

return sideB; }

public double getArea() {

if(sideA>=0&&sideA>=0) area=sideA*sideB; else area=-1; return area; } }

习题八

1.答:在服务器端。 2.答:首先调用init方法。 3.答:正确。

4.答:要在web.xml中添加如下内容:

myservlet

star.flower.Dalian

19

myservlet

/lookyourServlet

5. 答:doGet和doPost方法。

6. 答:HttpServletResponse类的sendRedirect方法可以把用户重新定向到其他页面或servlet,但是不能将用户对当前JSP页面或servlet的请求和响应(HttpServletRequest对象和HttpServletResponse对象)传递给所重新定向JSP页面或servlet。RequestDispatcher对象使用forward方法可以把用户对当前JSP页面或servle的请求转发给另一个JSP页面或servlet,而且将用户对当前JSP页面或servlet的请求和响应(HttpServletRequest对象和HttpServletResponse对象)传递给所转发的JSP页面或servlet。也就是说,当前页面所要转发的目标页面或servlet对象可以使用request获取用户提交的数据。

7.答:HttpServletRequest对象request调用getSession方法获取用户的session对象

习题九

1.答:Javabean。 2. 答:Servlet。

3.答:JSP页面。

4.答:MVC结构可以使Web程序更具有对象化特性,也更容易维护。 5.答:由servlet负责创建。 6.答:

(1) 模型

Equation.java:

package moon.yourbean; public class Equation {

double a,b,c;

String rootOne,rootTwo; boolean squareEquation; public void setA(double a) { this.a=a; }

public double getA() { return a; }

public void setB(double b) { this.b=b;

20

}

public double getB() { return b; }

public void setC(double c) { this.c=c; }

public double getC() { return c; }

public void setRootOne(String root) { rootOne=root; }

public String getRootOne() { return rootOne; }

public void setRootTwo(String root) { rootTwo=root; }

public String getRootTwo() { return rootTwo; }

public void setIsSquareEquation(boolean b) { squareEquation=b; }

public boolean getIsSquareEquation() { return squareEquation; } }

2) 视图

input.jsp:

<%@ page contentType=\

show.jsp:

<%@ page contentType=\<%@ page import=\

一元二次方程的系数是:


二次项系数:


是一元二次方程吗?方程的两个根是:

(3) 控制器

HandleData.java:

package sun.yourservlet; import moon.yourbean.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*;

public class HandleData extends HttpServlet

{ public void init(ServletConfig config) throws ServletException {super.init(config); }

public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { Equation equ=new Equation(); //创建Javabean对象

request.setAttribute(\将equ存储到HttpServletRequest对象中 double a=Double.parseDouble(request.getParameter(\ double b=Double.parseDouble(request.getParameter(\ double c=Double.parseDouble(request.getParameter(\ equ.setA(a); //将数据存储在equ中 equ.setB(b); equ.setC(c);

22

if(a!=0)

equ.setIsSquareEquation(true); else

equ.setIsSquareEquation(true); double disk=b*b-4*a*c; if(disk<0)

{ equ.setRootOne(\无实根\ equ.setRootTwo(\无实根\ } else

{ double root1=(-b+Math.sqrt(disk))/(2*a), root2=(-b-Math.sqrt(disk))/(2*a); equ.setRootOne(\ equ.setRootTwo(\ }

RequestDispatcher dispatcher=request.getRequestDispatcher(\

dispatcher.forward(request,response); //请求show.jsp显示equ中的数据 }

public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doPost(request,response); } }

23

本文来源:https://www.bwwdw.com/article/lye3.html

Top