JSP基本语法

来源:互联网 发布:假面骑士wizard知乎 编辑:程序博客网 时间:2024/05/20 15:57
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>