jsp笔记

JSP 编译指令:
JSP的编译指令是通知JSP引擎的消息的。它本身不直接生成输出。编译指令都会有
默认值。并且不需要再开发过程中,每个都设置。

JSP 三大指令:
1、page: 该指令是针对当前页面的指令
2、include: 用于指定包含另一个页面
3、taglib: 用于定义和访问自定义标签

JSP编译指令语法:
<%@ 属性=属性值  %>

Page指令:
page指令通常位于JSP的头部,注意一个JSP页面可以包含一个或者多个page指令
<%@ page
   [language="Java"]
   [extend="package.class"]
   [import="package.class|package.*|..."]
   [session="true|false"]
   [buffer="none|8KB|..."]
   [autoFlush="true|false"]
   [isThreadSafe="true|false"]
   [info="text"]
   [contentType="mineType;charset="UTF-8"]
   [pageEncoding="ISO-8859-1"]
   [isErrorPage="true|false"]
   [errorPage="error.jsp"]
%>

language: 声明当前JSP页面使用的脚本语言种类,通常是java。默认值也是java。
extends: 指定JSP页面编译所产生Java类所去继承的类。
import: 通常用来导入包。有几个包是默认自动导入的:
java.lang.*,java.servlet.*,java.jsp.*  ...;
session: 设置当前页面是否需要HTTP Session。
buffer: 设置当前的缓存大小。默认值为8KB。可以设置none。
autoFlush: 当前输入缓冲区即将溢出的时候,是否需要抛出一个溢出异常。
info: 设置该JSP页面的信息。
errorPage: 指定错误处理的页面。
isErrorPage: 设置本JSP页面是否需要错误页面。通常情况下是无序指定。
contentType: 用于生成网页的文件格式以及编码。
pageEncoding: 指定生成网页的编码字符集。

include 指令:

使用incluce,可以将一个外部文件包含到JSP文件中,同时解析必要Java语法。注意编译指令
最好引入静态的JSP文件。什么静态引入?一旦使用编译include的静态引入本把引入的JSP融合
成一个页面。因此被包含页面设置不需要是完整的页面。
<%@include file="relativeURLFile" %>

注意:需要指出的是,静态包含还会包含页面中的编译指令,如果
两个页面的编译指令相冲突,程序报错。

JSP 动作指令:
动作指令与编译指令不同,编译指令是通知Servlet引擎去处理消息。
而动作指令只是运行时的动作。编译指令在将JSP编译成Servlet时起作用。
而动作指令通常可替换成JSP脚本。(注意:它只是JSP脚本的标准化写法)

JSP 7个动作指令如下:
1、jsp:forward 执行页面专项,将请求处理转发到下一个页面。
2、jsp:param 用于传递参数,注意:必须和其他支持参数的标签一起使用。
3、jsp:include 用于动态引入一个JSP页面。
4、jsp:plugin 用于下载JavaBean 或者  Applet 到客户端执行。
5、jsp:useBean 创建一个JavaBean的实例。
6、jsp:setProperty: 设置JavaBean 实例的属性值。
7、jsp:getProperty: 输出JavaBean 实例的属性值。

forward指令:
forward指令用于将页面响应转发到另一个页面。注意:forward 既可以转发到静态HTML页面。
页面转发到JSP页面,或者转发给容器中的Servlet。

forward 格式如下:
JSP 1.0之前:
<jsp:forward page="{relativeURL|<%expression%>}"/>
JSP 1.1以上规范语法:
<jsp:forward page="{relativeURL|<%expression>}">
<jsp:param.../>
</jsp:forward>

注意:第二种也就是1.1以上的规范在转发时增加额外的请求参数。
所以请求参数的值,可以通过HttpServletRequest类中的getParameter()方法获取。

注意:1、执行forward请求时,用户请求的地址并没有发生改变。但是页面内容全部改成目标
页面内容。
    2、执行forward指令请求的时候,客户端的请求参数不会丢失。

总结:从表面上看,<jsp:forward .../> 指令给人感觉,它是将用户请求“转发”给另一个页面
。但是实际上,<jsp:forward .../> 并且没有重新向另一个页面发送请求。它是完全采用了
新页面来对用户生成响应。请求依然就只是一次请求。

include指令:
include指令一个动态include指令,也用于包含某个页面。它不会导入被include页面编译指令。
仅仅将被导入页面的body内容插入本页面。

include格式如下:
1、<jsp:include page="relativeURL|<%expression%>" flush="true"/>
2、<jsp:include page="relativeURL|<%expression%>" flush="true">
<jsp:param name="名称" value="值"/>
   </jsp:include>
  
flush属性用于指定输出缓存是否转移到被导入的文件。如果指定为true,则包含在被
导入的文件中,如果指定为false,那么就不包含。

注意,对于第二种写法,需要额外添加参数。

静态导入和动态导入的3点区别:
1、静态导入是将被导入的页面代码的完全融入,两个页面内容完全的在一起形成一个整体,编译。
而动态的其实在Servlet源码只是一句引入的话仅此而已。
2、静态导入时被导入的页面的编译命令会起作用,动态导入则不会有该种问题。
3、动态还可以增加额外的参数。

jsp:forward 和  jsp:include
实际上,jsp:forward和jsp:include动作指令十分相似,这是它们的语法
都是采用特殊的方法去引入目标的页面。通过查看JSP页面所生成Servlet代码可以发现区别。
区别在于:执行forward时,被forward的页面将完全代替原有的页面。
而执行include时,被include的页面只是插入原有的页面。

jsp:useBean指令,jsp:setProperty指令,jsp:getProperty指令:
这三个指令都是与JavaBean相关的指令。其中useBean指令用于JSP页面
初始化Java实例。setProperty指令用于JavaBean实例设置相关属性。
getProperty指令用于JavaBean实例获取相关属性。

使用前提:如果多个JSP页面中需要重复使用某段代码。则可以把
这段代码定义成Java类的方法。然后让多个JSP页面调用该方法。

useBean的语法格式如下:
<jsp:useBean id="name" class="classname" scope="page|request|
session|application"/>
page: 该JavaBean实例仅在该页面有效。
request: 该JavaBean实例仅在请求的时候有效。
session: 该JavaBean实例仅在本次session会话内有效。
application: 该JavaBean实例会一直有效(本应用)。

setProperty指令语法如下:
<jsp:setProperty name="BeanName" property="属性名" value="值"、>
其中name属性需要设置JavaBean实例名。

getProperty指令语法如下:
<jsp:getProperty name="BeanName"  property="属性名" value="值"/>

JSP 隐式对象:
所谓对象,就是在JSP中内置好的对象,就叫隐式对象。
JSP 九大内置对象:
1、application  -- javax.servlet.ServletContext。
该实例代表JSP所属的Web应用本身。
2、config  -- javax.servlet.ServletConfig
该实例代表JSP所属的配置信息。
3、exception -- java.lang.Throwable
该实例代表JSP所属其他页面的异常和错误。
4、page --  代表页面本身。也就是Servlet的this
5、out -- javax.servlet.jsp.JspWriter
该实例代表JSP的输出流
6、pageContext -- javax.servlet.jsp.PageContext
该实例代表页面的上下文
7、request -- javax.servlet.HttpServletRequest
该实例封装一个请求
8、response -- javax.servlet.HttpServletResponse
该实例代表客户端的响应
9、session -- javax.servlet.HttpSession
该实例代表一次会话

application 通过setAttribute方法设置application的某个属性,
该属性值可以作用于整个Web。因此在Web内可以使用getAttribute获取该属性。

需要指出的是:虽然使用application(即Servlet实例)可以方便多个Servlet,多个JSP
共享数据,但不要仅仅为了JSP、Servlet共享数据就将数据放入Application中!由于Application
代表了整个的Web因此,因为只有关于整个Web项目的配置信息,数据才会放入Application

application 还有一个重要的用处:可用于获取Web应用的配置参数。web.xml

注意:通过Web获取配置参数的方式,可以将一些配置信息放在web.xml文件中配置。
避免使用硬编码方式写在代码中,该种方式可以更好的程序的移植性。

config 对象:
config对象代表当前JSP页面的配置信息。但JSP页面通常无须配置。因此也就不存在配置信息。
所以JSP页面比较少用该对象。但是Servlet中则用处相对较大,因为Servelt需要在web.xml
文件中进行配置。

exception 对象:
exception对象是Throwable的实例,代表JSP脚本中产生的错误和异常。是JSP页面异常机制的
一部分。
在JSP脚本中无须处理异常。事实上,JSP脚本包含的所有的可能出现的异常都交给错误页面处理。

注意:exception 对象仅在异常处理页面中有效,通过异常处理结构可以看出。
注意:由于只有JSP脚本,输出表达式才会对应于_jspService()方法里的代码。所以这两个
部分的代码无须关心异常。但是在JSP的声明部分依然需要处理异常。
JSP异常处理机制对JSP的声明不起作用。

注意:在异常处理的页面中,应该在page指令中isErrorPage添加上并且设置为true,
只有该属性设置为true时,才可以访问exception内置对象。



                     

你可能感兴趣的:(jsp)