目录
前言
学习JSP语法是了解JSP页面的基本,jsp语法更是学习jsp的入门。 本篇文章主要对jsp页面的基本结构、如何在jsp页面中声明一个变量和方法、java程序片、java表达式、jsp中的注释、jsp指令标记以及jsp动作标记进行简单的介绍和实例。
2.1 JSP页面的基本结构
在传统的html页面文件中加入java程序片和jsp标记就构成了一个jsp页面。 JSP的主要构建为:
- java程序片
- java表达式
- jsp中的注释
- jsp指令标记
- jsp动作标记
示例:在下列代码中,详细的表示了上述结构:
<%@ 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>
代码运行结果:
tips:由于本章重点讲述JSP的内容,因此默认读者初步了解HTML语言
2.2 声明变量与方法
(1) 主要格式为:
<%! 内容 %>
(2) 声明变量
<%! %>之间声明的变量在整个JSP页面内都有效,与它在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>
结果:
(3) 定义方法与类
定义方法与类时,可以在<%! %>中定义,也可以在java程序片中定义,这里是用第一种方法来定义该方法与类
代码如下(示例):
<%@ 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>
结果:
tips: <%! %> 标签声明的标量是全局变量,在整个页面都可以使用,无论你在哪儿声明。
2.3 Java程序片
(1) 主要格式为:
<% 内容 %>
(2) 放置位置:
Java程序片可以写在<html>前面,也可以写在<html>与</html>之间,或者是</html>后面
(3) 特点:
当多个用户请求一个JSP页面时,tomcat服务器为每个用户启动启动了一个线程,该线程负责执行这些字节码文件响应用户的请求.tomcat使用多线程来处理java程序片时,具有以下特点:
- 操作JSP页面的成员变量
- 调用JSP页面的方法
- 操作局部变量
代码如下(示例):
<%@ 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>
tips:在JSP声明的变量为局部变量!!!它的有效范围与位置有关!!!即局部变量在JSP页面后继的所以程序片以及表达式部分内都有效.
2.4 Java表达式
JSP提供了 <%= %> 标记符,用来接收一个表达式或者一个变量的值。
(1) 格式:
<%= 内容 %>
(2) 位置:
与JAVA程序片一样.
代码如下(示例):
<%@ 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>
tips:在该表达式中%和=之间不能有空格,即不可插入其他字符,否则会出错。需要注意的是,在JSP页面中,表达式的值被表达成一个字符串的形式,即tomcat服务器将表达式的结果转化成字符串,然后发送给用户的浏览器。
2.5 JSP中注释
在一个JSP页面中,注释可以增强JSP页面的可读性,使JSP页面给易于维护
(1) 格式:
- html注释
- 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>
tips:tomcat服务器忽视JSP注释,即在编译JSP页面是忽略JSP注释
2.6 JSP指令标记
2.6.1page指令标记
<%@page 属性=" 属性值" ...... %>
参考代码:
<%@ 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);
%>
结果:
tips:page 指令标记的作用对整个JSP页面有效,也书写位置无关
2.6.2include指令标记
(1)格式:
<%@ include file = "文件的URL"%>
(2)参考代码:
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>
example2_10_b.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<%@ include file="myfile/ok.txt" %>
<HTML><center><body background="image/tsinghua.jpg">
<bgsound src="sound/tsinghua.mp3" loop="-1">
<h1>这里是清华大学 </h1>
</body></HTML>
2.7 JSP动作标记
2.7.1 include动作标记
<jsp:include page = "文件的URL"/>
书写动作标记时,jsp : include之间不能有空格
2.7.2 param动作标记
<jsp:include name="参数"values="参数的值"/>
参考代码:
<%@ 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>
结果:
2.7.3 forward动作标记
<jsp:forward page = "要转向的页面"/>
参考代码:
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<HTML><body>
<h1> 产生一个1-10之间的随机数
<% double i=(int)(Math.random()*10)+1;
if(i<=5) {
%> <jsp:forward page="example2_12_a.jsp" >
<jsp:param name="number" value="<%= i %>" />
</jsp:forward>
<% }
else {
%> <jsp:forward page="example2_12_b.jsp" >
<jsp:param name="number" value="<%= i %>" />
</jsp:forward>
<% }
%>
</body></HTML>
结果:
2.7.4 useBean动作标记
本内容将在第五章详细讨论,useBean标记用来创建并使用一个JavaBean,是非常重要的一个动作标记。
总结
在本博客中,简单概况了一下JSP页面中的简单语法。即java程序片,表达式,JSP中的注释,以及JSP中的动作标记、指令标记。