Java Web学习(7):JSP基础语法
2016-07-12 13:13
766 查看
一个JSP页面可以被分为以下几部份:
1)静态数据,如HTML;
2)JSP指令,如include指令;
3)JSP脚本元素和变量;
4)JSP动作;
5)用户自定义标签;
Java或动作的HTML页面。而且,客户端每次请求都会得到相同的响应内容。
这个静态数据的本质就是HTML文档。
开。JSP指令控制JSP编译器如何去生成servlet。
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页面源码:
运行结果:
上面的代码中我们使用page指令分别导入了java.text.SimpleDateFormat和java.util.Date,也是使用page指令
指定当前页面的字符编码格式以及使用的默认脚本语言Java等。
对于更多的page指令,我们深入学习JSP后,会使用得到,逐渐的学习过程就会用到很多的page指令。
当前页面插入一个静态文件的内容。这个文件可以是JSP、HTML、文本或是Java程序。
include指令 示包含指令通知JSP编译器把另外一个文件完全包含入当前文件中。效果就好像被包含文件的内容直
接被粘贴到当前文件中一样。这个功能和C语言预处理器所提供的很类似。被包含文件的扩展名一般都是"jspf"(即
JSPFragment,JSP碎片):
include指令语法格式为:
<%@ include file="somefile.jsp" %>
我们来看一个实例:
我们使用上面显示当前日期的页面date.jsp作为被嵌入的J文件。
测试include指令的include.jsp页面的代码:
测试结果:
深入JSP以后我们会比较include指令和include动作的区别。
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页面包含三种注释:
1)HTML注释:
<!--HTML注释--> //客户端可见,通过查看源代码
2)JSP注释:
<%--JSP注释--%> //客户端不可见,服务器端注释
JSP脚本注释:
//单行注释
/**/多行注释 //客户端不可见,在java语句中:服务器端注释客户端看不到
我们还是在JSP页面演示一下:
结果:
out – JSPWriter用来写入响应流的数据
page – Servlet自身
pageContext –一个PageContext实例包括和整个页面相联系的数据,一个给定的HTML页面可以在多个JSP之间
传递。
request –HttpRequest对象
response –HttpResponse对象
session –用于保持客户端与服务器连接的对象
上述的对象变量我们会在以后经常使用到。后续会详细讲解。
如此定义。
一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量
和方法然后才能使用它们。
JSP声明语法格式为:<%! Java代码 %>
样例:<%! int serverInstanceVariable = 1; %>
实例:
脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。
任何文本、HTML标签、JSP元素必须写在脚本程序的外面。
JSP脚本语法格式为:<% Java代码 %>
样例:<% int localStackBasedVariable = 1; out.println(localStackBasedVariable); %>
实例:
JSP表达式是在JSP页面中执行的表达式。在Java Servlet的类中放入待赋值的表达式,表达式注意不能以分号结
尾。
一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。由于表达式的值会
被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。表达式元素中可以包含任
何符合Java语言规范的表达式,但是不能使用分号来结束表达式。
JSP表达式语法格式:<%=表达式 %> //注意:表达式不以分号结束
样例:<%= "expanded inline data " + 1 %>
实例:
上述实例的最后浏览器查看结果:
另一个页面,为Java插件产生相关的HTML等等。
JSP动作是一系列可以调用内建于网络服务器中的功能的XML标签。JSP提供了以下动作:
对于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始终驻于内存,所以响应是非常快的。
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始终驻于内存,所以响应是非常快的。
相关文章推荐
- TestNG入门笔记[1] : 在Eclipse上安装TestNG
- 1.2 Java的竞争对手及各自优势
- JDK的安装与配置
- Java基础
- JavaWeb中MVC模型的演变
- 二、八、十、十六进制之间的转换
- javaweb项目多浏览器支持打印
- 69 个经典 Spring 面试题及答案
- POI操作Excel常用方法总结
- fragmentTransaction.replace无法全屏的问题
- [转载]Java数组扩容算法及Java对它的应用
- 重装jdk1.8出现如下错误Error opening registry key'software\Javasoft\Java Runtime Environment'
- Intellij Idea 下如何像eclipse的自动缩进来保持代码整洁性
- java学习总结(16.07.12)java的内部类
- SpringMVC与ssm的整合
- 跳台阶问题分析整理
- java 添加水印 清除水印
- 使用Eclipse从数据库逆向生成实体类
- Java并发编程:深入剖析ThreadLocal
- eclipse使用git