JSP实用教程(2)

  • JSP语法
  • JSP页面的基本结构
  • 声明变量和定义方法
  • Java程序片
  • Java表达式
  • Java中的注释
  • JSP指令标记
  • page指令
  • include指令标记
  • JSP动作标记
  • include动作标记
  • param动作标记
  • forward动作标记


JSP语法

JSP页面的基本结构

6种元素:

  1. 普通的HTML标记和JavaScript标记;(给用户浏览器执行显示)
  2. JSP标记,如指令标记、动作标记;
  3. 变量和方法的声明;
  4. Java程序片;(2-4由服务器负责处理和执行,将需要显示的结果发给用户端浏览器)
  5. Java表达式;(由服务器负责计算,结果转化为字符串,交给用户端浏览器显示)
  6. 注释。

声明变量和定义方法

"<%!"和“%>”之间声明的变量:成员变量
"<%"和“%>”之间声明的变量:局部变量

“<%!”和“%>”之间声明的变量在整个JSP页面内都有效,在将JSP页面转译为Java文件时,“<%!”和“%>”之间声明的变量作为类的成员变量,这些变量占有的内存空间直至Tomcat服务器关闭才释放。这些变量能够被多个线程共享,任何一个用户对其操作的结果都会影响其他用户。
“<%”和“%>”之间声明的变量称为:JSP页面的局部变量。每一次执行Scriptlet,都会导致对局部变量的重新分配与释放操作。
**在声明变量和方法时,需要注意以下几点:

  • 声明必须以";"结尾。
  • 可以直接使用在<% @ include %>中被包含进来的已经声明的变量和方法,不需要对它们重新进行声明。
  • 一个声明仅在一个页面中有效。如果想每个页面都用到一些声明,最好把它们写成一个单独的文件,然后用<%@ include %>或<jsp:include >元素包含进来。**

"<%!"和“%>”之间声明的方法:可以在程序片种调用,方法中声明的变量只在该方法内有效。
"<%!"和“%>”之间声明的:可以在程序片中使用该类创建对象。

<%@ page contentType = "text/html" %>  
<%@ page pageEncoding = "utf-8" %>  
<HTML><body bgcolor = #ffccff>
<p style="font-family:宋体;font-size:36;color:blue">
<%! double multi(double x,double y){ //定义方法
        return x*y;
    }
    double div(double x,double y) { //定义方法
        return x/y;
    }
    class Circle { //定义类
        double r;
        double getArea(){
           return 3.1415926*r*r;
        }
    }
%>
<%  double x=8.79;
    double y=20.8;
    out.print("调用multi方法计算"+x+"与"+y+"之积:<br>");
    out.print(multi(x,y));
    out.print("<br>调用div方法计算"+y+"除以"+x+"的商:<br>");
    String s =String.format("小数点保留3位:%10.3f",div(y,x));
    out.println(s); 
    Circle circle = new Circle(); //用Circle类创建对象。
    circle.r = 3.6;
    out.print("<br>半径是"+circle.r+"的圆面积"+circle.getArea()); 
%>
</p></body></HTML>

Java程序片

"<%"和“%>”之间插入程序片。
可以有许多个程序片,按顺序执行。
可以将一个程序片分割成多个程序片,然后再这些程序片间插入其他标记元素。

Java表达式

语法: <%= expression %>
"<%"和“=”不要有空格
计算结果为字符串类型
结果发送到客户端显示

<%@ page contentType="text/html;charset=GB2312" %>
<HTML><BODY  bgcolor=cyan><FONT size=3>
<%  double a=12.89;
    int x=12,y=10;
%>
计算表达式a+x*y-100/x+x%5的值: 
  <%= a+x*y-100/x+x%5 %>
<BR>计算表达式x>y&&a>0的值:
  <%=x>y&&a>0%>
<BR>计算表达式sin(x)+cos(y):
  <%=Math.sin(x)+Math.cos(y)%>
<BR> 求8的平方根:
  <%=Math.sqrt(8)%>
</FONT></BODY></HTML>

Java中的注释

三种:
(1)HTML注释:<!--注释内容--> HTML注释在发布网页时可以在浏览器源文件窗口中可以看到,并且在这种注释中可以使用JSP的表达式
(2)JSP注释:<%-- comment --%> 编译时忽略,也称隐藏注释
(3)Java注释:<%/*comment*/%>

JSP指令标记

page指令

对整个JSP页面有效,与书写位置无关。

