JSP相关知识

1、 JSP运行机制

 

JSP容器管理JSP页面生命周期的两个阶段:转换阶段(translation phase)和执行阶段(execution phase)。当有一个对JSP页面的客户请求到来时,JSP容器检验JSP页面的语法是否正确,将JSP页面转换为Servlet源文件,然后调用javac工具类编译Servlet源文件生成字节码文件,这一阶段是转换阶段。接下来,Servlet容器加载转换后的Servlet类,实例化一个对象处理客户端的请求,在请求处理完成后,响应对象被JSP容器接收,容器将HTML格式的响应信息发送到客户端,这一阶段是执行阶段。

如果只想编译JSP页面而不是执行它,那么可以在对JSP页面的请求中附加jsp_precompile参数,并将该参数设为true。例如:http://localhost:8080/ch/hello.jsp?jsp_precompile=true,这将编译hello.jsp页面,而不会执行它,也就是说,在客户端你不会看到hello.jsp的输出。所有以jsp_开头的请求参数都是被保留的,JSP页面应该忽略以jsp_开头的请求参数。

在tomcat中jsp页面会被编译到%CATALINA_HOME%\work\Catalina\localhost目录中。

 

2、 JSP页面标签

如果没有JSP标签,web页面仅仅是普通的HTML。JSP标签能够将java代码插入到web页面中以简化数据的处理和显示。

JSP标签有两种基本类型:脚本标签和JSP保留关键字标签。脚本标签为用户提供了使用任何种类java代码的自由,JSP的保留关键字标签则是JSP库所提供的特殊的语言特征。

 

3、 JSP基本指令和动作

JSP基本指令

Jsp命令指令用来设置与整个jsp页面相关的属性,它并不直接产生任何可见的输出,而只是告诉引擎如何处理其余jsp页面。其一般语法形式为:<%@ 指令名称 属性=“值”%>。

三种命令指令分别是page、include、taglib

一、page指令

功能:设定整个jsp网页的静态属性。

语法:<%@ page 标签元素=“值”%>,比如:<% page language=”java” %>

标签元素:language、import、contentType、session、errorPage、isErrorPage等等。

1、  language

language=”language” 指定JSP Container要用什么语言来编译JSP网页。目前只可以使用java语言,不过不排除增加其他语言。默认值为Java。比如:<%@page language=”java”%>

2、  import

import=”importList” 定义此JSP页面可以使用哪些Java API。用逗号分隔列出一个或多个全值类名。以下是自动包含的,不必被指出:java.lang.*;java.servlet.*;java.servlet.jsp.*;java.servlet.http.*; 比如<%@page import=”java.util.*”%>

3、  contentType

contentType=”ctinfo” 表示将生成servlet中使用的MIME类型和可选字符解码。比如<%@ page contentType=”text/html;charset=GBK”%>

4、  session

session=”true|false” 指明JSP页面是否需要一个HTTP会话,如果为true,那么产生的servlet将包含创建一个HTTP会话(或访问一个HTTP会话)的代码。缺省为true。

5、  errorPage

errorPage=”error_url” 表示如果发生异常错误,网页会被重新指向一个URL页面。错误页面必须在其page指令元素中指定isErrorPage=”true”

6、  isErrorPage

isErrorPage=”true|false” 如果此页面被用作处理异常错误的页面,则为true。在这种情况下,页面可被指定为另一页面page指令元素中errorPage属性的取值。指定此属性为true将使exception隐含变量对此页面可用。缺省值为false。

 

二、include指令

功能:include指令用来向当前页面插入一个静态文件的内容。这个文件可以是JSP、HTML、文本或是java程序。

语法:<%@ include file=”filename” %> 比如<%@ include file=”111.txt” %>

标签元素:file

注意:include指令元素和行为元素主要有两个方面的不同点。

1、  include指令是静态包含,执行时间是在编译阶段执行,引入的内容为静态文要,在编译成servlet时就和包含者融合到一起。所以file不能是一个变量,也不能在file后接任何参数。

2、  include行为是动态包含,执行时间是在请求阶段执行,引入的内容在执行页面是动态生成再包含到页面中。

3、  <%@ include file=”filename” %> 如果直接以文件名开头,指的是正在使用的JSP文件所在的路径,如果以/开头,指的是正在使用的JSP文件上下的路径关系。

 

三、taglib指令

功能:使用标签库定义新的自定义标签,在JSP页面中启用定制行为。

当页面引用了用户自定义标签时,taglib指令用于引用自定义标签库,并指定标签的前缀。

语法:<%@ taglib uri=”URIToTagLibrary” prefix=”tagPrefix”%>

如<%@ taglib uri=http://www.jspcentral.com/tags prefix=”JAXP”%>
标签元素:uri、Prefixpage指令元素的属性

Uri=”tagLibraryUri” 标签库描述器的URI,主要是说是tagLibrary的存放位置。

Prefix=”tagPrefix” 用于标识在页面后面部分使用定制标签的唯一前缀。

         JSP基本动作

         JSP中的动作元素包括:include、forwar、useBean、getProperty、setProperty、plugin、param。

1、  include动作

<jsp:include>标签用来包含一个静态或者动态的文件。

2、  forward动作

<jsp:forward>标签用来重定向一个静态HTML、jsp文件或者是一个程序段。

3、  useBean动作

<jsp:useBean>标签用来在JSP页面中创建一个Bean实例,并指定其名称和作用范围。

4、  getProperty动作

<jsp:getProterty>标签用来获取Bean的属性值(在此之前必须用<jsp:useBean>创建它),并将之转化为一个字符串,然后将其插入到输出的页面中。

5、  setProperty动作

<jsp:setProperty>标签表示用来设置Bean中的属性值。

6、  plugin动作

<jsp:plugin>标签用于在浏览器中播放或显示一个对象(典型为applet和Bean),这种显示需要在浏览器上安装Java插件。当JSP文件被编译后送往浏览器时,<jsp:plugin>元素将会根据浏览器的版本替换成<object>或者<embed>元素。

7、  param动作

<jsp:param>标签用来传递参数,必须与forward、include及plugin动作配合使用。

 

4、 JSP内置对象

1、request        请求对象        类型ServletRequest     作用域request

2、response       相应对象        类型ServletResponse    作用域Page

3、pageContext    页面上下文对象  类型PageContext       作用域Page

4、session         会话对象       类型HttpSession        作用域Session

5、application      应用程序对象   类型ServletContext      作用域Application

6、out            输出对象       类型JspWriter           作用域Page

7、config          配置对象       类型ServletConfig        作用域Page

8、page           页面对象       类型Object             作用域Page

9、exception       例外对象       类型Throwable          作用域Page

application作用域就是服务器启动到关闭的整段时间,在这个作用域内设置的信息可以被所有应用程序使用。application作用域上的信息传递是通过ServletContext实现的.

session作用域比较容易理解,同一浏览器对服务器进行多次访问,在这多次访问之间传递信息,就是session作用域的体现,

 一个HTTP请求的处理可能需要多个Servlet合作,而这几个Servlet之间可以通过某种方式传递信息,但这个信息在请求结束后就无效了。Servlet之间的信息共享是通过HttpServletRequest接口的两个方法  来实现的。

page对象的作用范围仅限于用户请求的当前页面,对于page对象的引用将在响应返回给客户端之后被释放,或者在请求被转发到其他地方后被释放。对page对象的引用通常存储在pageContext对象中。

posted @ 2016-07-31 13:05  东方印象  阅读(209)  评论(0编辑  收藏  举报