您的位置:首页 > 编程语言 > Java开发

Java Web学习(7):JSP基础语法

2016-07-12 13:13 766 查看
一个JSP页面可以被分为以下几部份:

1)静态数据,如HTML;

2)JSP指令,如include指令;

3)JSP脚本元素和变量;

4)JSP动作;

5)用户自定义标签;

一静态数据

静态数据在输入文件中的内容和输出给HTTP响应的内容完全一致。此时,该JSP输入文件会是一个没有内嵌

Java或动作的HTML页面。而且,客户端每次请求都会得到相同的响应内容。

这个静态数据的本质就是HTML文档。

二JSP指令

JSP指令用来设置与整个JSP页面相关的属性。指令可以有很多个属性,它们以键值对的形式存在,并用逗号隔

开。JSP指令控制JSP编译器如何去生成servlet。

JSP中的三种指令标签:



(1)page指令

page指令通常位于JSP页面的顶端,同一个页面可以有多个page指令。需要注意的是在同一个JSP文件中只

有"import"导入页面指令可以被多次使用。

page指令语法格式为:

<%@ page 属性1="属性值" 属性2="属性值1,属性值2"... 属性n="属性值n" %>

page指令的属性有:



page指令使用样例:

<%@ page import="java.util.*" %> //example import导入样例

<%@ page contentType="text/html" %> //example contentType页面类型样例

<%@ page isErrorPage=false %> //example for non error page无错页面样例

<%@ page isThreadSafe=true %> //example for a threadsafe JSP安全线程JSP样例

我们来看一个样例:在JSP页面中输出当前日期

date.jsp页面源码:

<span style="font-family:Microsoft YaHei;font-size:18px;"><%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>date页面</title>
</head>
<body>
<%
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");

String string = sdf.format(date);
out.println(string);
%>
</body>
</html></span>


运行结果:



上面的代码中我们使用page指令分别导入了java.text.SimpleDateFormat和java.util.Date,也是使用page指令

指定当前页面的字符编码格式以及使用的默认脚本语言Java等。



对于更多的page指令,我们深入学习JSP后,会使用得到,逐渐的学习过程就会用到很多的page指令。

(2)include指令

include指令是指将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句。include指令,用来向

当前页面插入一个静态文件的内容。这个文件可以是JSP、HTML、文本或是Java程序。

include指令 示包含指令通知JSP编译器把另外一个文件完全包含入当前文件中。效果就好像被包含文件的内容直

接被粘贴到当前文件中一样。这个功能和C语言预处理器所提供的很类似。被包含文件的扩展名一般都是"jspf"(即

JSPFragment,JSP碎片):

include指令语法格式为:

<%@ include file="somefile.jsp" %>

我们来看一个实例:

我们使用上面显示当前日期的页面date.jsp作为被嵌入的J文件。

测试include指令的include.jsp页面的代码:



测试结果:



深入JSP以后我们会比较include指令和include动作的区别。


(3)taglib指令

taglib指令指的是使用标签库定义新的自定义标签,在JSP页面中启用定制行为。taglib指令是标签库指令描述了

要使用的JSP标签库。该指令需要指定一个前缀prefix(和C++的命名空间很类似)和标签库的描述URI。声明用户使用

自定义的标签,将标签库描述符文件导入到JSP页面。

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。taglib指令引入一个自定义标签集合的

定义,包括库路径、自定义标签。

taglib指令的语法格式为:

<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>

uri属性:定位标签库描述符的位置。唯一标识和前缀相关的标签库描述符,可以使用绝对或相对URL。

tagDir属性:指示前缀将被用于标识在WEV-INF/tags目录下的标签文件。

prefix属性:标签的前缀,区分多个自定义标签。不可以使用保留前缀和空前缀,遵循XML命名空间的命名约定。

这个我目前还没有使用过,不过可以借鉴别人的文章:JSP中使用taglib

三JSP注释

JSP注释主要有两个作用:为代码作注释以及将某段代码注释掉。

在JSP页面包含三种注释:

1)HTML注释:

<!--HTML注释--> //客户端可见,通过查看源代码

2)JSP注释:

<%--JSP注释--%> //客户端不可见,服务器端注释

JSP脚本注释:

//单行注释

/**/多行注释 //客户端不可见,在java语句中:服务器端注释客户端看不到

我们还是在JSP页面演示一下:



结果:



四JSP脚本

JSP脚本是指在JSP页面执行的java代码。

(1)标准脚本变量

以下是永远可用的脚本变量:

out – JSPWriter用来写入响应流的数据

page – Servlet自身

pageContext –一个PageContext实例包括和整个页面相联系的数据,一个给定的HTML页面可以在多个JSP之间

传递。

request –HttpRequest对象

response –HttpResponse对象

session –用于保持客户端与服务器连接的对象

上述的对象变量我们会在以后经常使用到。后续会详细讲解。

(2)脚本元素

有三个基本的脚本元素,作用是使Java代码可以直接插入Servlet。

1)JSP声明

在JSP页面中定义变量或者方法。声明标签在Java Servlet的类体中放入一个变量的定义。静态的数据成员也可以

如此定义。

一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量

和方法然后才能使用它们。

JSP声明语法格式为:<%! Java代码 %>

样例:<%! int serverInstanceVariable = 1; %>

实例:



2)JSP脚本

JSP脚本是指在JSP页面执行的Java代码。在Java Servlet的类的_jspService()方法中放入所包含的语句。

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。

任何文本、HTML标签、JSP元素必须写在脚本程序的外面。

JSP脚本语法格式为:<% Java代码 %>

样例:<% int localStackBasedVariable = 1; out.println(localStackBasedVariable); %>

实例:




3)JSP表达式

JSP表达式是在JSP页面中执行的表达式。在Java Servlet的类中放入待赋值的表达式,表达式注意不能以分号结

尾。

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。由于表达式的值会

被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。表达式元素中可以包含任

何符合Java语言规范的表达式,但是不能使用分号来结束表达式。

JSP表达式语法格式:<%=表达式 %> //注意:表达式不以分号结束

样例:<%= "expanded inline data " + 1 %>

实例:



上述实例的最后浏览器查看结果:



五JSP动作

JSP动作标签使用XML语法结构来控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户去

另一个页面,为Java插件产生相关的HTML等等。

JSP动作是一系列可以调用内建于网络服务器中的功能的XML标签。JSP提供了以下动作:



对于JSP动作,我们在后面会详细的讲解。

六JSP页面的生命周期

(1)JSP页面流程

流程图:



(2)JSP生命周期

jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果有

多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程,每个客户端请求对应一个线程。以多线程方式执行可

以大大降低对系统的资源请求,提高系统的并发量及响应时间。但也要注意多线程的编程带来的同步的问题,由于该

servlet始终驻于内存,所以响应是非常快的。

实例:



结果:



解释:

第一次请求时JSP引擎解析后生成字节码文件时同时执行jspinit()方法:

1)JSP引擎先把该JSP文件转换成一个Java源文件(Servlet),在转换时如果发现JSP文件有任何语法错误,转换过

程将中断,并向服务端和客户端输出出错信息。

2)如果转换成功,JSP引擎用javac把该Java源文件编译成相应的class文件。

3)创建一个该Servlet(JSP页面的转换结果)的实例,该Servlet的jspInit()方法被执行,jspInit()方法在Servlet的生

命周期中只被执行一次。

4)jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果

有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行

可以大大降低对系统的资源需求,提高系统的并发量及响应时间。但不过也应该注意多线程的编程限制,由于该

Servlet始终驻于内存,所以响应是非常快的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: