一、jsp页面基本结构
jsp页面构成:在传统的HTML页面文件中加入Java程序片和JSP标记构成。
一个jsp页面由五种元素组成:
1.普通的HTML标记和Javascript标记
2.JSP标记,如指令标记、动作标记
3.变量和方法声明
4.Java程序片
5.Java表达式
二、 jsp声明
声明变量和定义方法:
一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中, 必须先声明这些变量和方法然后才能使用它们。
1.成员变量
就好比 java中 类里声明成员变量(全局变量)
<%! 变量 %>
2.java程序片
<% jsp程序片 %>
在jsp程序片被定义的变量为局部变量
程序片的执行
示例:
example2_2
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
全局变量i
<%! int i=0; %>
全局变量在局部内自增
<% i++; %>
<p>
刷新后会自增
你是第<%= i %>个访问本站的用户
</p>
</body>
</html>
错误示例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
全局变量i
<%! int i=0; %>
<% i++; %>
局部变量j
<% int j=88; %>
局部变量j不能在全局被使用,报错
<%! out.print(j); %>
<p>
你是第<%= i %>个访问本站的用户
</p>
</body>
</html>
3.定义方法和类
<%! 方法 %>
示例:
example2_3
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
定义x*y方法
<%!
double multi(double x,double y){
return x*y;
}
%>
定义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("调用mulit方法计算x*y<br>");
out.print(multi(x,y));
out.print("<br>调用div方法计算x*y<br>");
out.print(div(x,y));
Circle circle = new Circle();
circle.r=3.6;
out.print("<br>半径是"+circle.r+"的圆面积<br>"+circle.getArea());
%>
</body>
</html>
三、jsp表达式
- 不可以插入语句(表达式后面不能有;)
- “<%= %>”是一个完整的符号,“<%”与“=”之间不能有空格
- 由于表达式的值会被转化成String(字符串的形式),所以可以在一个文本行中使用表达式,也就是说,在编写Jsp页面时,要把Java表达式按普通的文本来使用。
<%= 一个可求值的表达式 %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% int x=12,y=9; %>
<p>
计算表达式x+y+x%y,即<%= x %>+<%= y %>+<%= x %>%<%= y %>的值:
<%= x+y+x%y %>
<% if(x-y>=0){ %>
<br>如果<%= x %>大于<%= y %>,计算<%=x %>-<%=y %>即
<%=x-y %>的平方根:
<%=Math.sqrt(x-y) %>
<% } %>
</p>
</body>
</html>
四、jsp注释
1.JSP注释,注释内容不会被发送至浏览器甚至不会被编译
<%-- 注释 --%>
2.HTML注释,通过浏览器查看网页源代码时可以看见注释内容
< !-- 注释 – >
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--下面是java程序片 --%>
<%
String str ="jsp";
int index=str.lastIndexOf("\\");
str=str.substring(index+1);
%>
<!--下面是java程序片 -->
</body>
</html>
五、jsp指令标记
1.page指令标记
page指令用来定义整个jsp页面的一些属性和这些属性的值,属性值用单引号或双引号括起来。
- 可以用多个page指令分别为每个属性指定值。
<%@page 属性1=“属性1的值” %>
<%@page 属性2=“属性2的值” %>
<%@page 属性3=“属性3的值” %>
…
<%@page 属性n=“属性n的值” %>
- 也可以用一个page指令指定多个属性的值
(一个属性有多个值,用逗号分开。多个属性值,用空格隔开。)
<%@page 属性1=“属性1的值” 属性2=“属性2的值” …%>
- 注意不允许两次给contentType,pageEncoding赋值
例如:
两个page指令
<%@page contentType=“text/html” %>
<%@page pageEncoding=“utf-8” %>
合并成一个page指令
<%@page contentType=“text/html” pageEncoding=“utf-8” %>
下表列出与Page指令相关的属性:
属性 | 描述 |
---|---|
contentType | 指定当前JSP页面的MIME类型和字符编码 |
pageEncoding | 当前页面的编码格式,默认是UTF-8 |
language | 定义JSP页面所用的脚本语言,默认是Java |
import | 导入要使用的Java类 |
session | 指定JSP页面是否使用内置的session对象,属性值默认为true |
buffer | 指定out对象使用缓冲区的大小,默认为8kb,也可以设置“none”,即不使用缓冲区 |
autoFlush | 控制out对象的 缓存区 |
isThreadSafe | 指定对JSP页面的访问是否为线程安全 |
info | 为jsp页面准备一个常用但可能经常修改的字符串 |
getServletInfo()
获取info的属性值
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ page info="0713图像back2.png" %>
<% String s=getServletInfo();
String str[]=s.split("图像");%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<body background="image/<%=str[1] %>">
<p style="font-family:宋体;font-size:36;color:blue">
<br><%=str[0] %>快乐男声
</p>
</body>
</center>
</body>
</html>
2.include指令标记
在jsp页面内某处整体嵌入一个文件
<%@ include file=“文件的url”%>
- 要插入的文件在webapp的一个新建文件夹(example2_10)
<%@ include file=“/example2_10/example2_10_1.jsp” %>
- 要插入的文件在webapp下
<%@ include file=“example2_10_1.jsp” %>
示例:
example2_10_1
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
include 指令标记
</body>
</html>
example2_10_2
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="/example2_10/example2_10_1.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
六、jsp动作标记
1.include动作标记
jsp页面动态包含一个文件,即jsp页面运行时才将文件加入。
语法格式:
<jsp:include page=“文件的URL”/>
或
<jsp:include page=“文件的URL”>
param子标记
</jsp:include>
注意
不使用param子标记时,必须使用第一种形式
include指令标记与include动作标记的区别
- include指令标记,在编译阶段就处理所需要的文件,被处理的文件在逻辑和语法上依赖与当前的jsp页面,优点是,页面的执行速度快。
- include动作标记,在jsp运行时处理文件,被处理的文件在逻辑和语法上独立于jsp页面。可以使用param动作子标记灵活处理所需要的文件,缺点是,执行速度相对与include指令标记要慢一些。
2.param动作标记
param标记以“名字-值”对的形式为其他标记提供附加信息,param标记不能独立使用,必须作为jsp:include,jsp:forward标记的子标记来使用。
param动作标记的语法格式是:
<jsp:param name=“参数” value “参数的值”/ >
示例:
example2_11_1
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% double a=6.2,b=7.08,c=9.22; %>
计算三边为<%= a %>,<%= b %>,<%= c %>的三角形面积=
<jsp:include page="/example2_11/example2_11_2.jsp">
<jsp:param name="sideA" value="<%= a %>"/>
<jsp:param name="sideB" value="<%= b %>"/>
<jsp:param name="sideC" value="<%= c %>"/>
</jsp:include>
</body>
</html>
example2_11_2
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
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);
%>
<%! public String getArea(double a,double b,double c){
if(a+b>c&&a+c>b&&b+c>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("不能构成三角形");
}
}
%>
<%= getArea(a,b,c) %>
</body>
</html>
3.forward动作标记
从该指令处停止当前页面的执行,而转向执行page属性指定的JSP页面。
forward动作标记的语法格式是:
<>jsp:forward page=“要转向的页面”/>
或
<>jsp:forward page=“要转向的页面”>
param子标记
</jsp:forwarf>
示例:
example2_12
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:forward page="example2_12_1.jsp">
<jsp:param name="number1" value="number1"/>
</jsp:forward>
</body>
</html>
example2_12_1
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% String s=request.getParameter("number1");
out.println(s);
%>
</body>
</html>