java web 开发——第二章jsp语法


前言

本章主要学习JSP页面的基本结构、声明变量和定义方法、Java程序片、Java表达式、JSP指令标记和JSP动作标记。


2.1、JSP页面的基本结构

在传统的HTML页面文件中加入Java程序片和JSP标记就构成了一个JSP页面。一个JSP页面可有5种元素组成:

  1. 普通的HTML标记和JavaScript标记。
  2. JSP标记,如指令标记、动作标记。
  3. 变量和方法的声明。
  4. Java程序片
  5. Java表达式

本文章默认读者初步了解HTML语言,但不要求掌握JavaScript。

在下面的例子中页面包含了5种元素,其中
★使用HTML的img标记显示一幅图像(需要将一幅图像xxx.jpg保存在Web服务目录ch2的image目录中)。
★使用JavaScript显示客户端浏览器的时间
★使用Java程序片显示Tomcat服务器端的时间
★使用Java表达式显示一些变量的值

代码如下

<%@ page contentType="text/html" %>   <!-- jsp指令标记 -->
<%@ page pageEncoding = "utf-8" %>    <!-- jsp指令标记 -->
<%@ page import="java.time.LocalTime" %> <!-- jsp指令标记 -->
<%!   public int continueSum(int start,int end){  // 定义方法
         int sum =0; 
         for(int i=start;i<=end;i++)  
            sum=sum+i; 
         return sum;
      }
%>
<HTML><body bgcolor = pink>
<script>   <!--JavaScript(JS)标记 -->                    
  var userTime = new Date();
  var hour = userTime.getHours();
  var minute =userTime.getMinutes();
  var second = userTime.getSeconds();
  var millisecond = userTime.getMilliseconds();
  document.write("<h2>浏览器时间:"+
                  hour+":"+minute+":"+second+":"+millisecond+"<br></h2>");
</script> 
<img src="image/time.jpg"  width=180 height=120 />  <!--html标记 -->
<p style="font-family:黑体;font-size:36;color:red"> <!--html标记 --> 
<%  //Java程序片:
    LocalTime timeServer = LocalTime.now();  
    int hour = timeServer.getHour();
    int minute =timeServer.getMinute();
    int second = timeServer.getSecond();
    int nano   = timeServer.getNano() ;//纳秒。
    int millisecond = nano/1000000;
    out.print("服务器时间:<br>"+
             hour+":"+minute+":"+second+":"+millisecond);
    int start=1;
    int end=100; 
    int sum=continueSum(start,end);
%>
</p>
<p style="font-family:宋体;font-size:33;color:blue"><%= start %>  <!-- Java表达式 --><%= end %>    <!-- Java表达式 --><br>连续和是:
   <%= sum %>    <!-- Java表达式 --> 
</p>
<script>   <!--JavaScript(JS)标记 -->                    
   document.write("<h2>服务器时间:"+
<%=hour%>+":"+<%=minute%>+":"+<%=second%>+":"+<%=millisecond%>+"</h2>");
</script> 
</body></HTML>

2.2、声明变量和定义方法

在"<%!“和”%>"标记符号之间声明变量和定义方法。

2.2.1.声明变量

"<%!“和”%>“之间声明的变量在整个JSP页面内都有效,与”<%!“和”%>“标记符在JSP页面中所在的书写位置无关,但习惯上把”<%!“和”%>"标记符写在JSP页面的前面。

"<%!“和”%>"标记符之间声明的变量为类的成员变量,这些变量占有内存空间知道Tomcat服务器关闭才释放。

2.2.2.定义方法

★可以在"<%!“和”%>“标记符之间定义方法,可以在Java程序片中调用该方法。方法内声明的变量只在该方法内有效。
★可以在”<%!“和”%>"标记符号之间定义类,可以在Java程序片中使用该类创建对象。

下面例子中在"<%!“和”%>“之间定义了两个方法multi(int x,int y)和div(int x,int y),在程序片中调用这两个方法。在”<%!“和”%>"之间定义了一个Circle类,然后在程序片中使用该类创建对象计算圆面积。

代码如下

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



2.3、Java程序片

★可以在"<%“和”%>"之间插入Java程序片。一个JSP页面可以有许多程序片,这些程序片将被Tomcat服务器按顺序执行。
★在程序片中声明的变量称作JSP页面的局部变量,在JSP页面后继的所有程序片以及表达式部分内都有效。

