实验7.docx
- 文档编号:10700612
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:16
- 大小:2.27MB
实验7.docx
《实验7.docx》由会员分享,可在线阅读,更多相关《实验7.docx(16页珍藏版)》请在冰豆网上搜索。
实验7
《网络编程》实验报告
实验序号:
7 实验项目名称:
JSP基本语法与页面指令
学 号
1307122125
姓 名
吕丽云
专业、班
13软金
实验地点
实1-514
指导教师
唐朝辉
实验时间
2015.11.12
一、实验目的及要求
1.熟练掌握JSP的声明、表达式、小脚本和注释的使用;
2.理解JSP页面(page)指令和动作的语法格式;
3.理解JSP页面的生命周期。
4.熟练掌握page指令的下面的属性:
import、session、errorPage、isErrorPage、contentType、pageEncoding。
5.理解page指令的下面的属性:
language、extends、buffer、autoFlush、info。
二、实验设备(环境)及要求
台式机+JAVA平台
三、实验内容与步骤
1.输入并执行下面JSP页面,文件名为counter.jsp
<%@pagelanguage="java"%>
<%!
intcount=0;%>
<%count++;%>
Welcome!
Youarevisitornumber
<%=count%>
【步骤1】该JSP页面包含哪些JSP语法元素。
在浏览器中访问该页面,输出结果如何?
多次刷新页面,结果如何?
【步骤2】打开counter.jsp转换后的源文件counter_jsp.java,对应的类文件在哪里?
文件名是什么?
【步骤3】查看count变量是在哪里声明的?
【步骤4】将上面JSP页面中的<%!
intcount=0;%>一行改为<%intcount=0;%>,页面能否正常执行,它与上面页面有什么区别?
2.有下面expression.jsp页面:
<%@pagelanguage="java"%>
<%!
intanInt=3;
booleanaBool=true;
IntegeranIntObj=newInteger(3);
FloataFloatObj=newFloat(8.6);
Stringstr="somestring";
StringBuffersBuff=newStringBuffer();
chargetChar(){return'A';}
%>
<%=500%>
<%=anInt*3.5/100-500%>
<%=aBool%>
<%=false%>
<%=!
false%>
<%=getChar()%>
<%=Math.random()%>
<%=aVector%>
<%=aFloatObj%>
<%=aFloatObj.floatValue()%>
<%=aFloatObj.toString()%>
<%=aBool;%>
<%=inti=20%>
<%=sBuff.setLength(12);%>
你能找出其中的错误吗?
你可试着执行该页面,看会出现什么结果?
将其中错误修改过来,最后输出下面结果:
图6.1expression.jsp的运行结果
<%@pagelanguage="java"import="java.util.*"pageEncoding="GB18030"%>
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+":
//"+request.getServerName()+":
"+request.getServerPort()+path+"/";
%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
--
-->
<%@pagelanguage="java"%>
<%!
intanInt=3;
booleanaBool=true;
IntegeranIntObj=newInteger(3);
FloataFloatObj=newFloat(8.6);
Stringstr="somestring";
StringBuffersBuff=newStringBuffer();
chargetChar(){return'A';}
%>
<%=500%>
<%=anInt*3.5/100-500%>
<%=aBool%>
<%=false%>
<%=!
false%>
<%=getChar()%>
<%=Math.random()%>
<%=aFloatObj%>
<%=aFloatObj.floatValue()%>
<%=aFloatObj.toString()%>
<%=aBool%><%=20%>
3.运行下面persistent_counter.jsp页面,体会如何实现持久的计数器的?
<%@pagelanguage="java"import="java.io.*"%>
<%!
intcount=0;
StringdbPath;
publicvoidjspInit(){
try{
dbPath=getServletContext().getRealPath("/WEB-INF/counter.db");
FileInputStreamfis=newFileInputStream(dbPath);
DataInputStreamdis=newDataInputStream(fis);
count=dis.readInt();
dis.close();
}catch(Exceptione){
log("Errorloadingpersistentcounter",e);
}
}
%>
<%--下面是向浏览器输出的主要内容,
它将成为产生的_jspService()方法的一部分
--%>
<%count++;%>
Welcome!
Youare<%=count%>thvisitor(s).
<%!
publicvoidjspDestroy(){
try{
FileOutputStreamfos=newFileOutputStream(dbPath);
DataOutputStreamdos=newDataOutputStream(fos);
dos.writeInt(count);
dos.close();
}catch(Exceptione){
log("Errorstoringpersistentcounter",e);
}
}
%>
4.输入并运行下面的import_test.jsp页面:
<%@pageimport="java.util.Date,java.text.DateFormat;"%>
<%Datedate=newDate();
Strings=DateFormat.getDateInstance().format(date);
Strings2=DateFormat.getDateInstance(DateFormat.FULL).format(date);
%>
<%=s%>
<%=s2%>
访问上述JSP页面,输出结果如下图所示:
图6.2import_test.jsp页面的运行结果
可以看到页面中最后一行的中文显示为乱码,将下面代码加到JSP页面中:
<%@pagecontentType="text/html;charset=gb2312"%>
重新访问页面,中文显示正常。
这说明可以使用page指令的contentType属性指定页面输出使用的字符编码。
默认情况下,JSP页面使用的字符集是iso-8859-1编码,如使用汉字编码应指定为gb2312或gbk。
5.errorPage属性和isErrorPage属性的使用。
【步骤1】下面的hello.jsp页面执行时将抛出一个异常,它指定了错误处理页面为errorHandler.jsp。
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageerrorPage="errorHandler.jsp"%>
<%
Stringname=request.getParameter("name");
if(name==null){
thrownewRuntimeException("没有指定name属性。
");
}
%>
Hello,<%=name%>
【步骤2】下面的errorHandler.jsp是错误处理页面。
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageisErrorPage="true"%>
请求不能被处理:
<%=exception.getMessage()%>
请重试!
用下面的URL访问hello.jsp页面,就会产生下面结果:
http:
//localhost:
8080/bookstore/hello.jsp
图6.3errorHandler.jsp页面的运行结果
这说明没有提供name参数,hello.jsp页面中抛出RuntimeException异常,所以调用错误页面。
如果使用下面URL访问 hello.jsp页面,将产生下面正常的页面:
http:
//localhost:
8080/bookstore/hello.jsp?
name=Mary
图6.4hello.jsp页面的运行结果
注意:
如果请求参数值使用汉字,仍然产生乱码,例如:
http:
//localhost:
8080/bookstore/hello.jsp?
name=欧阳清风
这是因为请求参数默认使用iso-8859-1编码传递,如果要正确显示中文,应将请求参数编码转换为gb2312编码。
按下面方法修改hello.jsp页面,将请求参数值编码转换为汉字编码。
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageerrorPage="errorHandler.jsp"%>
<%
Stringname=request.getParameter("name");
if(name==null){
thrownewRuntimeException("没有指定name属性。
");
}else{
//将字符串name的字符编码转换为汉字编码
name=newString(name.getBytes("iso-8859-1"),"gb2312");
}
%>
Hello,<%=name%>
四、实验结果
1.
(1)第一次访问:
刷新一次后:
刷新8次后:
(2)omcat会自动转,路径为Tomcat6.0\work\Catalina\localhost\Tesr\org\apache\jsp
这个路径下放的是tomcat把jsp转换后的java文件。
文件名为counter_jsp.class
(3)Java代码声明
(4)刷新不变,count的值一直等于1,显示一直如下图
2.
修改后的代码:
<%@pagelanguage="java"import="java.util.*"pageEncoding="GB18030"%>
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+":
//"+request.getServerName()+":
"+request.getServerPort()+path+"/";
%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
--
-->
<%@pagelanguage="java"%>
<%!
intanInt=3;
booleanaBool=true;
IntegeranIntObj=newInteger(3);
FloataFloatObj=newFloat(8.6);
Stringstr="somestring";
StringBuffersBuff=newStringBuffer();
chargetChar(){return'A';}
%>
<%=500%>
<%=anInt*3.5/100-500%>
<%=aBool%><%=false%>
<%=!
false%><%=getChar()%>
<%=Math.random()%>
<%=aFloatObj%>
<%=aFloatObj.floatValue()%>
<%=aFloatObj.toString()%>//把tostring转换字符串类型
<%=aBool%><%=20%>
显示为:
3.
4.
未修改前:
修改后:
5.
(1)
(2)
访问http:
//172.24.115.74:
8080/S/hello.jsp?
name=Janny则显示如下:
访问http:
//172.24.115.74:
8080/S/hello.jsp?
name=吕丽云则显示如下:
修改hello.jsp后:
五、分析与讨论
平时成绩评分的重要参考。
思考题
1.JSP语法元素有哪些?
使用时应注意什么问题?
jsp独有的有一些动作指令,包含指令什么的,在<%%>中的语法遵循java语法,你也可以在jsp页面使用el表达式来进行显示
2.JSP页面的生命周期有哪几个阶段?
转换阶段,编译阶段,装载与实例化
3.如何理解JSP页面本质上是Servlet?
SP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。
JSP编译后是"类servlet"。
4.page指令有哪些常用的属性,各自的功能是什么?
Import:
导入jsp中的java类和接口列表!
contentType指定输出的内容类型和字符集;PageEncoding指定jsp文件的字符编码;session用布尔值指定jsp页面是否参加http会话;Errorpage用相对url指定另一个jsp页面用来处理当前错误页面;iserrorpage用布尔值确认是否处理错误页面;language指定容器支持的脚本语言;extends任何合法的实现了java.Server.jsp.jsppage接口的java类;buffer指定输出缓冲区的大小;autoflush指定是否当前缓冲区满时进行刷新;info关于jsp页面的任何文本信息;isthreadsafe指定页面是否同时为多个请求服务;iseligonered指定是否在此转换单元中对EL表达式求值。
六、教师评语
签名:
日期:
成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验