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

目录


前言

本章是关于jsp语法内容,主要内容包括jsp页面的基本结构、声明变量和定义方法、Java表达式、Java程序片、jsp中的注释以及jsp的指令和动作标记.其中 难点是Java程序片和jsp动作标记


1.1 jsp页面的基本结构

jsp页面由5种元素组成,分别是普通的html标记、JavaScriptb标记、jsp标记如指令标记、动作标记、变量和方法的声明、Java程序片和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>

1.1.1声明变量和定义方法

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

在"<%!"和"%>"标记符号之间声明变量和定义方法,标记符号的内容习惯上放在jsp页面指令之后,<html>之前。也可以写在<html>与</html>之间。

"<%!"和"%>"标记符号之间声明的变量在整个jsp页面内都有效,在将JSP页面转译为Java文件时,“<%!”和“%>”之间声明的变量作为类的成员变量这些变量占有的内存空间直至Tomcat服务器关闭才释放。这些变量能够被多个线程共享,任何一个用户对其操作的结果都会影响其他用户。而“<%”和“%>”之间声明的变量称为: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>    

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

    代码如下(示例):   

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

1.1.2Java程序片

  • 有三个特点:
  • 操作jsp页面的成员变量
  • 调用jsp页面方法
  • 操作局部变量

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

局部变量的有效范围与其声明的位置有关,即局部变量在jsp页面后继的所有程序片以及表达式部分内都有效。"<%"和“%>”之间插入程序片。
可以有许多个程序片,按顺序执行。
可以将一个程序片分割成多个程序片,然后再这些程序片间插入其他标记元素。

html中的标记
<%
java程序片
%>
html中的标记
<%
java程序片
%>
html中的标记

     

 tip:操作的成员变量是各个线程(用户)共享的变量,所调用的方法必须是jsp页面曾定义的方法

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

如果成员变量不想同时被多个用户同时调用,要用synchronized关键字修饰:

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

1.1.3Java表达式

语法: <%= expression %>
"<%"和“=”不要有空格
计算结果为字符串类型

结果发送到客户端显示

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

        tip:在编写jsp页面时,要把Java表达式按普通的文本来使用

1.1.4jsp中的注释

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

(3)Java注释:<%/*comment*/%>

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

1.2jsp指令标记

      1.2.1page指令标记

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

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

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

(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= “24kb” %>

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

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

如果值为“false”,则当缓冲区满时,会有一个缓存溢出异常。

如果值为nose,则不能设置为false.
autoFlush的默认值是true.

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

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

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

1.2.2include指令标记

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

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

1.3jsp动作标记

    1.3.1include动作标记

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

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

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

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

forward动作标记

从该指令处停止当前页面的继续执行,而转向执行page属性指定的JSP页面

forward转移后,浏览器中现实的URL仍是转向前的URL地址,因此刷新后返回原来的界面

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

总结

以上就是今天要讲的内容,本文介绍了JSP的基本语法。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值