下面的例子中获得一个7~19的随机数,如果获得的数小于或等于13就显示一幅篮球的图像,否则显示一幅打篮球的帅气男孩图像。显示图像需要在程序片之间插入用于显示图像的

< imagesrc = 图像的URL > 文字说明 < /image >

HTML标记。

代码如下

<%@ page contentType = "text/html" %>  
<%@ page pageEncoding = "utf-8" %>  
<HTML><body bgcolor=cyan>
<%  //Math.random()是 [0,1)之间的随机数
      int number = 7+(int)(Math.random()*13);
      if(number<=13) {
%>  
        <center> <h2>显示篮球图片</h2> <!-- 插入其他标记 -->
        <image src ='image/xiao.jpg' width=180 height=178>篮球</image>
<%    }
      else {
%>   
        <center> <h2>显示打篮球的帅气男孩图片</h2>
        <image src ='image/zhong.jpg' width=180 height=178>打篮球的帅气男孩</image>
<%    }
%> 
</body></HTML>


2.4、Java表达式

可以在"<%=“和”%>“之间插入一个可求值的表达式(注意:”<%=是一个完整的符号)。在JSP页面中,表达式的值被表示成一个字符串的形式,因此,在编写JSP页面时,要把Java表达式按普通的文本来使用。


代码如下

<%@ page contentType = "text/html" %>  
<%@ page pageEncoding = "utf-8" %>  
<HTML><body  bgcolor=pink>
<%  int x=12,y=9;
%>
<p style="font-family:宋体;font-size:36">
  计算表达式x+y+x%y,<%= x %>+<%= y %>+<%= x %>%<%= y %>的值: 
  <%= x+y+x%y %>
<br>计算表达式x>y即<%= x %> > <%= y %>的值:
  <%= x>y %>
<br>计算表达式sin(<%=  Math.PI %>/2)的值:
    <%= Math.sin(Math.PI/2) %>
<br> 
<%  if(x-y>=0) {
%>    
       如果<%= x %>大于<%= y %>,计算<%= x %> - <%= y %><%= x-y %>的平方根:
       <%=Math.sqrt(x-y)%>
<%  }
%>
</p></body></HTML>


2.5、JSP中的注释

  1. HTML注释:在标记符号"<! --“和”–>"之间加入注释内容。
  2. JSP注释:在标记符号"<%–“和”–%>"之间加入注释内容。

Tomcat服务器忽略JSP注释,即在编译JSP页面时忽略JSP注释。


代码如下

<%@ page contentType = "text/html" %>  
<%@ page pageEncoding = "utf-8" %>  
<HTML><body>
<%-- 下面是Java程序片 --%>
<%  String str = "C:\\jspfile\\example2_7.jsp"; 
    int index = str.lastIndexOf("\\"); 
    str = str.substring(index+1);
%>
<!-- 以下字体的颜色为蓝色 -->
<p style="font-family:黑体;font-size:20;color:blue"> 
抽取字符串<%= str %>中的JSP文件名字. 
<!-- 以下字体的颜色为红色 -->
<font size="6" color="red"><br>
<%-- 下面是Java表达式 --%> 
<%= str %>
</font>
</p>
</body></HTML>  


2.6、JSP指令标记

2.6.1、page指令标记

page指令用来定义整个JSP页面的一些属性和这些属性的值,属性值用单引号或双引号括起来。page指令的作用对整个JSP页面有效

<%@ page属性 n = “属性n的值”%>
<%@ page 属性1 = "属性1的值"属性2 = “属性2的值”…%>

page指令标记可以为以下9种:

  1. contentType属性

如果我们希望用户的浏览器启用HTML解析器来解析执行所接收到的信息(即所谓的网页形式),就可以如下设置:

<%@ page contentType = “text/html” %>

★ 如果不使用page指令为contentTypezhiding一个值,那么默认值是"text/html"。
★不允许两次使用page指令给contentType属性指定不同的属性值。
★用page指令为contentType指定一个值的同时,也可以为contentType的附加属性charset指定一个值(默认值是iso-8859-1)。

  1. pageEncoding属性

该属性的作用是告诉Tomcat服务器的解析器用怎样的编码解析JSP页面中的字符。如:

<%@ page pageEncoding = “utf-8” %>

