JSP⼆讲教学活动⾸页
基本内容
第 2 章 JSP 语法
教学⽬的与要求:通过本章的学习让学⽣了解SP 中的注释的使⽤⽅法;理JSP页教学⽬的与要求:
⾯的基本结构;掌握变量和⽅法的声明⽅法,Java 程序⽚的使⽤,Java 表达式的使⽤,JSP指令标签和JSP动作标签的使⽤。
教学内容:
2.1 JSP 页⾯的基本结构
2.2 变量和⽅法的声明
2.3 Java 程序⽚
2.4 Java 表达式
2.5 JSP 中的注释
2.6 JSP 指令标签
jsp和html哪个更好2.7 JSP 动作标签
教学基本要求:
了解:JSP 中的注释
理解:JSP页⾯的基本结构
掌握:变量和⽅法的声明,Java 程序⽚,Java 表达式,JSP指令标签,JSP动作标签
教学重点教学难点:
JSP页⾯的基本结构,变量和⽅法的声明, Java 程序⽚,Java 表达式, JSP指令标签, JSP动作标签
教学⽅法:
教学⼿段:多媒体教学和计算机程序演⽰
教学⼿段:
教学⼩结:(见教学进程)
作业与思考:见课后习题
作业与思考:
课后记载:
教学进程
第2章 JSP语法
2.1 JSP页⾯的基本结构
在传统的HTML页⾯⽂件中加⼊java程序⽚和JSP标签就构成了⼀个JSP页⾯⽂件。⼀个JSP页⾯可由5种元素组合⽽成:
(1)普通的HTML标记符。
(2)JSP标签:如,指令标签、动作标签。
(3)变量和⽅法的声明。
(4)Java 程序⽚。
(4)Java 程序⽚。
(5)Java 表达式。
我们称(3)、(4)、(5)形成的部分为JSP的脚本部分。
当服务器上的⼀个jsp页⾯被第⼀次请求执⾏时,服务器上的JSP引擎⾸先将JSP页⾯⽂件转译成⼀个java⽂件,再将这个java⽂件编译⽣成字节码⽂件,然后通过执⾏字节码⽂件响应客户的请求。这个字节码⽂件的任务就是:
把JSP页⾯中普通的HTML标记符号,交给客户的浏览器执⾏显⽰。
JSP标签、数据和⽅法声明、Java程序⽚由服务器负责执⾏,将需要显⽰的结果发送给客户的浏览器。
Java 表达式由服务器负责计算,并将结果转化为字符串,然后交给客户的浏览器负责显⽰。
在下⾯的例⼦1中,客户通过表单向服务器提交三⾓形三边的长度,服务器将计算三⾓形的⾯积,并
将计算的结果以及客户输⼊的三边长度返回给客户。为了讲解⽅便,下⾯的JSP⽂件加⼊了⾏号,它们并不是JSP源⽂件的组成部分。
在下⾯的Example2_1.jsp中:
(1)、(2)⾏是JSP指令标签。
(3)⾄(10)⾏是HTML标记,其中(7)到(10)⾏是HTML表单,客户通过该表单向服务器提交数据。
(11)⾄(13)⾏是数据声明部分,该部分声明的数据在整个JSP页⾯内有效。(14)⾄(42)⾏是Java程序⽚,该程序⽚负责计算⾯积,并将结果返回给客户。该程序⽚内声明的变量只在该程序⽚内有效。
(45)、(47)、(49)⾏是Java 表达式
例⼦1(效果如图2.1所⽰)
Example2_1.jsp:
(1)    <%@ page contentType="text/html;charset=GB2312" %>
(2)    <%@ page import="java.util.*" %>
(3)    <HTML>
(4)    <BODY BGCOLOR=cyan><FONT Size=1>
(5)      <P> 请输⼊三⾓形的三个边的长度,输⼊的数字⽤逗号分割:
(6)      <BR>
(7)      <FORM action="Example2_1.jsp" method=post name=form>
(8)      <INPUT type="text" name="boy">
(9)      <INPUT TYPE="submit" value="送出" name=submit>
(10)    </FORM>
(11)        <%! double a[]=new double[3];
(12)            String answer=null;
(13)        %>
(14)        <% int i=0;
(15)            boolean b=true;
(16)            String s=null;
(17)            double result=0;
(18)            double a[]=new double[3];
(19)            String answer=null;
(20)            Parameter("boy");
(21)              if(s!=null)
(22)                  { StringTokenizer  fenxi=new StringTokenizer(s,",,");
(23)                    while(fenxi.hasMoreTokens())
(24)                        { String Token();
(25)                          try{ a[i]=Double.valueOf(temp).doubleValue();
(26)                                i++;
(27)                              }
(28)                        catch(NumberFormatException e)
(29)                            {out.print("<BR>"+"请输⼊数字字符");
(30)                            }
(31)                        }
(32)                if(a[0]+a[1]>a[2]&&a[0]+a[2]>a[1]&&a[1]+a[2]>a[0]&&b==true)
(33)                    { double p=(a[0]+a[1]+a[2])/2;
(34)                      result=Math.sqrt(p*(p-a[0])*(p-a[1])*(p-a[2]));
(35)                      out.print("⾯积:"+result);
(36)                    }
(37)                else
(38)                  {answer="您输⼊的三边不能构成⼀个三⾓形";
(39)                      out.print("<BR>"+answer);
(40)                  }
(41)            }
(42)        %>
(43)      <P> 您输⼊的三边是:
(44)          <BR>
(45)              <%=a[0]%>
(46)          <BR>
(47)            <%=a[1]%>
(48)          <BR>
(49)            <%=a[2]%>
(50)  </BODY>
(51)  </HTML>
2.2  变量和⽅法的声明
在“<%!”和“%>”标记符号之间声明变量和⽅法。
2.2.1 声明变量
在“<%!”和“%>”标记符之间声明变量,即在“<%!”和“%>”之间放置Java的变量声明语句,变量的类型可以是Java 语⾔允许的任何数据类型,我们将这些变量称为JSP 页⾯的成员变量。如,
<%! int  a, b=10 , c;
String tom=null,jerry=”love JSP”;
Date date;
%>
“<%!”和“%>”之间声明的变量在整个JSP页⾯内都有效,因为JSP引擎将JSP页⾯转译成Java ⽂件时,将这些变量作为类的成员变量。这些变量的内存空间直到服务器关闭才释放。当多个客户请求⼀个JSP页⾯时,JSP引擎为每个客户启动⼀个线程,这些线程由JSP引擎服务器来管理,这些线程共享JSP页⾯的成员变量,因此任何⼀个⽤户对JSP页⾯成员变量操作的结果,都会影响到其他⽤户。
下⾯的例⼦2利⽤成员变量被所有⽤户共享这⼀性质,实现了⼀个简单的计数器。例⼦2(效果如图2.2所⽰)
例⼦2
Example2_2.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY BGCOLOR=cyan><FONT size=1>
<%!int i=0;
%>
<%i++;
%>
<P>您是第
<%=i%>
个访问本站的客户。
</BODY>
</HTML>
在处理多线程问题时,我们必须注意这样⼀个问题:当两个或多个线程同时访问同⼀个共享的变量,
并且⼀个线程需要修改这个变量时,我们应对这样的问题作出处理,否则可能发⽣混乱。在上⾯的例⼦2中,可能发⽣两个客户同时请求Example2_2.jsp页⾯。在Java语⾔中我们已经知道,在处理线程同步时,可以将线程共享的变量放⼊⼀个synchronized块,或将修改该变量的⽅法⽤synchronized 来修饰。这样,当⼀个客户⽤synchronized块或synchronized⽅法操作⼀个共享变量时,其它线程就必须等待,直到该线程执⾏完该⽅法或同步块。下⾯的例⼦3对例⼦2进⾏了改进。
例⼦3
Example2_3.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<HTML>
<BODY>
<%! Integer number=new Integer(0);
%>
<%
synchronized(number)
{ int i=number.intValue();
i++;
number=new Integer(i);
}
%>
<P>您是第
<%=number.intValue()%>
个访问本站的客户。
</BODY>
</HTML>
2.2.2 声明⽅法
在“<%!”和“%>”之间声明⽅法,该⽅法在整个JSP页⾯有效,但是该⽅法内定义的变量只在该⽅法内有效。这些⽅法将在Java程序⽚中被调⽤,当⽅法被调⽤时,⽅法内定义的变量被分配内存,调⽤完毕即可释放所占的内存。当多个客户同时请求⼀个JSP页⾯时,他们可能使⽤⽅法操作成员变量,对这种情况应给予注意。在下⾯的例⼦4中,通过synchronized⽅法操作⼀个成员变量来实现⼀个计数器。
例⼦4
Example2_4.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<%! int number=0;
synchronized void countPeople()
{ number++;
}
%>
<% countPeople();  //在程序⽚中调⽤⽅法。
%>
<P><P>您是第
<%=number%>
个访问本站的客户。
</BODY></HTML>
在上⾯的例⼦4中,如果Tomcat服务器重新启动就会刷新计数器,因此计数⼜从0开始。在下⾯的例⼦
5中,我们使⽤Java的输⼊输出流技术,将计数保存到⽂件。当客户访问该JSP页⾯时,就去读取这个⽂件,将服务器重新启动之前的计数读⼊,并在此基础上增1,然后将新的计数写⼊到⽂件;如果这个⽂件不存在(服务器没有作过重新启动),就将计数增1,并创建⼀个⽂件,然后将计数写⼊到这个

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