Java Web 开发 ——第二章JSP语法

目录

前言

2.1  JSP页面的基本结构

2.2  声明变量与方法

2.3  Java程序片

 2.4  Java表达式

 2.5  JSP中注释

2.6  JSP指令标记

        2.6.1page指令标记

        2.6.2include指令标记

 2.7  JSP动作标记

        2.7.1  include动作标记

        2.7.2  param动作标记

        2.7.3  forward动作标记

         2.7.4  useBean动作标记

总结


前言

学习JSP语法是了解JSP页面的基本,jsp语法更是学习jsp的入门。 本篇文章主要对jsp页面的基本结构、如何在jsp页面中声明一个变量和方法、java程序片、java表达式、jsp中的注释、jsp指令标记以及jsp动作标记进行简单的介绍和实例。


2.1  JSP页面的基本结构

在传统的html页面文件中加入java程序片和jsp标记就构成了一个jsp页面。 JSP的主要构建为:

  1. java程序片
  2. java表达式
  3. jsp中的注释
  4. jsp指令标记
  5. jsp动作标记

示例:在下列代码中,详细的表示了上述结构:

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

代码运行结果:

tips:由于本章重点讲述JSP的内容,因此默认读者初步了解HTML语言 


2.2  声明变量与方法

(1) 主要格式为:

<%!      内容    %> 

(2) 声明变量

        <%!  %>之间声明的变量在整个JSP页面内都有效,与它在JSP页面的位置无关

<%@ page contentType="text/html" %>  
<%@ page pageEncoding = "utf-8" %>  
<HTML><body bgcolor=yellow>
<%! int i=0;
%>
<% i++;
%>
<p style="font-family:宋体;font-size:36">
您是第<%= i %>个访问本站的用户。
</p>
</body></HTML>    

结果:

 

 

(3)  定义方法与类   

          定义方法与类时,可以在<%! %>中定义,也可以在java程序片中定义,这里是用第一种方法来定义该方法与类

代码如下(示例):

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

结果:

 

tips: <%! %> 标签声明的标量是全局变量,在整个页面都可以使用,无论你在哪儿声明。

2.3  Java程序片

(1)  主要格式为:

<%    内容    %>

(2)  放置位置:
Java程序片可以写在<html>前面,也可以写在<html>与</html>之间,或者是</html>后面

(3)  特点:
当多个用户请求一个JSP页面时,tomcat服务器为每个用户启动启动了一个线程,该线程负责执行这些字节码文件响应用户的请求.tomcat使用多线程来处理java程序片时,具有以下特点:

  1. 操作JSP页面的成员变量
  2. 调用JSP页面的方法
  3. 操作局部变量

代码如下(示例):

<%@ page contentType = "text/html" %>  
<%@ page pageEncoding = "utf-8" %>  
<HTML><body>
<p style="font-family:宋体;font-size:36;color:blue">
<%! int count=0;                    //被用户共享的count。
     synchronized void setCount() {  //synchronized修饰的方法。
       count++;
     }
%>
<%  setCount();
    out.println("您是第"+count+"个访问本站的客户");   
%>
</p></body></HTML>

tips:在JSP声明的变量为局部变量!!!它的有效范围与位置有关!!!即局部变量在JSP页面后继的所以程序片以及表达式部分内都有效.


 

 2.4  Java表达式

JSP提供了 <%= %> 标记符,用来接收一个表达式或者一个变量的值。

(1)  格式:

<%=   内容 %>

(2) 位置:

与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>

 tips:在该表达式中%和=之间不能有空格,即不可插入其他字符,否则会出错。需要注意的是,在JSP页面中,表达式的值被表达成一个字符串的形式,即tomcat服务器将表达式的结果转化成字符串,然后发送给用户的浏览器。


 2.5  JSP中注释

在一个JSP页面中,注释可以增强JSP页面的可读性,使JSP页面给易于维护

(1)  格式:

  1. html注释
  2. 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>  

tips:tomcat服务器忽视JSP注释,即在编译JSP页面是忽略JSP注释 

2.6  JSP指令标记

        2.6.1page指令标记

<%@page 属性=" 属性值" ...... %>

 

参考代码:

<%@ page contentType="image/jpeg" %> 
<%@ page import="java.awt.*" %>
<%@ page import="java.io.OutputStream" %>
<%@ page import="java.awt.image.BufferedImage" %>
<%@ page import="java.awt.geom.*" %>  
<%@ page import="javax.imageio.ImageIO" %>
<%   int width=320, height=300;
     BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
     Graphics g = image.getGraphics();
     g.setColor(Color.lightGray);
     g.fillRect(0, 0, width, height);
     Graphics2D g_2d=(Graphics2D)g; 
     Ellipse2D ellipse=new Ellipse2D. Double (70,90,120,60);
     g_2d.setColor(Color.blue);
     AffineTransform trans=new  AffineTransform(); 
     for(int i=1;i<=24;i++) {
        trans.rotate(15.0*Math.PI/180,160,130);
        g_2d.setTransform(trans);
        g_2d.draw(ellipse); 
     }
     g_2d.setColor(Color.red);
     Arc2D arc= new Arc2D.Double (200,220,100,40,0,270,Arc2D.PIE);
     g_2d.fill(arc);
     arc.setArc(5,5,100,40,0,-270,Arc2D.PIE);
     g_2d.fill(arc); 
     g_2d.setColor(Color.black);
     g_2d.setFont(new Font("",Font.BOLD,18));
     g_2d.drawString("耿祥义, Graphic Drawer",10,280);
     g_2d.dispose();
     OutputStream outClient= response.getOutputStream();   //获取指向用户端的输出流
     boolean boo =ImageIO.write(image,"jpeg",outClient);
%>

结果:

 

tips:page 指令标记的作用对整个JSP页面有效,也书写位置无关  

        2.6.2include指令标记

(1)格式: 

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

 (2)参考代码:

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动作标记

        2.7.1  include动作标记

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

书写动作标记时,jsp : include之间不能有空格

        2.7.2  param动作标记

<jsp:include name="参数"values="参数的值"/>

参考代码:

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

 结果:

        2.7.3  forward动作标记

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

 参考代码:

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

结果:
 

 

         2.7.4  useBean动作标记

本内容将在第五章详细讨论,useBean标记用来创建并使用一个JavaBean,是非常重要的一个动作标记。

总结

        在本博客中,简单概况了一下JSP页面中的简单语法。即java程序片,表达式,JSP中的注释,以及JSP中的动作标记、指令标记。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值