JSP基本语法

JSP页面就是带有JSP元素的一个常规Web页面,它由模版文本和JSP元素组成。在JSP页面中,所有非JSP元素的内容为模版文本。模版文本可以是任何文本,如HTML、XML。甚至可以是纯文本。
JSP有3种类型的元素,它们分别为:脚本元素,指令元素和动作元素。具体各种元素包含的内容如下图16-9所示:

JSP语法树

1 脚本元素

    脚本元素允许用户将小段的代码添加到JSP页面中,例如,可以在加入一个条件判断语句,用来根据具体情况产生不同的HTML代码。脚本元素在页面被请求时执行。JSP脚本包括脚本、表达式、声明和注释。

1.1 JSP脚本

    所谓脚本代码,就是JSP中的脚本小程序,在这个部分中几乎可以使用任何的Java语法。所以,JSP脚本又可称为Java程序片。一个JSP页面上可以拥有一个或多个程序片,这些程序片将被JSP引擎按顺序执行。在程序片中声明的变量称作JSP页面的局部变量。局部变量的有效范围与其声明的位置有关,即局部变量在JSP页面后继的所有程序片以及表达式部分内都有效。
    【语法】
    <% JSP脚本 %>,即在“<%”和“%>”的内部使用。

【示例】条件判断语句

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>使用脚本小程序</title>
</head>
<body>
    <%
        int a = 10; //定义局部变量
        int b = 5; //定义局部变量
        if (a > b) { //使用if条件语句判断大小
            out.println(a);
        } else {
            out.println(b);
        }
    %>

</body>
</html>

程序运行结果

1.2 表达式

    JSP中的表达式可以看成一种简单的输出形式,但有一点需要注意的是,表达式一定是一个可以输出的值。
    【语法】
    <%=  表达式 %>

【示例】表达式

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP表达式</title>
</head>
<body>
        <%
        String name = "张三"; //定义局部变量
        int age = 25; //定义局部变量
    %>
    <h3>name=<%=name %></h3>   <%--使用表达式输出变量,并用<h3>标签设置字体格式 --%>
    <h3>age=<%=age %></h3>     <%--使用表达式输出变量,并用<h3>标签设置字体格式--%>
    <h3>sex=<%="男" %></h3>     <%--使用表达式输出变量,并用<h3>标签设置字体格式--%>


</body>
</html>

程序运行结果

1.3 JSP声明

使用此声明语法可以在内部定义全局变量、方法、类
【语法】
<%!  %>

【示例】JSP声明

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>定义全局变量</title>
</head>
<body>
    <%!public String name = "张三";//定义全局变量%>
    <%!public int add(int x, int y) {//定义方法
        return x + y;
    }%>
    <%!class Student {//定义实体类Student
        private int id;
        private String name;
        private int age;

        public Student(int id, String name, int age) {//有参构造
            this.id = id;
            this.name = name;
            this.age = age;
        }

        public String toString() {//重写toString()方法
            return "id=" + this.id + ",name=" + this.name + ",age=" + this.age;
        }
    }%>
    <%
        out.println("<h3>name=" + name + "<h3>");//输出全局变量name
        out.println("<h3>3+5=" + add(3, 5) + "<h3>");//调用方法add(int x,int y)
        out.println("<h3>" + new Student(1, "李四", 30) + "<h3>");//生成Student对象
    %>

</body>
</html>
本程序分别在<%!%>中定义了全局变量、方法和类,但是因为在<%!%>中不能出现任何其他语句,所以又编写了一个普通的<%%>用于输出变量、调用方法和输出对象等操作。

程序运行结果

值得注意的是,虽然可以在<%!%>中定义类或者方法,但是从开发的角度讲,这是不恰当的,当JSP需要类或者方法的时候,往往会通过JavaBean的形式调用。   

1.4 JSP注释

在JSP中有两种注释的语法操作,一种是显式注释,这种注释客户端通过在网页中查看源代码是可以查看到的。一种是隐式注释,这种注释客户端无法看到。
【语法】
(1)显式注释
    <!—注释内容-->
(2)隐式注释
    //格式一:注释单行
    /*格式二:注释多行*/
    <%--格式三: JSP注释--%>

【示例】注释页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>注释</title>
</head>
<body>
    <!—显示注释,客户端通过查看源码可以看到-->
    <%--JSP注释--%>
    <%
        //java中提供的单行注释客户端无法看见
        /*
         Java中提供的多行注释,客户端无法看见
         */
    %>
</body>
</html>

程序运行结果

2 指令元素

2.1 page指令

