2024年1月19日发(作者:)
7实验七 JSP基本语法与页面指令
一.实验目的
1. 熟练掌握JSP的声明、表达式、小脚本和注释的使用;
2. 理解JSP页面(page)指令和动作的语法格式;
3. 理解JSP页面的生命周期。
4. 熟练掌握page指令的下面的属性:import、session、errorPage、isErrorPage、contentType、pageEncoding。
5. 理解page指令的下面的属性:language、extends、buffer、autoFlush、info。
二.实验内容
1. 输入并执行下面JSP页面,文件名为
<%@ page language="java" %>
<%! int count = 0; %>
<% count++; %>
Welcome! You are visitor number
<%= count %>
【步骤1】该JSP页面包含哪些JSP语法元素。在浏览器中访问该页面,输出结果如何?多次刷新页面,结果如何?
【步骤2】打开转换后的源文件counter_,对应的类文件在哪里?文件名是什么?
C:Program Filestomcatapache-tomcat-6.0.24workCatalinalocalhostlab7orgapachejsp
【步骤3】查看count变量是在哪里声明的?
【步骤4】将上面JSP页面中的<%! int count = 0; %>一行改为<% int count = 0; %>,页面能否正常执行,它与上面页面有什么区别?
输出是与步骤1的输出一样,但是刷新页面count无法递增。
2. 有下面页面:
<%@ page language="java" %>
<%!
intanInt = 3;
booleanaBool = true;
Integer anIntObj = new Integer(3);
Float aFloatObj = new Float(8.6);
String str = "some string";
StringBuffersBuff = new StringBuffer();
chargetChar(){ return 'A'; }
%>
<%= 500 %>
<%= anInt*3.5/100-500 %>
<%= aBool %>
<%= false %>
<%= !false %>
<%= getChar() %>
<%= () %>
<%= aVector %>
<%= aFloatObj %>
<%= alue() %>
<%= ng() %>
<%= aBool; %>
<%= int i = 20 %>
<%= gth(12); %>
你能找出其中的错误吗?你可试着执行该页面,看会出现什么结果?将其中错误修改过来,最后输出下面结果:
图6.1 的运行结果
主修改如下:
<%= 500 %>
<%= anInt*3.5/100-500 %>
<%= aBool %>
<%= false %>
<%= !false %>
<%= getChar() %>
<%= () %>
<%= aFloatObj %>
<%= alue() %>
<%= ng() %>
<%= aBool%>
<%= 20 %>
3. 运行下面persistent_页面,体会如何实现持久的计数器的?
<%@ page language="java" import=".*" %>
<%!
int count = 0;
String dbPath;
public void jspInit(){
try{
dbPath = getServletContext().getRealPath("/WEB-INF/");
FileInputStreamfis = new FileInputStream(dbPath);
DataInputStream dis = new DataInputStream(fis);
count = t();
();
}catch(Exception e){
log("Error loading persistent counter", e);
}
}
%>
<%--下面是向浏览器输出的主要内容,
它将成为产生的_jspService()方法的一部分
--%>
<% count++; %>
Welcome! You are <%= count %>thvisitor(s).
<%!
public void jspDestroy(){
try{
FileOutputStreamfos = new FileOutputStream(dbPath);
DataOutputStream dos = new DataOutputStream(fos);
nt(count);
();
}catch(Exception e){
log("Error storing persistent counter", e);
}
}
%>
4.输入并运行下面的import_页面:
<%@ page import=",rmat;" %>
使用page指令导入类
<% Date date = new Date();
String s = eInstance().format(date);
String s2 = eInstance().format(date);
%>
现在的时间是:<%=s%>
现在的时间是:<%=s2%>
访问上述JSP页面,输出结果如下图所示:
图6.2 import_页面的运行结果
可以看到页面中最后一行的中文显示为乱码,将下面代码加到JSP页面中:
<%@ page contentType="text/html;charset=gb2312" %>
重新访问页面,中文显示正常。这说明可以使用page指令的contentType属性指定页面输出使用的字符编码。默认情况下,JSP页面使用的字符集是iso-8859-1编码,如使用汉字编码应指定为gb2312或gbk。
age属性和isErrorPage属性的使用。
【步骤1】下面的页面执行时将抛出一个异常,它指定了错误处理页面为。
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page errorPage="" %>
<%
String name = ameter("name");
if (name==null){
throw new RuntimeException("没有指定name 属性。");
}
%>
Hello, <%=name%>
【步骤2】下面的是错误处理页面。
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page isErrorPage="true" %>
请求不能被处理:<%=sage()%>
请重试!
用下面的URL访问页面,就会产生下面结果:
localhost:8080/bookstore/
图6.3 页面的运行结果
这说明没有提供name参数,页面中抛出RuntimeException异常,所以调用错误页面。
如果使用下面URL访问 页面,将产生下面正常的页面:
localhost:8080/bookstore/?name=Mary
图6.4 页面的运行结果
注意:如果请求参数值使用汉字,仍然产生乱码,例如:
localhost:8080/bookstore/?name=欧阳清风
这是因为请求参数默认使用iso-8859-1编码传递,如果要正确显示中文,应将请求参数编码转换为gb2312编码。
按下面方法修改页面,将请求参数值编码转换为汉字编码。
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page errorPage="" %>
<%
String name = ameter("name");
if (name==null){
throw new RuntimeException("没有指定name 属性。");
}else{
// 将字符串name的字符编码转换为汉字编码
name = new String(es("iso-8859-1"),"gb2312");
}
%>
Hello, <%=name %>
三.思考题
1. JSP语法元素有哪些?使用时应注意什么问题?
2. JSP页面的生命周期有哪几个阶段?
3. 如何理解JSP页面本质上是Servlet?
4. page指令有哪些常用的属性,各自的功能是什么?


发布评论