1、在传统的HTML页面文件中加入Java程序片和JSP标记就构成了一个JSP页面。
JSP页面有五种元素组成:
2、转载于:https://www.cnblogs.com/friendan/archive/2012/05/13/2838181.html
一个JSP页面由两部分组成:
一部分是JSP页面的静态部分,如HTML,CSS标记等,用来完成数据显示和样式。
一部分是JSP页面的动态部分,如脚本程序,JSP标签等,用来完成数据处理。
JSP页面动态部分包括4部,分别为:
脚本元素(ScriptingElement) //脚本元素用来嵌入Java代码;
指令(Directive) //JSP指令用来从整体上控制Servlet的结构;
动作(Action) //动作用来引入现有的组件或者控制JSP引擎的行为。
注释
JSP页面构成元素详细信息如下图:
1、在“<%!” 和 “%>”标记符号之间声明变量和定义方法。其内容可放于JSP页面指令之后 HTML标签之前或放于HTML标签之间。
“<%!” “%>”标记符号之间声明的变量作为类的成员变量,这些变量占用的内存空间直到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>
结果如下:
启动tomcat运行这个JSP文件时,会发现当我们不断刷新页面时count的值会不断增加而i的值始终不变,也就是说定义在<%! %>内的变量会累加,而定义在<% %>内的变量不会累加。
2、定义方法和类
可以在“<%!” 和 “%>”标记符号之间定义方法,可在Java程序片中调用该方法。
可以在“<%!” 和 “%>”标记符号之间定义类,可在Java程序片中使用该类创建对象。
例:在“<%!” 和 “%>”之间定义了 multi(int x,int y)和div(int x,int y)两个方法,同时定义类一个Circle类,在程序片中使用该类创建对象,计算了圆的面积。
<%@ page contentType= "text/html" %>
<%@ page pageEncoding= "utf-8" %>
< HTML>
<%! double multi(double x, double y){//定义方法
return x*y;
}
double div(double x, double y) {//定义方法
return x/y;
}
class Circle{//定义类
double t;
double getArea(){
return 3.141526*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>
在JSP中,在"<% %>"之间书写的程序代码称为Java程序片,并且可以在其中插入HTML语句。
一个JSP页面中可以有多个Java程序片。
但是,在Java程序片中声明的变量在它们所在的JSP页面的所用程序片及表达式中都有效。
在程序片中声明的变量只在页面有效,是局部变量,它在不同的客户访问同一个页面的时,此变量是不能共享的。
但如果是在"<%! %>"之间声明的变量就可以在不同的客户之间共享,其有效范围是整个web应用,在服务器关闭时变量才会被释放.
"<%= %>"可以直接输出变量或表达式的值,变量或表达式的值将作为一个字符串在浏览器中输出。
下面是一个简单的计数器,用于统计当前已访问网站的人数:
<%! int counter=0;
void counterFun(){
counter++;
}
%>
<%counterFun(); %>
网站计数器<br>
你是第<%=counter %>位访问者
反复刷新网页,可以看见counter在不断增加,即使同时打开多个页面counter依旧在依次整体增加
但是,我们将服务器关闭之后再打开,counter又回到了1
可见,计数器变量将在客户间共享,直至服务器关闭!
转载于:http://t.csdn.cn/GsMfa
补充:Java程序执行特点如下图所示:
可以在"<%=“和”%>"之间插入一个可求值得表达式。表达式的值有服务器负责计算,并将计算结果用字符串形式发送到用户端显示。其内容可放于JSP页面指令之后 HTML标签之前或放于HTML标签之间。
1、HTML注释:在标记符号"<!–“和”-- >"之间加入注释内容。
2、JSP注释:在标记符号"<% --“和”-- %>"之间加入注释内容。
<% --注释内容-- %>
page指令用来定义整个JSP页面的一些属性和这些属性的值,属性用单引号或双引号括起来。
可使用多个page指令分别为每个属性指定值。
<%@ page 属性1="属性1的值" %>
<%@ page 属性2="属性2的值" %>
...
<%@ page 属性n="属性n的值" %>
也可以用一个page指令指定多个属性的值。
<%@ page 属性1="属性1的值" 属性2="属性2的值" ... %>
属性:
1、contentType:contentType属性值确定JSP页面响应的MIME类型。属性值一般形式是:
"MIME 类型"
例:用户的浏览器启用HTML解析器来解析执行所收到的信息。
<%@ page contenType="text/html" %>
用户的浏览器启用本地的MS-Word应用程序来解析执行所收到的信息。
<%@ page contenType="application/msword" %>
注:contentType默认属性值为"text/html" ,page指令只能为contentType指定一个值,不允许两次使用age指令为contentType指定不同属性的值。
2、其他属性可参考一下转载链接
http://t.csdn.cn/7TANW
http://t.csdn.cn/sle2Q
http://t.csdn.cn/zkang
include指令标记用于把JSP文件,HTML网文文件等文件静态嵌入当前JSP网页中,语法如下:
<%@ include file="文件的URL"%>
动作标记是一种特殊的标记,它影响JSP运行时的功能。
动作标记是将JSP等文件 动态嵌入当前JSP网页中,语法如下:
子标记
动态嵌入就是“先处理后包含”在运行阶段完成对文件嵌入,即在把JSP页面转译为JAVA文件时,并不合并两个页面。
注:书写动作标记
1、jsp:param动作标记,是以”名字 - 值“对的形式为其他标记提供附加信息。
2、jsp:param动作标记的作用
指定某个参数的值,必须和jsp:forward,jsp:include,jsp:plugin 等一起协同使用。
作用:从该指令处停止当前页面,转向执行page属性指定的JSP页面。
语法:
或
param子标记
注:当forward动作标记不需要param子标记时,必须使用第一种情况。
说明:使用forward转向新的页面之后,浏览器的地址栏中显示的仍然是转向前的JSP页面的URL地址。
子标记语法:
使用request.getParameter(“名字”);获取子标记的属性值