JSP
一、概述
Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计。
二、执行过程
JSP基础知识_第1张图片
三、JSP文件结构及主要标签

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.*“ %>
...

  
其他 HTML 语言
<%
  符合JAVA 语法的 JAVA 语句
%>

  其他 HTML 语言

  

四、内置对象
1、request
request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
2、response
response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。
3、session
(1)session:从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。
(2)session对象的ID:当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户端,存放在Cookie中,这样session对象和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再分配给客户新的session对象,直到客户关闭浏览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。
(3)session对象存在一定时间过期问题,所以存在session中的名值对会在一定时间后失去,可以通过更改session有效时间来避免这种情况。同时编程时尽量避免将大量有效信息存储在session中,request是一个不错的替代对象。
4、application
(1)概述:
服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。
(2)application对象常用方法:
a、public void setAttribute(String key,Object obj): 将参数Object指定的对象obj添加到application对象中,并为添加的对象指定一个索引关键字。
b、public Object getAttribute(String key): 获取application对象中含有关键字的对象。
5、out
out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
6、page
page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。
7、config
config 对象的主要作用是取得服务器的配置信息。通过 pageContext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
8、exception
java.lang.Throwable 的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page 的isErrorPage 属性为true 时,该对象才可以使用。常用的方法有getMessage()和printStackTrace()等。
9、pageContext
pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

五、JSP语法概述

JSP原始代码中包含了JSP元素和Template(模板) data两类 ,
Template data指的是JSP引擎不处理的部分,即标记<%……%>以外的部分,例如代码中的HTML的内容等 ,这些数据会直接传送到客户端的浏览器
JSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JSP语法,否则会导致编译错误。
JSP语法分为三种不同的类型
1、编译器指令(DIRECTIVE) 例如: <%@ page import=“java.io.*” %>
编译器指令包括“包含指令”, “页指令”和“taglib指令”
它们包含在“<%@ %>”卷标里。
两个主要的指令是page与include。
(1)包含指令
include指令:向当前页中插入一个静态文件的内容。
JSP 语法格式如下:<%@ include file="relativeURL" %> 或<%@ include file="相对位置" %>
(2)页指令
“Page”指令用于定义JSP文件中的全局属性。
JSP 语法格式如下:

<%@ page 
[ language="java" ] 
[ extends="package.class" ] 
[import="{package.class | package.*},..." ] 
[ session="true | false" ] 
[ buffer="none | 8kb | sizekb" ] 
[ autoFlush="true | false" ] 
 [ isThreadSafe="true | false" ] 
 [ info="text" ] 
 [ errorPage="relativeURL" ] 