Page 指令的语法格式为:
<%@ page
[ language="java" ]
[ extends="package.class" ]
[ import="{package.class | package.*}, ..." ]
[ session="true | false" ]
[ buffer="none | 8kb | size kb" ]
[ autoFlush="true | false" ]
[ isThreadSafe="true | false" ]
[ info="text" ]
[ errorPage="relativeURL" ]
[ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]
[ isErrorPage="true | false" ]
%>

(1)contentType:通知用户浏览器使用怎样的方法来处理接收到的信息。只能设置一个,默认值为”text/html“。”text/html“启动HTML解析器来解析; "application/msword"启动本地的MS-Word应用程序来解析。
可以附加属性charset设置浏览器用怎样的编码解析收到的字符。

Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的; 
Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据; 
Application:用于传输应用程序数据或者二进制数据; 
Message:用于包装一个E-mail消息; 
Image:用于传输静态图片数据; 
Audio:用于传输音频或者音声数据; 
Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。

(2)pageEncoding:告诉解析器用怎样的编码解析JSP页面中的字符,默认UTF-8。只能指定一个值

(3)language:定义JSP页面使用的脚本语言,目前只能是Java

(4)import:为JSP页面引入Java运行环境提供的包中的类。

<%@ page  import="java.io.*", "java.util.Date" %>

(5)session:用于设置是否需要使用内置的session对象。指定这个页面是否参与一个Http会话
session的属性值可以是true或false。session属性默认的属性值是true。
(6)buffer:用来指定out设置的缓冲区的大小或不使用缓冲区。

例如:格式
<%@ page buffer="sizekb" %>
<%@ page buffer= “24kb” %>
<%@ page buffer="none" %>
buffer属性可以取值“ none”,设置out不使用缓冲区。

(7)autoFlush:指定out的缓冲区被填满时,缓冲区是否自动刷新。

<% @ page autoFlush=”true”%>
<% @ page autoFlush=”false”%>

注意
如果值为“true”,则当缓冲区满时,自动输出给客户;
如果值为“false”,则当缓冲区满时,会有一个运行时异常。
autoFlush的默认值是true

(8)isThreadSafe:用来设置JSP文件是否能多线程使用。若为true,则JSP能同时处理多个用户的请求。若为false,则JSP只能一次处理一个请求。
格式

<%@ page isThreadSafe="true" %> 
<%-- Default:默认值是true --%>
<%@ page isThreadSafe="false" %>

(9)info:属性值是一个字符串,为JSP页面准备一个常用但可能要经常修改的字符串。

<%@ page info ="we are students"%>
使用:
getServletInfo();

include指令标记

<%@ include file="文件名的URL"%>

在JSP页面内静态嵌入一个文件,文件编码和当前JSP页面一致。静态的包含就是指这个被包含的文件将会被插入到JSP文件中去,这个被包含的文件可以是JSP文件、HTML文件、文本文件或者只是一段Java代码。
一个 JSP 页面中的 include 指令的数量不受限制。
如果 对嵌入的文件进行了修改,那么服务器会重新编译JSP页面,即将当前的JSP页面和修改后的文件合并成一个JSP页面,然后服务器再将这个新的JSP页面转译成Java类文件。

JSP动作标记

include动作标记

<jsp:include page=“文件的URL” flush=“true”/>

include指令标记与include动作标记的不同。
处理时间和处理方式不同。include指令标记是在编译阶段就处理所需要的文件,被处理的文件逻辑和语法上依赖于当前的JSP页面(编码一致);include动作标记是在JSP页面运行时才处理文件,被处理文件在逻辑和语法上独立于当前JSP页面。前者静态嵌入,后者动态包含。include指令标记执行速度高于include动作标记。

param动作标记

它被用来以“名-值”对的形式为其它标签提供附加信息。
它和jsp:include、jsp:forward、jsp:plugin一起使用。
当该标记与jsp:include动作标记一起使用时,可以将param标记中的值传递到include动作标记要加载的文件中去,被加载的JSP文件可以使用Web服务器提供的request内置对象获取include动作标记的param子标记中name属性所提供的值

<jsp:param name=“paramName” 	 value=“paramValue”/>

forward动作标记

从该指令处停止当前页面的继续执行,而转向执行page属性指定的JSP页面
这个动作允许请求被转发到另外的JSP、servlet或一个静态的资源上。
格式:

<jsp:forward page="要转向的页面" />
或
<jsp:forward page=“要转向的页面” >
    <jsp:param name="paramname"  value="paramvalue"/>
</jsp:forward>