文档库 最新最全的文档下载
当前位置:文档库 › 实验三 JSP基础语法

实验三 JSP基础语法

实验三  JSP基础语法
实验三  JSP基础语法

实验三JSP基本语法

一、实验目的

1. 熟练掌握JSP的声明、表达式、小脚本和注释的使用;

2. 理解JSP指令和动作的语法格式;

3. 理解JSP页面的生命周期。

4. 熟练掌握page指令的下面的属性:import、session、errorPage、isErrorPage、contentType、pageEncoding。

5. 理解page指令的下面的属性:language、extends、buffer、autoFlush、info。

二、实验原理

JSP有三个指令元素:page、include和taglib。这些指令元素是针对JSP引擎的,并不会产生任何看得见的输出。它们都包含在<%@和%>标签内。

<%@ page %>指令作用于整个JSP页面,包括静态包含的页面,但不包括动态包含的页面。可以在一个页面中包含多个<%@ page %>指令,但其属性除import外只能在整个页面中出现一次。

<%@ page %>指令可以放在页面的任何位置,但为了JSP程序的可读性,一般将<%@ page %>指令放在页面的前面。

三、实验内容与步骤

(一)输入并执行下面JSP页面,文件名为counter.jsp

<%@ page language="java" %>

<%! int count = 0; %>

<% count++; %>

Welcome! You are visitor number

<%= count %>

该JSP页面包含哪些JSP语法元素。多次刷新页面,结果如何?

(二)将上面JSP页面中的<%! int count = 0; %>一行改为<% int count = 0; %>,页面能否正常执行,它与上面页面有什么区别?

(三)打开Tomcat安装目录下的\work\Catalina\localhost\chap06\org\apache\jsp目录中的counter_jsp.java文件,查看count变量是在哪里声明的。

该文件就是JSP页面转换成的Java源文件,对应的.class文件是编译后的类文件,它实际上是Servlet。对JSP页面的访问就是对该Servlet的访问,由它提供服务。

(四)有下面expression.jsp页面:

<%@ 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 %>

<%= !false %>

<%= getChar() %>

<%= Math.random() %>

<%= aVector %>

<%= aFloatObj %>

<%= aFloatObj.floatValue() %>

<%= aFloatObj.toString() %>

<%= aBool; %>

<%= int i = 20 %>

<%= sBuff.setLength(12); %>

你能找出其中的错误吗?你可试着执行该页面,看会出现什么结果?将其中错误修改过来,最后输出下面结果:

图4.1 expression.jsp的运行结果

(五)运行下面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 = dis.readInt();

dis.close();

}

catch(Exception e){

log("Error loading persistent counter", e);

}

}

%>

<%--下面是向浏览器输出的主要内容,

它将成为产生的_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", e);

}

}

%>

(六)输入并运行下面的import_test.jsp页面:

<%@ page import="java.util.Date,java.text.DateFormat;" %>

page指令示例

使用page指令导入java.util.Date类

<% Date date = new Date();

String s = DateFormat.getDateInstance().format(date);

String s2 = DateFormat.getDateInstance(DateFormat.FULL).format(date);

%>

现在的时间是:<%=s%>

现在的时间是:<%=s2%>

访问上述JSP页面,输出结果如下图所示:

图4.2 import_test.jsp页面的运行结果

可以看到页面中的中文显示为乱码,将下面代码加到JSP页面中:

<%@ page contentType="text/html;charset=gb2312" %>

重新访问页面,中文显示正常。这说明可以使用page指令的contentType属性指定页面输出使用的字符编码。默认情况下,JSP页面使用的字符集是iso-8859-1编码,如使用汉字编码应指定为gb2312或gbk。

(七)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()%>

请重试!

用下面的URL访问hello.jsp页面,就会产生下面结果:

http://localhost:8080/chap06/hello.jsp

图4.3 errorHandler.jsp页面的运行结果

这说明没有提供name参数,hello.jsp页面中抛出RuntimeException异常,所以调用错误页面。

如果使用下面URL访问 hello.jsp页面,将产生下面正常的页面:

http://localhost:8080/chap06/hello.jsp?name=Mary

图4.4 hello.jsp页面的运行结果

注意:如果请求参数值使用汉字,仍然产生乱码,例如:

http://localhost:8080/chap06/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 %>

(八)JSP的include指令的程序

在建立的WEB工程中建立include.jsp 文件,top.txt文件和bottom.txt文件。源代码如下:

include.jsp

<%@ page contentType="text/html;charset=gb2312"%>

<%@ include file="top.txt"%>

<%out.println("此书出版了,快来看看吧!还有更多的好书等着您呢!");%>

<%@ include file="bottom.txt"%>

top.txt

《Tomcat与JA V A Web 开发技术详解》网站

《Tomcat与JA V A Web 开发技术详解》网站

bottom.txt


@电子工业出版社版权所有2004-2008

制作人:张三

联系方式:zhangsan_11@https://www.wendangku.net/doc/ca6873405.html,

2.部署并浏览该页面。

如果将top.txt和bottom.txt改为bottom.jsp和top.jsp,上述程序会出错吗?错了如何改正?

(九) JSP动态指令forward的程序

1.在建立的WEB工程中建立forward.jsp 文件。源代码如下:

<%@ page contentType="text/html;charset=gb2312"%>

程序示例链接:

<% // forward应用示例Java程序片

String s=null;

s=request.getParameter("goaddress");

if(s!=null)

{ switch(s.charAt(0))

{ case '1':

%>

<%

break;

case '2':

%>

<%

break;

default:

out.println("您没有选择。");

}

}

else

out.println("您没有选择。");

%>

2.部署并浏览该页面。

四、思考题

1. JSP语法元素有哪些?使用时应注意什么问题?

2. JSP页面的生命周期有哪几个阶段?

3. 如何理解JSP页面本质上是Servlet?

4. page指令有哪些常用的属性,各自的功能是什么?

相关文档