[ contentType="mimeType 
    [;charset=characterSet]" | "text/html
    ; charset=ISO-8859-1" ] 
[ isErrorPage="true | false" ] 
%> 

属性:
a.language="java"
声明脚本语言的种类,目前只能用"java" 。
b.import="{package.class | package. },..."
需要导入的Java包的列表,这些包作用于程序段,表达式,以及声明。下面的包在JSP编译时已经导入了,所以就不需要再指明了:
java.lang.
javax.servlet. javax.servlet.jsp. javax.servlet.http.*
c.errorPage="relativeURL"
设置处理异常事件的JSP文件。
d.isErrorPage="true | false"
设置此页是否为出错页,如果被设置为true,你就能使用exception对象
“<%@ page %>”指令作用于整个JSP页面,同样包括静态的包含文件。但是“<%@ page %>”指令不能作用于动态的包含文件,比如 “”。
可以在一个页面中用上多个“<%@ page %>”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Language,import语句引入得是Java语言中的类),所以此属性就能多用几次。
(4)taglib指令
JSP语法
<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>
用于引入定制标签库
属性
a.uri="URIToTagLibrary"
Uniform Resource Identifier (URI)根据标签的前缀对自定义的标签进行唯一的命名,URI可以是以下的内容:
Uniform Resource Locator (URL), 由 RFC 2396 定义, 可以从以下位置查看 (http://www.hut.fi/u /jkorpela/rfc/2396/full.html)。
 Uniform Resource Name (URN), 由 RFC 2396定义 一个相对或绝对的路径 可以是标签库描述文件。
b.prefix="tagPrefix"
表示标签在JSP中的名称。
在自定义标签之前的前缀,比如,在中的public,如果这里不写public,那么这就是不合法的。请不要用jsp, jspx, java, javax, servlet, sun, 和sunw做为你的前缀,这些已被Sun公司声明保留。
2、脚本语法(SCRIPTING)
(1)“HTML注释”:
JSP 语法格式如下:


这种注释发送到客户端,但不直接显示,在源代码中可以查看到。
(2)“隐藏注释”:<%-- comments --%>
JSP 语法格式: <%-- 注释 --%>
 不发送到客户端。
(3)“声明”<%!声明%>
JSP 语法格式如下:<%! declaration; [ declaration; ] ... %> 或<%! 声明; [声明; ] ... %>
(4)“表达式”<%=表达式%>
用于在页面上输出信息,语法格式如下:<%= expression %> 或<%= 表达式 %>
(5)“脚本段”<% 代码 %>
JSP 语法格式如下:<% code fragment %> 或<% 代码 %>
3、动作语法(ACTION) 例如:
动作语法包括
(1)
JSP 语法格式如下:
a."} />
b."} >

[]

(“[]”指可以有多个“”标记。)
属性:
a、page="{relativeURL | <%= expression %>}"
这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL。这个文件可以是JSP,程序段,或者其它能够处理request对象的文件(如asp,cgi,php)。
b.
向一个动态文件发送一个或多个参数,这个文件必须是动态文件。如果想传递多个参数,可以在一个JSP文件中使用多个“”;“name”指定参数名,“value”指定参数值。
注意:
”标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。“”标签以后的代码,将不能执行。
(2)
包含一个静态或动态文件.
 JSP 语法格式如下:
a.
b.

[]

(“[]”指可以有多个“”标记。)
属性:
a.page="{relativeURL | <%=expression %>}"
参数为一相对路径,或者是代表相对路径的表达式。
b.flush="true"
这里必须使用flush="true",不能使用false值。而缺省值为false 。 
(3)
创建一个Bean实例并指定它的名字和作用范围。
 JSP 语法格式如下:

 | 
            > other elements 
        } 

属性
a.id="beanInstanceName"
在所定义的范围中确认Bean的变量,使之能在后面的程序中使用此变量名来分辨不同的Bean ,这个变量名对大小写敏感,必须符合所使用的脚本语言的规定,这个规定在Java Language 规范已经写明。如果Bean已经在别的“”标记中创建,则当使用这个已经创建过Bean时,id的值必须与原来的那个id值一致;否则则意味着创建了同一个类的两个不同的对象。 
b.scope="page | request | session | application"
Bean存在的范围以及id变量名的有效范围。缺省值是page,以下是详细说明:
page - 能在包含“”元素的JSP文件以及此文件中的所有静态包含文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。
request - 在任何执行相同请求的Jsp文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。能够使用Request对象访问这个Bean,比如request.getAttribute(beanInstanceName)。
session - 从创建Bean开始,就能在任何使用相同session的jsp文件中使用这个Bean。这个Bean存在于整个Session生存周期内,任何在分享此Session的Jsp文件都能使用同一Bean。注意在创建这个Bean的Jsp文件中“<% @ page %>”指令中必须指定“session="true"”。
application - 从创建Bean开始,就能在任何使用相同application的Jsp文件中使用Bean。这个Bean存在于整个application生存周期内,任何在分享此application的Jsp文件都能使用同一Bean.
c.beanName="{package.class | <%= expression %>}" type="package.class"
使用java.beans.Beans.instantiate方法来从一个class或串行化的模板中实例化一个Bean,同时指定Bean的类型。 Beans.instantiate方法将检查此名称是否表示一个类或一个串行化模板。如果这个Bean是被串行化的,那么Beans.instantiate方法将通过使用一个类装载器读取串行化格式(类似package.class.ser)。
beanName可以是package和class,也可以是表达式,它的值会传给Beans.instantiate方法。type的值可以和Bean相同,也可以是它的基类,或者是它所实现的接口。  package和 class 名字区分大小写。
(4)
JSP 语法格式如下:

 属性:
a.name="beanInstanceName" bean的名字,由指定。
b.property="propertyName" 所指定的Bean的属性名。
(5)
设置Bean的属性值.
 JSP 语法格式如下:

a.name="beanInstanceName"
表示已经在“”中创建的Bean实例的名字。
b.property="*"
储存用户在jsp输入的所有值,用于匹配Bean中的属性。