★pageEncoding属性的默认值是UTF-8。
★不允许两次使用page指令给pageEncoding属性指定不同的或相同的属性值。

  1. language属性

language属性定义JSP页面使用的脚本语言,该属性的值目前只能取"java",默认值为"java"。指定格式如下:

<%@ page language = “java” %>

  1. import属性

该属性的作用是为JSP页面引入Java运行环境提供的包中的类,这样就可以在JSP页面的程序片、变量及定义方法中等使用包中的类。指定格式如下:

<%@ page import = "java. io. * ", “java. time. LocalDate” %>

JSP页面默认import属性已经有如下值:

"java. lang. * " "javax. servlet. * " "javax. servlet. jsp. * " "javax. servlet. http. * "

  1. session属性

session属性用于设置是否需要使用内置的session对象。session的属性值为true或false。默认值为ture

  1. buffer属性

内置输出流对象out负责将服务器的某些信息或运行结果发送到用户端显示。buffer属性用来指定out设置的缓冲区的大小或不适用缓冲区。例:

<%@ page buffer = “24kb” %>

  1. autoFlush属性

autoFlush属性指定out的缓冲区被填满时,缓冲区是否自动刷新。取值为true或false,默认为true。当buffer的值是“none”时,autoFlush的值就不能设置成flase。

  1. isThreadSafe属性

isThreadSafe属性用来设置访问JSP页面是否线程安全的。取值为true或false。
★当值为true时,JSP页面能同时响应多个用户的请求;
★当职位false时,JSP页面同一时刻只能响应一个用户的请求,其他用户需等待。
★默认值为true。

  1. info属性

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

<%@ page info = “we are student” %>

可以在JSP页面中使用getServletInfo();方法获取info属性的属性值。

2.6.2、include指令标记

在JSP页面内某处整体嵌入一个文件,就可以使用include指令标记,语法格式如下:

<%@ include file = “文件的URL” %>

JSP页面该指令处将会静态嵌入一个文件。
★该文件的编码必须和当前JSP页面一致。
★被嵌入的文件必须是可以访问或可以使用的。
★若文件与JSP页面在同一Web服务目录中,那么“文件的URL”就是文件的名字。如果在JSP页面的Web服务目录的子目录,例如a子目录中那么“文件的URL”为a/文件名。

下面例子中两个页面使用include指令标记嵌入一个文本文件:ok.txt。


代码如下:
ok.txt

<%@ page contentType="text/html" %>
<center>
<A href="example2_10_a.jsp">北京大学</A>
<A href="example2_10_b.jsp">清华大学</A>

example2_10_a.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<%@ include file="myfile/ok.txt" %>
<HTML><center><body background="image/beida.jpg">
<bgsound src="sound/beida.mp3" loop=1>
<h1>这里是北京大学 </h1>
</body></HTML>

example2_10_b.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<%@ include file="myfile/ok.txt" %>
<HTML><center><body background="image/tsinghua.jpg">
<bgsound src="sound/tsinghua.mp3" loop="-1">
<h1>这里是清华大学 </h1>
</body></HTML>


2.7、JSP动作标记

动作标记是一种特殊的标记,影响JSP运行时的功能。

2.7.1、include动作标记

include动作标记语法格式为:

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

< jsp:include page = “文件的URL”>
param子标记
</jsp:include >
(注: “jsp” “:” “include”三者之间不要有空格。)

当不需要子标记时,必须使用第一种形式。

include动作标记告诉JSP页面动态包含一个文件,即JSP文件运行时才将文件加入。

include动作标记与include指令标记的不同:
★include指令标记在编译阶段就处理所需要的文件,被处理的文件在逻辑和语法上依赖于当前的JSP页面,优点是执行速度快。
★include动作标记在JSP页面运行时才处理文件,被处理的文件在逻辑和语法上独立与当前的JSP页面,优点是可以使用param子标记更灵活地处理文件,缺点是执行速度慢一些。

2.7.2、param动作标记

param标记以“名字-值”对的形式为其他标记提供附加信息,param标记不能单独使用,须作为jsp:include、jsp:forward标记的子标记来使用。语法格式是:

< jsp:param name = “参数” value = “参数的值” />

下面例子中使用include动作标记加载JSP文件并保存在当前Web服务目录ch2的子目录myfile中。

