JSP基础(二)JSP语法概述
JSP语法概述
JSP原始代码中包含了JSP元素和Template(模板)data两类。
Template data指的是JSP引擎不处理的部分,即标记<%...%>以外的部分,例如代码中的HTML的内容等,这些数据会直接传送到客户端的浏览器。
JSP元素则是指将由JSP引擎直接处理的部分,即标记<%...%>以内的部分,这一部分必须符合Java语法,否则会导致编译错误。
JSP语法
JSP语法分为三种不同的类型:
1.编译器指令(DIRECTIVE)
编译器指令包括“包含指令”“页指令”和“taglib指令”,它们包含在<%@ %>卷标里。
两个主要的指令是page与include。
Page指令用于定义JSP文件中的全局属性。
Page指令作用于整个JSP页面,同样包括静态的包含文件,但是不能作用于动态的包含文件。
可以在一个页面中用上多个Page指令,但是其中的属性只能用一次,但是import属性是个例外,可以用多次。
无论Page指令放在哪里,它的作用范围都是整个JSP页面,为了可读性,最好还是放在文件顶部。
比如:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
import属性用于导入包,多个包可以用逗号隔开,也可以多次写page指令,导入不同的包。
包含指令:
include指令:向当前页中插入一个静态文件的内容。
JSP语法格式如下:
<%@ include file="relativeURL" %>
<%@ include file="相对位置" %>
taglib指令
语法:
<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>
用于引入定制标签库。
2.脚本语法(SCRIPTING)
脚本语法包括:
1.HTML注释:<!-- comments -->
2.隐藏注释(JSP注释):<%-- comments --%>
3.声明;
4.表达式;
5.脚本段;
HTML注释会发送到客户端(浏览器查看源代码可见),但是隐藏注释(JSP注释)不会发送到客户端,仅在JSP的源文件里有;两种注释都不会显示在页面上。
<!-- 这是HTML注释: 页面不可见,但查看源文件可见 -->
<!-- 下面这是一个表达式: (服务器会计算出表达式的值,放在HTML注释中)-->
<!-- <%= new java.util.Date() %>-->
<%-- 这是JSP注释:页面不可见,查看源文件也不可见 --%>
<%-- new java.util.Date()--%>
JSP声明语法格式如下:
<%! declaration; [declaration;]...%>
<%! 声明; [声明;]...%>
引入一个声明的例子:
用声明的方式定义一个变量a,用脚本段的方式定义一个变量b,输出a和b的值并且递减。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is my JSP page. —— 圣骑士Wind
<%= new java.util.Date().toLocaleString() %>
<br>
<!-- 这是HTML注释: 页面不可见,但查看源文件可见 -->
<!-- 下面这是一个表达式: (服务器会计算出表达式的值,放在HTML注释中)-->
<!-- <%= new java.util.Date() %>-->
<%-- 这是JSP注释:页面不可见,查看源文件也不可见 --%>
<%-- new java.util.Date()--%>
<!-- 声明 -->
<!-- 声明的方式 -->
<%! int a = 3; %>
<!-- 脚本段的方式 -->
<% int b = 3; %>
<!-- 输出a和b的值 -->
<%= a-- %><br>
<%= b-- %>
<!-- 每次刷新页面,a的值会递减,b的值不变 -->
</body>
</html>
每次刷新页面,可以看到a的值递减,但是b的值仍然保持为3。
为什么呢?
可以查看生成的Servlet代码,a在JSP中是声明,生成的Servlet,即Java代码中,a被转换成成员变量;
b在JSP中是脚本段,生成的Servlet代码中,b是方法的局部变量。
Servlet是单实例的,所以多次访问时访问的都是同一个对象,成员变量a是同一个,而b,每次都会生成新的。
声明很少用,通常用脚本段。
因为多个用户访问时,需要互不影响,脚本段中的值是局部变量,每个用户访问的时候各有一份;成员变量的值只有一个,每个用户都会访问到它。
表达式:
表达式用于在页面上输出信息,语法格式如下:
<%= expression %>
<%= 表达式 %>
脚本段:
<% code fragment %>
<% 代码 %>
其中代码是任何符合语法要求的Java代码。
3.动作语法(ACTION)
动作语法包括:
<jsp:forward> 该指令用于转向页面,在该指令后面的所有代码都没有机会执行了,因为页面的流程已经转向了另外一个页面。
<jsp:include> 包含一个静态或动态文件,可以向被包含的文件传递参数。
<jsp:getProperty>
<jsp:setProperty>
<jsp:useBean>
作业:
frist.jsp;
<body>
<form action="two.jsp" >
行:<input type="text" name="hang"> 列:<input type="text" name="lie">
<input type="submit" value="submit" >
</form>
</body>
two.jsp
<body> <table border="1" width="80%"> <% int value=0; for(int i = 0 ;i < Integer.parseInt(request.getParameter("hang"));i++ ) { %> <tr> <% for(int j = 0 ;j < Integer.parseInt(request.getParameter("lie"));j++) { %> <td><%=value++ %></td> <% } %> </tr> <% } %> </table> </body>
参考资料
圣思园张龙老师视频教程。