目录
2.1.jsp页面的基本结构
一个基本的jsp页面可由五种元素组合而成:
a.普通的HTML标记和JavaScript标记
<HTML>-------HTML标记
b.JSP标记,如 指令标记,动作标记
<%@-----jsp标记------%>
c.变量方法和方法的声明
<%!------变量方法和变量的声明------%>
d.Java程序片
<%----java程序片------%>
e.Java表达式
<%=----java表达式-----%>
注:当Tomcat服务器上的一个jsp页面被第一次请求执行时,Tomcat服务器首先将jsp页面文件转译成一个java文件,再将这个java文件编译生成字节码文件。
这个字节码文件的主要任务就是:
1.把JSP页面中普通的HTML标记和JavaScript标记交给用户端浏览器执行显示
2.JSP标记,方法的定义,Java程序片由服务器负责处理和执行,将需要显示的结果发送给用户端浏览器
3.Java表达式由服务器负责计算,并将结果转化为字符串,然后交给用户端浏览器负责显示
2.2.声明变量和定义方法
a.声明变量
表达式为
<%!----------%>
位置:标记符号的内容一般可以放在JSP指令之后,<HTML>之前,也可以写在<HTML>与<HTML>之间
注:在<%!----%>声明的变量叫做全局变量,在整个JSP页面都有效,与它的书写位置无关,
这些变量占有的内存空间直到Tomcat服务器关闭才会释放。
利用成员变量的性质,实现一个简单的计数器:
<%@ 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>
b. 定义方法和类
表达式为
<%!----------%>
书写位置:在 <%!----------%>标记符号之间定义方法和类
注:在java程序片中调用该方法,该方法声明的变量叫做局部变量,只在该方法内有效,当方法被调用时,方法内声明的变量被分配内存,方法被调用完后就可以释放这些变量所占的内存。
效果如图:
<%! 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;
}
}
%>
2.3Java程序片
通常的格式为:
HTML的标记
<%
java程序片
%>
HTML的标记
<%
java程序片
%>
HTML的标记
书写位置:在<HTML>之前,也可以写在<HTML>与<HTML>之间或者<HTML>之后,但是不能在</HTML>之后
注:在程序片中声明的变量称为JSP页面的局部变量,局部变量的有效范围与其声明的位置相关
即局部变量在jsp页面后继的所有程序片以及表达式部分内部都有效
2.4.java表达式
可以在<%=之间插入一个可求值的表达式(不可以插入语句),"<%="是一个完整的符号,不能插入空格。
书写位置:在<HTML>之前,也可以写在<HTML>与<HTML>之间或者<HTML>之后,但是不能在</HTML>之后
注:在jsp页面中,表达式的值被表示成一个字符串的形式,即Tomcat服务器将表达式的结果转换成字符串,然后发送给用户浏览器..因此在编写jsp页面时,要把java表达式按普通的文本来使用
通常的格式为:
计算表达式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) %>
2.5JSP中的注释
JSP注释可以分为两种
JSP注释
<%------注释内容-----%>
HTML注释
<!----html注释内容---->
拓展:
JAVA注释
多行注释:/*-----*/
单行注释://
2.6 JSP指令标记
2.6.1 page指令
page指令的作用对整个JSP页面有效,与其书写位置无关,习惯性把page指令放在JSP页面的最前面
//一个page指令指定一个属性的值
<%@ page 属性1="属性1的值" %>
.....
<%@ page 属性n="属性n的值" %>
//一个page指令指定多个属性的值
<%@ page 属性1="属性1的值",属性2="属性2的值" ..... %>
a.contentType属性
contentType属性确定JSP页面响应的MIME类型,属性值的一般形式是:"MIME类型"
<%@ page contentType="text/html" %>
// contentType属性的默认值为"text/html"
如果希望用户的浏览器启用本地的MS-Word应用程序来解析执行收到的消息,就可以如下设置
<%@ page contentType="application/msword" %>
注意:一个页面不允许两次使用page指令给contentType属性指定不同的属性值
b.pageEncoding属性:
pageEncoding属性的默认值是UTF-8,是告诉我们tomcat服务器的解析器用怎样的编码去解析JSP页面的字符(目的是为了防止乱码)
<% page pageEncoding="utf-8" %>
注意:一个页面不允许两次使用page指令给pageEncoding属性指定不同的属性值
c.language属性
language属性定义JSP页面使用的脚本语言,该属性的值目前只能去"java"(默认的page指令)
<% page language="java" %>
d.import属性
该属性的作用是为JSP页面引入Java运行环境提供的包中的类,这样就可以在JSP页面的程序片部分、变量及方法定义部分以及表达式部分使用包中的类,可以为该属性指定多个值。
<%@ page import="java.io.*","java.time.LocalDate"%>
e.session属性
session属性用于设置是否需要使用内置的session对象。session的属性值可以是true或false,默认为true。
f.buffer属性
内置输出流对象out负责将服务器的某种信息或运行结果发送到用户端显示。
buffer属性用来指定out设置的缓冲区大小或不使用缓冲区。
<%@ page buffer="24kb"%> //指定out的缓冲区大小为24kb
g.autoFlush属性
autoFlush属性指定out的缓冲区被填满时,缓冲区是否会自动刷新。autoFlush可以取值true或者false,默认值为true。
h.isThreadSafe属性
isThreadSafe属性用来设置访问JSP页面是否是线程安全的。isThreadSafe的属性值可取true或false,默认值为true。
I.info属性
info属性的属性值是一个字符串,其目的时为JSP页面准备一个常用但可能要经常修改的字符串。
比如:<%@ page info="we are students" %>
可以在JSP页面中使用这个方法来获取info属性的属性值
getServletInfo();
现在我们来看一下例子:
<%@ page info="清华大学图像tsinghua.jpg" %>
<% String s=getServletInfo();
//利用方法来获得info属性的字符串
String str[]=s.split("图像");
//利用split()这个方法,是指从图像这个地方分割,并且把图像删除
%>
2.6.2 include指令标记
1.如果需要JSP页面内某处整体嵌入一个文件,可以考虑include指令标记,要注意的是这个标记是静态的。
2.所谓的静态嵌入,就是把当前的JSP页面和嵌入的文件合成一个新的JSP页面,然后Tomca服务器再将新的JSP页面转译成java文件
3.要注意一个页面不允许两次使用page指令给contentType属性指定不同的属性值
现在利用超链接将example2_10.a.jsp插进ok.txt
//ok.txt
<%@ page contentType="text/html" %>
<A href="example2_10_a.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>
2.7 JSP动作标记
2.7.1 include动作标记
<jsp:include page ="文件的URL"/>
或者
<jsp:include page ="文件的URL">
param 子标记
</jsp:include>
注意:
1.当include动作标记不需要param子标记时,必须使用第一种形式。书写时需要注意<jsp:include 中间不要有空格
2.include动作标记是动态的,它是通过告诉java编译器,文件在JSP运行时才会包含进来。(如果是普通的文件,则交由用户端的浏览器负责显示),如果是JSP文件,就由Tomcat服务器执行这个文件。
2.7.2 param动作标记
1. param标记以"名字-值"对的形式为其他标记提供附加信息,param标记不能独立使用,须作为jsp:include , jsp:forward标记的子标记来使用。
2.param是将它所标记的参数值传递到include动作标记要加载的文件中去,被加载的JSP文件可以使用Tomcat服务器提供的request 内置对象获取include
格式为:
<jsp:param name="参数"value="参数的值"/>
2.7.3 forward动作标记
forward动作标记的语法格式是:
<jsp:forward page ="要转向的页面"/>
或者
<jsp:forward page ="要转向的页面URL">
param 子标记
</jsp:forward>
该指令的作用是:从该指令处停止当前页面的执行,从而转向page属性指定的JSP页面,需要注意的是,当forward动作标记不需要param子标记时,必须使用第一种形式。