page指令在JSP编程中尤为重要,使用此属性可以定义一个JSP页面的相关属性,在一个JSP页面中可以给出多个page指令,下面是page的几种常用的属性配置
(1)import属性:等同于java中的import语句,作用是导入操作包在一个JSP页面中可以设置多个import属性。
(2)pageEncoding属性:指定当前页面的编码,如果pageEncoding没有指定,那么默认为contentType的值;如果pageEncoding和contentType都没有指定,那么默认值为iso-8859-1。
(3)contentType:等同与调用response.setContentType("text/html;charset=xxx"); 如果没有指定contentType属性,那么默认为pageEncoding的值;如果contentType和pageEncoding都没有指定,那么默认值为iso-8859-1。
(4)errorPage:如果当前页面出现异常,那么跳转到errorPage指定的jsp页面。

2.2 include指令

include指令的作用是包含指定的页面。在jsp被编译成java文件之前会把两个jsp文件合并,然后再编译成一个java文件。这种特性有助于创建可重用的导航栏、联系人部分、页面计数等公共页面的显示部分。比如说,可能有多个页面都需要用到某个标题页面,这时就可以把这个公共的标题页面使用include指令包含进来就可以使用了。
【语法】
<%@include file="页面"%>

【示例】include指令

index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>include指令</title>
</head>
<body>
    <%@include file="top.jsp"%><!-- 使用include指令包含top.jsp页面 -->
    <hr><!-- hr标签可以输出一条水平分割线 -->
    <h3>我是主界面的内容</h3>
</body>
</html>
top.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>我是被包含的部分</h3>
</body>
</html>
程序运行结果如下图所示

程序运行结果

2.3 taglib指令

【语法】
<%@ taglib prefix="" uri=" " %>

【示例】

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
taglib指令是用来在当前jsp页面中导入第三方的标签库。JSP标准标签库(JSP Standard Tag Library)是一个开放源代码的标签组件,是由Apache公司开发的,使用标签库可以避免过多的JAVA程序嵌套在JSP中而导致的代码混乱不易维护。在指令中prefix用来指定标签前缀,可以根据需要进行起名,uri是指定第三方标签库的uri(唯一标识)。使用第三方标签库的前提是,需要把第三方标签库所需要的jar包导入到所在的项目中。

3 动作元素

3.1 include动作

此动作标记在用户请求时包含文件(动态包含),程序运行过程是包含与被包含的文件各自编译,当用户请求页面时,才动态的包含其他文件。
【语法】
<jsp:include page=”被包含的页面名字” flush="false"></jsp:include>

【示例】include动作标记

include.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
    <%
        out.print("我是被包含的内容");
    %>
</body>
</html>
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>include动作标记</title>
</head>
<body>
    <h1>包含页面</h1>
    <jsp:include page="include.jsp" flush="true"></jsp:include>
</body>
</html>

运行结果

此时读者会发现这个功能与之前讲的include指令元素很相似,两者的区别如下:
(1)include指令执行速度相对较快,灵活性较差(只编译一个文件,但是一旦有一个文件发生变化,两个文件都要重新编译);
(2)include动作执行速度相对较慢,灵活性较高。

3.2 forward动作标记

forward动作标记主要用作跳转页面,但是地址栏不会发生改变,这种跳转称为服务器端跳转,用来转发带请求的数据。
【语法】
<jsp:forward page="要跳转的页面名称"></jsp:forward>

【示例】forward动作标记

index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>服务器跳转</title>
</head>
<body>
<jsp:forward page="forward.jsp"></jsp:forward>
</body>
</html>
forward.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>跳转后的页面</title>
</head>
<body>
<h3>我是跳转后的界面</h3>
</body>
</html>
程序运行后会发现页面转发到了forward.jsp页面,但是地址栏并没有发生改变。

运行结果

3.3 param动作标记

此动作标记主要是传递参数,一般和include和forward动作标记联合使用,需要注意的是,当和include动作联合使用时, 主页面不能访问被包含页面的参数,但被包含的页面可以访问主页面的参数。
【语法】
<jsp:param name="参数名" value="参数值"></jsp:param>

【示例】param动作标记

index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>param传递参数</title>
</head>
<body>
    <h1>包含页面</h1>
    <jsp:include page="include.jsp" flush="true">
        <jsp:param value="zhangsan" name="username" />
    </jsp:include>
</body>
</html>
include.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
    <%
        String name = request.getParameter("username");//获取主页面传来的值
        out.print("我是被包含的内容,并从包含我的页面中传来个了值:" + name);
    %>
</body>
</html>
以上两段代码与include动作标记的例子相似,只不过这里通过param标签传了一个值给被包含的页面,程序运行结果如图所示:

运行结果

3.4 useBean动作标记

useBean主要是创建一个Bean实例并指定它的名字和作用范围,对于一个JavaBean,简单的说,它是一个Java类,这个类可以重复地使用。它必须是一个public类,具有公有的不带参数的构造方法,每个属性必须定义一组getXXX()和setXXX()方法, 以便读取和存储其属性值。
【语法】
<jsp:useBean id=" Bean唯一标识" class=" Bean所在位置" scope="范围"></jsp:useBean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值