系列文章目录
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属性指定多个值。