JSP实用教程——第二章JSP语法

系列文章目录

JSP实用教程——第二章JSP语法

前言

JSP语法

2.1 JSP页面的基本结构

一个JSP页面可由5种元素组合而成:

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

JSP运行原理:

一个JSP页面被第一次请求执行时,Tomcat服务器首先将JSP页面文件转译成一个Java文件,再将这个Java文件编译生成字节码文件,然后通过执行字节码文件响应用户的请求。

2.2 声明变量和定义方法

在<%!和%>标记符号之间声明变量,定义方法以及定义类。

1.声明变量:

<%! double x=8.79;
%>

2.定义方法:

<%! double multi(double x,double y){ //定义方法
        return x*y;
    }
    double div(double x,double y) { //定义方法
        return x/y;
    }
 %>

2.3 Java程序片

1.在<%和%>之间插入Java 程序片。
2.一个JSP页面可以有许多程序片,这些程序片将被Tomcat服务器按顺序执行。
3.在程序片中声明的变量称作JSP页面的局部变量。局部变量的有效范围与其声明的位置有关,即局部变量在JSP页面后继的所有程序片以及表达式部分内都有效。

<%  setCount();
    out.println("您是第"+count+"个访问本站的客户");   
%>

2.4 Java表达式

可以在<%=和%>之间插入一个可求值的表达式(注意:不可插入语句,
<%=是一个完整的符号,“<%”和“=”之间不要有空格)。

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

2.5 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.1page指令标记

page 指令用来定义整个JSP页面的一些属性和这些属性的值。
<%@ page 属性1=“属性1的值” %>
<%@ page 属性2=“属性2的值” %>
… …
<%@ page 属性n=“属性n的值” %>
也可以用一个page指令指定多个属性的值,如:
<%@ page 属性1=“属性1的值” 属性2= “属性2的值” ……%>

1. contentType属性
JSP页面设置响应的MIME(Multipurpose Internet Mail Extention)类型,即设置contentType 属性的值。
例如:

<%@ page contentType="text/html " %>

浏览器启用HTML解析器来解析执行所接收到的信息。
2.pageEncoding 属性
只能为pageEncoding指定一个值,不允许两次使用page指令给pageEncoding属性指定不同的或相同的属性值。
例如:

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

那么保存JSP页面应当将“编码”选择为“utf-8”

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

<%@ page language=“java” %>

4.import 属性
该属性的作用是为JSP页面引入Java运行环境提供的包中的类。
例如:

<%@ page import=“java.util." %>
<%@ page import="java.io.
” %>

5.session属性
session 属性用于设置是否需要使用内置的session对象。session的属性值可以是true或false。session属性默认的属性值是true。

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

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

buffer属性的默认值是8kb 。
7.autoFlush属性
autoFlush可以取值true或false。autoFlush属性的默认值是true。
8.isThreadSafe 属性
isThreadSafe的属性值可取true或false。 isThreadSafe属性值为true时,CPU的使用权在各个线程间快速切换,设置成false时,该JSP页面同一时刻只能响应一个用户的请求,其他用户须排队等待。
9.info 属性
info属性的属性值是一个字符串,其目的是为JSP页面准备一个常用但可能要经常修改的字符串。
例如:

<%@ page info="清华大学图像tsinghua.jpg" %>
<%  String s=getServletInfo();
    String str[]=s.split("图像");
%>
<HTML><center>
<body background="image/<%=str[1]%>">
<p style="font-family:宋体;font-size:36;color:red">
<br><%=str[0]%>出版社是中国著名出版社
<br><%=str[0] %>是全国著名的高等学府
</p></body></center><HTML>

运行结果:
在这里插入图片描述

2.6.2include指令标记

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

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

■嵌入的文件的编码必须和当前JSP页面一致,比如二者都是utf-8编码。
■ 嵌入文件后,必须保证新合并成的JSP页面符合JSP语法规则,即能够成为一个JSP页面文件。
■include指令可以实现代码的复用。比如,每个JSP页面上都可能都需要一个导航条,以便用户在各个JSP页面之间方便地切换,那么每个JSP页面都可以使用include指令在页面的适当位置整体嵌入一个相同的文件。
■允许被嵌入的文件使用page指令指定contentType属性的值,但指定的值要与嵌入该文件的JSP页面中的page指令指定的contentType属性的值相同。

2.7 动作标记

2.7.1 include动作标记

include 动作标记语法格式为:

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

或者

<jsp:include page= “文件的URL” >
param子标记
</jsp:include>

include动作标记告诉JSP页面动态包含一个文件,即JSP页面运行时才将文件加入。与静态嵌入文件的include指令标记不同,当Tomcat服务器根据JSP页面产生成Java文件时,不把JSP页面中动作指令include所包含的文件与原JSP页面合并为一个新的JSP页面,而是告诉Java解释器,这个文件在Java文件的字节码文件被加载执行时才包含进来。

2.7.2 param动作标记

param标记以“名字—值”对的形式为其他标记提供附加信息。

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

当该标记与 jsp : include 动作标记一起使用时,可以将 param 标记中参数的值传递到 include 动作标记要加载的文件中去,被加载的 JSP 文件可以使用 Tomcat 服务器提供的 request 内置对象获取 include 动作标记的 param 子标记中 name 给出的参数的值。因此 include 动作标记通过使用 param 子标记来处理加载的文件,比 include 指令标记更为灵活。
例如:

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

指令的作用是:从该指令处停止当前页面的执行,而转向执行page属性指定的JSP页面。需要注意的是,当前页面使用forward动作标记转向后,尽管用户看到了转向后的页面的效果,但浏览器地址栏中显示的仍然是转向前的JSP页面的URL地址,因此,如果刷新浏览器的显示,将再次执行当前浏览器地址栏中显示的JSP页面。
格式为:

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

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

总结

1.JSP页面中的成员变量是被所有用户共享的变量。Java程序片可以操作成员变量,任何一个用户对JSP页面成员变量操作的结果,都会影响到其他用户。
2.如果多个用户访问一个JSP页面,那么该页面中的Java程序片就会被执行多次,分别运行在不同的线程中,即运行在不同的时间片内。运行在不同线程中的Java程序片的局部变量互不干扰,即一个用户改变Java程序片中的局部变量的值不会影响其他用户的Java程序片中的局部变量。
3.page指令用来定义整个JSP页面的一些属性和这些属性的值。比较常用的两个属性是contentType和import。 page指令只能为contentType指定一个值,但可以为import属性指定多个值。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值