《网络编程》实验报告
实验序号: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
<html><body>
<%@ page language="java" %>
<%! int count = 0; %>
<% count++; %>
Welcome! You are visitor number
<%= count %>
</body></html>
【步骤1】该JSP页面包含哪些JSP语法元素。在浏览器中访问该页面,输出结果如何?多次刷新页面,结果如何?
【步骤2】打开counter.jsp转换后的源文件counter_jsp.java,对应的类文件在哪里?文件名是什么?
【步骤3】查看count变量是在哪里声明的?
【步骤4】将上面JSP页面中的<%! int count = 0; %>一行改为<% int count = 0; %>,页面能否正常执行,它与上面页面有什么区别?
2. 有下面expression.jsp页面:
<html><body>
<%@ 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 %>
<%= aBool %>
<%= false %>
jsp页面输出的三种方式<%= !false %>
<%= getChar() %>
<%= Math.random() %>
<%= aVector %>
<%= aFloatObj %>
<%= aFloatObj.floatValue() %>
<%= String() %>
<%= aBool; %>
<%= int i = 20 %>
<%= sBuff.setLength(12); %>
</body></html>
你能出其中的错误吗?你可试着执行该页面,看会出现什么结果?将其中错误修改过来,最后输出下面结果:
图6.1 expression.jsp的运行结果
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = ContextPath();
String basePath = Scheme()+"://"+ServerName()+":"+ServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'expression.jsp' starting page</title>
   
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">   
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
 
  <body>
  <%@ 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%><br>
  <%= aBool %>
<%= false %><br>
  <%= !false %>
<%= getChar() %><br>
  <%= Math.random() %>
  <%= aFloatObj %><br> 
  <%= aFloatObj.floatValue() %>
  <%= String() %>
  <%= aBool %> <%= 20 %>
  </body>
</html>
3. 运行下面persistent_counter.jsp页面,体会如何实现持久的计数器的?
<%@ page language="java" import="java.io.*" %>
<%!
int count = 0;
String dbPath;
public void jspInit(){
try{
dbPath = getServletContext().getRealPath("/WEB-INF/counter.db");
FileInputStream fis = new FileInputStream(dbPath);
DataInputStream dis = new DataInputStream(fis);
count = adInt();
dis.close();
}catch(Exception e){
log("Error loading persistent counter", e);
}
}
%>
<%--下面是向浏览器输出的主要内容,
它将成为产生的_jspService()方法的一部分
--%>
<html><body>
<% count++; %>
Welcome! You are <%= count %> th  visitor(s).
</body></html>
<%!
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", e);
}
}
%>
4.输入并运行下面的import_test.jsp页面:
<%@ page import="java.util.DateFormat;" %>
<html>
<head><title>page指令示例</title></head>
<body>
<h3 align="center">使用page指令导入java.util.Date类</h3>
<% Date date = new Date();
  String s = DateInstance().format(date);
  String s2 = DateInstance(DateFormat.FULL).format(date);
%>
<p align="center">现在的时间是:<%=s%>
<p align="center">现在的时间是:<%=s2%>
</body>
</html>
访问上述JSP页面,输出结果如下图所示:
图6.2 import_test.jsp页面的运行结果
可以看到页面中最后一行的中文显示为乱码,将下面代码加到JSP页面中:
<%@ 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" %>
<html>
<body>
<%
String name = Parameter("name");
if (name == null){
throw new RuntimeException("没有指定name 属性。");
}
%>
Hello, <%= name %>
</body>
</html>
  【步骤2】下面的errorHandler.jsp是错误处理页面。
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page isErrorPage="true" %>
<html>
<body>
请求不能被处理:<%=Message()%><br>
请重试!
</body>
</html>
用下面的URL访问hello.jsp页面,就会产生下面结果:
localhost:8080/bookstore/hello.jsp
图6.3 errorHandler.jsp页面的运行结果
这说明没有提供name参数,hello.jsp页面中抛出RuntimeException异常,所以调用错误页面。
如果使用下面URL访问 hello.jsp页面,将产生下面正常的页面:
localhost:8080/bookstore/hello.jsp?name=Mary
图6.4 hello.jsp页面的运行结果
注意:如果请求参数值使用汉字,仍然产生乱码,例如:
localhost:8080/bookstore/hello.jsp?name=欧阳清风
这是因为请求参数默认使用iso-8859-1编码传递,如果要正确显示中文,应将请求参数编码转换为gb2312编码。
按下面方法修改hello.jsp页面,将请求参数值编码转换为汉字编码。
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page errorPage="errorHandler.jsp" %>
<html><body>
<%
String name = Parameter("name");
if (name==null){
    throw new RuntimeException("没有指定name 属性。");
} else{
  // 将字符串name的字符编码转换为汉字编码
    name = new Bytes("iso-8859-1"),"gb2312");
}
%>
Hello, <%=name %>
</body></html>
四、实验结果
1.
(1)第一次访问:
刷新一次后:
刷新8次后:
(2)omcat会自动转,路径为Tomcat 6.0\work\Catalina\localhost\Tesr\org\apache\jsp
这个路径下放的是tomcat把jsp转换后的java文件。文件名为counter_jsp.class
(3)Java代码声明
(4)刷新不变,count的值一直等于1,显示一直如下图
2.
修改后的代码:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = ContextPath();
String basePath = Scheme()+"://"+ServerName()+":"+ServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'expression.jsp' starting page</title>
   
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">   
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
 
  <body>
  <%@ 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%><br>
  <%= aBool %> <%= false %><br>
  <%= !false %> <%= getChar() %><br>
  <%= Math.random() %>
  <%= aFloatObj %><br> 
  <%= aFloatObj.floatValue() %>
  <%= String() %>   //把tostring转换字符串类型
  <%= aBool %> <%= 20 %>
  </body>
</html>
显示为:
3.
4.
未修改前:
修改后:
5.
(1)
(2)
访问172.24.115.74:8080/S/hello.jsp?name=Janny 则显示如下:
访问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表达式求值。
六、教师评语
签名:
日期:
成绩

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。