【JavaWeb】JSP基础
JSP是什么
- JSP(Java Server Pages)一种新的动态网页技术标准,在传统的网页HTML文件中加入Java程序片段和JSP标签,构成了JSP 网页。
- Servlet/JSP Container 收到客户端发出的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式响应给客户端。
- 程序片段可以是:操作数据库、重新定向网页以及发送 E-Mail 等等,所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,与客户端的浏览器无关,因此,JSP 称为服务器端语言。
JSP运行原理:转译和请求
JSP语法
(一)变量的声明
JSP中声明变量放在“<%!”和“%>”标记符号之间,变量的类型可以是Java语言允许的任何数据类型,我们将这些变量称为JSP 页面的成员变量。
“<%!”和“%>”之间声明的变量在整个JSP 页面内都有效,这些变量作为类的成员变量存在,其内存空间直到服务器关闭才释放。
当多个客户请求一个JSP页面时,JSP 引擎为每个客户启动一个线程,这些线程共享JSP 页面的成员变量,因此任何一个用户对JSP页面成员变量操作的结果,都会影响到其他用户。
<%! int a=100; %>
(二)方法的声明
JSP中声明方法同样放在“<%!”和“%>”标记之间,被声明的方法在整个JSP 页面有效,但是该方法内定义的变量只在该方法内有效。这些方法将在Java 程序片中被调用,当某一方法被调用时,方法内定义的变量被分配内存,调用完毕即可释放所占的内存。
<%! void function(){
a++;
return a;
} %>
同理,可对类进行声明
(三)Java程序片段
可以在“<%”和“%>”之间插入Java 程序片段。一个JSP 页面可以有许多程序片段,这些程序片将被JSP 引擎按顺序执行。
一个程序片中声明的变量称做JSP 页面的局部变量,它们在JSP 页面内的所有程序片部分以及表达式部分内都有效。可以将一个程序片分割成几个更小的程序片,然后在这些小的程序片之间再插入JSP 页面的一些其它标记元素。
当多个客户请求一个JSP 页面时,JSP 引擎为每个客户启动一个线程,一个客户的局部变量和另一个客户的局部变量被分配不同的内存空间。因此,一个客户对JSP 页面局部变量操作结果不会影响到其它客户的这个局部变量。
<% for(int a = 0;a<100;a++)
{ %>
<p>循环输出标签</p>
<% } %>
(四)表达式
可以在“<%=”和“%>”之间插入一个表达式,这个表达式必须能求值。表达式的值由服务器负责计算,并将计算结果用字符串形式发送到客户端显示。
<%= 1+1 %>
(五)注释
HTML注释
<!-- 注释内容 -->
jsp注释
<%-- 注释内容 --%>
JSP指令元素/指令标识
(一)page指令:用来导入指定的类,自定义 Servlet 的超类等
page 指令是JSP页面最常用的指令,用于定义整个JSP页面的相关属性,这些属性在JSP被服务器解析成Servlet时会转换为相应的Java程序代码。 page 指令的语法格式如下:
<%@ page 属性1=″属性值1″ 属性2=″属性值2″ %>
page 指令提供了language、contentType、pageEncoding、import、autoFlush、buffer、errorPage、extends、info、isELIgnored、isErrorPage、isThreadSafe、session共13个属性,实际编程中并不用一一列出。
language属性:设置JSP页面使用的语言,目前只支持Java语言,暂时不支持其他语言。
<%@ page language=″java″ %>
import属性:用于设置JSP页面导入的类包。
<%@ page import=″java.util.*″ %>
pageEncoding属性:用于定义JSP页面的编码格式,也就是指定文件编码。
<%@ page pageEncoding=″GBK″ %>
contentType属性:用于设置JSP页面的MIME类型和字符编码,浏览器会据此显示网页内容。
<%@ page contentType=″text/html; charset=GBK″ %>
session属性:用于指定JSP页面是否使用HTTP的session会话对象,默认值为true,即可以使用session会话对象。
<%@ page session=″false″ %>
(二)include指令,用来在 JSP 文件转换成 Servle t时引入其他文件
<%@ include file="relative url" %>
这里所指定的URL是和发出引用指令的JSP页面相对的URL,包含文件的内容也是JSP代码,即静态HTML、脚本元素、JSP指令和动作等。
由于include指令是在JSP转换成Servlet的时候引入文件,因此如果导航条改变了,所有使用该导航条的JSP页面都必须重新转换成Servlet。
(三)taglib指令,用来声明该页面所使用的标签库
JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。自定义标签库也称为JSP标签库,可看成是一种通过JavaBean生成基于XML的脚本的方法。
Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。Taglib指令的语法:
<%@ taglib uri="uri" prefix="prefixOfTag" %>
uri属性确定标签库的位置,prefix属性指定标签库的前缀。
JSP动作标签/动作标识
动作标签是一种特殊的标签,它影响JSP运行时的功能。动作指令与编译指令不间,编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的脚本动作。编译指令在将JSP编译成Servlet时起作用,动作指令通常可替换成Java脚本,是JSP脚本的标准化写法。
JSP动作标签包括7个,分别是jsp:include、jsp:forward、jsp:param、jsp:useBean、jsp:setProperty、jsp:getProperty和jsp:plugin。
include动作指令
- <jsp:include >标签表示包含一个静态的或者动态的文件。include动作标签的语法如下:
<jsp:include page=”path”/ >
该动作标签告诉JSP页面动态包含一个文件,即JSP 页面运行时才将文件加入。与静态插入文件的include 指令标签不同,当JSP引擎把JSP页面转译成Java文件时,不把JSP页面中动作指令include所包含的文件与原JSP页面合并一个新的JSP 页面,而是告诉Java解释器,这个文件在JSP 运行时才包含进来。如果包含的文件是普通的文本文件,就将文件的内容发送到客户端,由客户端负责显示;如果包含的文件是Jsp文件,JSP引擎就执行这个文件,然后将执行的结果发送到客户端,并由客户端负责显示这些结果。
-
<%@include%>:页面请求之前预编译,所有代码包含进来之后,一起进行处理,把所有代码合在一起,编译成一个servlet。
-
<jsp:include >:所有代码分别处理,在页面被请求的时候才编译,被编译成多个servlet,页面语法相对独立,处理完成之后再将代码的显示结果(处理结果)组合进来.
forward 动作指令
<jsp:forward > 标签表示重定向一个静态html/jsp文件,或者是一个程序段。Forwar动作标签语法如下:
<jsp:forward page="path" />
<!-- 或者 -->
<jsp:forward page="path" >
<jsp:param name="paramName" value="paramValue"/>
</jsp:forward>
param动作指令
param标签以“名字/值”对的形式为其它标签提供附加信息,这个标签与jsp:include、jsp:forward、jsp:plugin标签一起使用。param 动作标签格式如下:
<jsp:param name="paramName" value="paramValue"/>
当该标签与jsp:include标签一起使用时,可以将param标签中的值传递到include指令要加载的文件中去,因此include动作标签如果结合param标签,可以在加载文件的过程中向该文件提供信息。
useBean动作指令
useBean动作指令包含:<jsp:useBean >、<jsp:getProperty >和<jsp:setProperty >。<jsp:useBean >标签用于在JSP页面中创建一个Bean实例并指定它的名字以及作用范围。
<jsp:getProperty >标签表示获取Bean的属性的值并将之转化为一个字符串,然后将其插人到输出的页面中。
<jsp:setProperty >标签表示用来设置Bean中的属性值。
我们用HTML完成JSP 页面的静态部分,用JavaBeans完成动态部分,实现真正意义上的静态和动态分割。
plugin动作指令
在页面中使用普通的HTML标记可以让客户下载运行一个Java Applet小应用程序,但并不是所有的客户的浏览器都支持Java Apple小程序,而使用plugin动作标签可以保证客户能执行你的小应用程序。该动作标签指示JSP 页面加载Java plugin,该插件由客户负责下载,并使用该插件来运行Java Applet。plugin动作标签目前不常用。