《网络编程》实验报告
实验序号:7 实验项目名称:JSP基本语法与页面指令
13软金 学 号 实验地点 1307122125 姓 名 指导教师 吕丽云 专业、班 2015.11.12 实1-514 唐朝辉 实验时间 一、实验目的及要求 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
<%@ page language=\"java\" %> <%! int count = 0; %> <% count++; %> Welcome! You are visitor number <%= count %> 【步骤1】该JSP页面包含哪些JSP语法元素。在浏览器中访问该页面,输出结果如何?多次刷新页面,结果如何? 【步骤2】打开counter.jsp转换后的源文件counter_jsp.java,对应的类文件在哪里?文件名是什么? 【步骤3】查看count变量是在哪里声明的? 【步骤4】将上面JSP页面中的<%! int count = 0; %>一行改为<% int count = 0; %>,页面能否正常执行,它与上面页面有什么区别? 2. 有下面expression.jsp页面: <%@ page language=\"java\" %> <%! int anInt = 3;1
boolean aBool = true; Integer anIntObj = new Integer(3); Float aFloatObj = new Float(8.6); String str = \"some string\"; StringBuffer sBuff = new StringBuffer(); char getChar(){ return 'A'; } %> <%= 500 %> <%= anInt*3.5/100-500 %> <%= aBool %> <%= false %> <%= !false %> <%= getChar() %> <%= Math.random() %> <%= aVector %> <%= aFloatObj %> <%= aFloatObj.floatValue() %> <%= aFloatObj.toString() %> <%= aBool; %> <%= int i = 20 %> <%= sBuff.setLength(12); %> 你能找出其中的错误吗?你可试着执行该页面,看会出现什么结果?将其中错误修改过来,最后输出下面结果: 图6.1 expression.jsp的运行结果 <%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"GB18030\"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+\"://\"+request.getServerName()+\":\"+request.getServerPort()+path+\"/\"; %>
2
<%@ page language=\"java\" %> <%! int anInt = 3; boolean aBool = true; Integer anIntObj = new Integer(3); Float aFloatObj = new Float(8.6); String str = \"some string\"; StringBuffer sBuff = new StringBuffer(); char getChar(){ return 'A'; } %> <%= 500 %> <%= anInt*3.5/100-500%>
3
log(\"Error loading persistent counter\} } %> <%--下面是向浏览器输出的主要内容, 它将成为产生的_jspService()方法的一部分 --%>
<% count++; %> Welcome! You are <%= count %> th visitor(s). <%! public void jspDestroy(){ try{ FileOutputStream fos = new FileOutputStream(dbPath); DataOutputStream dos = new DataOutputStream(fos); dos.writeInt(count); dos.close(); }catch(Exception e){ log(\"Error storing persistent counter\} } %> 4.输入并运行下面的import_test.jsp页面: <%@ page import=\"java.util.Date,java.text.DateFormat;\" %>现在的时间是:<%=s%>
现在的时间是:<%=s2%> 访问上述JSP页面,输出结果如下图所示: 图6.2 import_test.jsp页面的运行结果 可以看到页面中最后一行的中文显示为乱码,将下面代码加到JSP页面中: 4
<%@ page contentType=\"text/html;charset=gb2312\" %> 重新访问页面,中文显示正常。这说明可以使用page指令的contentType属性指定页面输出使用的字符编码。默认情况下,JSP页面使用的字符集是iso-8859-1编码,如使用汉字编码应指定为gb2312或gbk。 5. errorPage属性和isErrorPage属性的使用。 【步骤1】下面的hello.jsp页面执行时将抛出一个异常,它指定了错误处理页面为errorHandler.jsp。 <%@ page contentType=\"text/html;charset=gb2312\" %> <%@ page errorPage=\"errorHandler.jsp\" %>
<% String name = request.getParameter(\"name\"); if (name == null){ throw new RuntimeException(\"没有指定name 属性。\"); } %> Hello, <%= name %> 【步骤2】下面的errorHandler.jsp是错误处理页面。 <%@ page contentType=\"text/html; charset=gb2312\" %> <%@ page isErrorPage=\"true\" %> 请求不能被处理:<%=exception.getMessage()%>这说明没有提供name参数,hello.jsp页面中抛出RuntimeException异常,所以调用错误页面。 如果使用下面URL访问 hello.jsp页面,将产生下面正常的页面: http://localhost:8080/bookstore/hello.jsp?name=Mary 图6.4 hello.jsp页面的运行结果 注意:如果请求参数值使用汉字,仍然产生乱码,例如: http://localhost:8080/bookstore/hello.jsp?name=欧阳清风 这是因为请求参数默认使用iso-8859-1编码传递,如果要正确显示中文,应将请求参数编码转换为gb2312编码。 按下面方法修改hello.jsp页面,将请求参数值编码转换为汉字编码。 <%@ page contentType=\"text/html;charset=gb2312\" %> <%@ page errorPage=\"errorHandler.jsp\" %>
<% String name = request.getParameter(\"name\"); if (name==null){ throw new RuntimeException(\"没有指定name 属性。\"); } else{ // 将字符串name的字符编码转换为汉字编码 name = new String(name.getBytes(\"iso-8859-1\"),\"gb2312\"); } %> Hello, <%=name %> 四、实验结果 1. (1)第一次访问: 6刷新一次后: 刷新8次后: (2)omcat会自动转,路径为Tomcat 6.0\\work\\Catalina\\localhost\\Tesr\\org\\apache\\jsp 这个路径下放的是tomcat把jsp转换后的java文件。文件名为counter_jsp.class (3)Java代码声明 (4)刷新不变,count的值一直等于1,显示一直如下图 7
2. 修改后的代码: <%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"GB18030\"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+\"://\"+request.getServerName()+\":\"+request.getServerPort()+path+\"/\"; %>
8
String str = \"some string\"; StringBuffer sBuff = new StringBuffer(); char getChar(){ return 'A'; } %> <%= 500 %> <%= anInt*3.5/100-500%>
<%= aBool %> <%= false %>
<%= !false %> <%= getChar() %>
<%= Math.random() %> <%= aFloatObj %>
<%= aFloatObj.floatValue() %> <%= aFloatObj.toString() %> //把tostring转换字符串类型 <%= aBool %> <%= 20 %> 显示为: 3. 9
4. 未修改前: 修改后: 5. (1) 10
(2) 访问http://172.24.115.74:8080/S/hello.jsp?name=Janny 则显示如下: 访问http://172.24.115.74:8080/S/hello.jsp?name=吕丽云 则显示如下: 11
修改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表达式求值。 12
六、教师评语 签名: 日期: 成绩 13
因篇幅问题不能全部显示,请点此查看更多更全内容