代码如下
example2_11

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<HTML><body  bgcolor=cyan >
<% double a=6.12,b=7.08,c=9.22;
%>
<p style="font-family:宋体;font-size:36">
<br>加载triangle.jsp计算三边为<%=a%>,<%=b%>,<%=c%>的三角形面积.
   <jsp:include page="myfile/triangle.jsp">
     <jsp:param name="sideA" value="<%=a%>"/>
     <jsp:param name="sideB" value="<%=b%>"/>
     <jsp:param name="sideC" value="<%=c%>"/>
   </jsp:include>
</p></body></HTML>

triangle.jsp

<%@ page contentType="text/html" %> 
<%@ page pageEncoding = "utf-8" %>
<%! public String getArea(double a,double b,double c) {
       if(a+b>c&&a+c>b&&c+b>a) {
           double p=(a+b+c)/2.0;
           double area=Math.sqrt(p*(p-a)*(p-b)*(p-c)) ;
           String result = String.format("%.2f",area);//保留两位小数
           return result;
       }
       else { 
          return(""+a+","+b+","+c+"不能构成一个三角形,无法计算面积");
       }
    }
%>
<%   String sideA=request.getParameter("sideA");
     String sideB=request.getParameter("sideB");
     String sideC=request.getParameter("sideC");
     double a=Double.parseDouble(sideA);
     double b=Double.parseDouble(sideB);
     double c=Double.parseDouble(sideC);
%>
<p style="font-family:黑体;font-size:36;color:blue">
<br><b>我是被加载的文件,负责计算三角形的面积<br>
    给我传递的三边是:<%=sideA%>,<%=sideB%>,<%=sideC%></b>
<br><b><i>三角形的面积(保留2位小数):<%= getArea(a,b,c)%></i></b></i>
</p>

2.7.3、forward动作标记

语法格式为:

< jsp:forward page = “要转向的页面” />

< jsp:forward page = “要转向的页面” >
param 子标记
</ jsp;forward >

该指令作用是:从该指令处停止当前页面的执行,而转向执行page属性指定的JSP页面。

★需要注意的是,当前页面使用forward动作标记转向后,尽管用户看到了转向后的页面的效果,但浏览器地址栏中显示的仍然是转向前的JSP页面的URL地址,因此,如果刷新浏览器的显示,将再次执行当前测览器地址栏中显示的JSP页面。

下面例子中
在example2_12.jsp页面随机产生一个1~10之间的随机数,若该数大于5就转向页面example2_12_a.jsp,否则转向页面examplez2_12_b.jsp。example2_12.jsp使用param子标记将随机数传递给要转向的页面。


代码如下
example2_12.jsp

<%@ page contentType="text/html" %>  
<%@ page pageEncoding = "utf-8" %>  
<HTML><body>
<h1> 产生一个1-10之间的随机数
<%  double i=(int)(Math.random()*10)+1;
    if(i<=5) {
%>      <jsp:forward page="example2_12_a.jsp" >
            <jsp:param name="number" value="<%= i %>" />
        </jsp:forward> 
<%  }
    else {
%>     <jsp:forward page="example2_12_b.jsp" >
           <jsp:param name="number" value="<%= i %>" />
       </jsp:forward> 
<%  }
%>
</body></HTML>

example2_12_a.jsp

<%@ page contentType="text/html" %>  
<%@ page pageEncoding = "utf-8" %>  
<HTML><body bgcolor=cyan>
<p style="font-family:宋体;font-size:36">
<% String s=request.getParameter("number");
    out.println("传递过来的值是"+s);
%>
<br><img src=image/pic_a.jpg width=300 height=280/>
</p></body></HTML>

example2_12_b.jsp

<%@ page contentType="text/html" %>  
<%@ page pageEncoding = "utf-8" %>  
<HTML><body bgcolor=yellow>
<p style="font-family:宋体;font-size:36">
<% String s=request.getParameter("number");
    out.println("传递过来的值是"+s);
%>
<br><img src=image/pic_b.jpg width=300 height=280 />
</p></body></HTML>

2.7.4、useBean标记

用来创建并使用一个JavaBean,该标记在后面会详细讨论。


总结

以上就是本次所介绍的内容,包含了Java程序片、Java表达式、JSP指令标记还有JSP动作标记。通过这次的学习,我们可以学习到JSP页面的基本结构和JSP语法,可以让我们在看代码时更加的便捷。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值