心得4--JSP标签和其九大隐式对象

1. <jsp:forward>标签的常用用法

用MVC模式编写的程序,客户端传过来的请求要先交给处理器servlet处理,但是一个web应用的首页不能是servlet,因为在配置文件中,欢迎页不能设置成servlet,这时就需要用到jsp了,用jsp的<jsp:forward>的标签跳转到相应的servlet处理。

2.JSP运行原理和九大隐式对象

l     每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。 

l     由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响

l     JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。

l     这9个对象分别是哪些,以及作用也是笔试经常考察的知识点。

简记为:rrppasoce

分别是: Request、Response、Session、Application、Config、Page、Exception、Out、pageContext

3. out隐式对象

l     out隐式对象用于向客户端发送文本数据

l     out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。

l     JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。

l     只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:

ü     设置page指令的buffer属性关闭了out对象的缓存功能  

ü     out对象的缓冲区已满

ü     整个JSP页面结束

l     同时使用out和response.getwriter()输出数据。

4. pageContext对象

l    pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象,可以用来保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。

l    通过pageContext获得其他对象

l     getException方法返回exception隐式对象

l     getPage方法返回page隐式对象

l     getRequest方法返回request隐式对象

l     getResponse方法返回response隐式对象

l     getServletConfig方法返回config隐式对象

l     getServletContext方法返回application隐式对象

l     getSession方法返回session隐式对象

l     getOut方法返回out隐式对象

5.  pageContext作为域对象

l     pageContext对象的方法

ü     public   voidsetAttribute

(java.lang.String name,java.lang.Object value)

ü     public  java.lang.Object getAttribute

(java.lang.String name)

ü     public  void removeAttribute

(java.lang.String name)

l     pageContext对象中还封装了访问其它域的方法

ü     publicjava.lang.Object getAttribute

(java.lang.String name,int scope)

ü     publicvoid setAttribute(java.lang.String name,

java.lang.Object value,int scope)

ü     publicvoid removeAttribute(

java.lang.String name,int scope)

l     代表各个域的常量

ü     PageContext.APPLICATION_SCOPE

ü     PageContext.SESSION_SCOPE

ü     PageContext.REQUEST_SCOPE

ü     PageContext.PAGE_SCOPE

l     findAttribute方法    (*重点,查找各个域中的属性)

l     引入和跳转到其他资源

PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和include方法.方法接收的资源如果以“/”开头, “/”代表当前web应用。

6.JSP标签

JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。

JSP常用标签

l     <jsp:include>标签   插入功能

l     <jsp:forward>标签  跳转

l     <jsp:param>标签    设置获取属性

7.  <jsp:include>标签

<jsp:include>标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入语法

   <jsp:includepage="url | <%=expression%>" flush="true|false" />

ü     page属性用于指定被引入资源的相对路径,它也可以通过执行一个表达式来获得。

ü     flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。 

<jsp:include>与include指令、include()方法的比较

l     <jsp:include>标签和include()方法是动态引入, <jsp:include>标签涉及到的2个JSP页面会被翻译成2个servlet,这2个servlet的内容在执行时进行合并。

l     而include指令是静态引入涉及到的2个JSP页面会被翻译成一个servlet,其内容是在源文件级别进行合并。

l     不管是<jsp:include>标签,还是include指令,它们都会把两个JSP页面内容合并输出,所以这两个页面不要出现重复的HTML全局架构标签,否则输出给客户端的内容将会是一个格式混乱的HTML文档。

8.  <jsp:forward>标签

l     <jsp:forward>标签用于把请求转发给另外一个资源。语法:

   <jsp:forwardpage="relativeURL | <%=expression%>" />

page属性用于指定请求转发到的资源的相对路径(可以是绝对路径),它也可以通过执行一个表达式来获得。

<jsp:param>标签

l     当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其它资源时,可以使用<jsp:param>标签向这个资源传递参数。

l     语法1:

   <jsp:includepage="relativeURL | <%=expression%>">

      <jsp:paramname="parameterName" value="parameterValue|<%= expression%>" />

   </jsp:include>

l     语法2:

   <jsp:forwardpage="relativeURL | <%=expression%>">

      <jsp:paramname="parameterName" value="parameterValue|<%= expression%>" />

   </jsp:include>

l     <jsp:param>标签的name属性用于指定参数名,value属性用于指定参数值。在<jsp:include>和<jsp:forward>标签中可以使用多个<jsp:param>标签来传递多个参数。<jsp:param>标签不能单独使用,必须跟上面两种标签的一种一起用

映射JSP

<servlet>

   <servlet-name>SimpleJspServlet</servlet-name>

   <jsp-file>/jsp/simple.jsp</jsp-file>

   <load-on-startup>1</load-on-startup>

</servlet>

   ……

<servlet-mapping>

   <servlet-name>SimpleJspServlet</servlet-name>

   <url-pattern>/xxx/yyy.html</url-pattern>

</servlet-mapping>

9.  如何查找JSP页面中的错误

l     JSP页面中的JSP语法格式有问题,导致其不能被翻译成Servlet源文件,JSP引擎将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息。

l     JSP页面中的JSP语法格式没有问题,但被翻译成的Servlet源文件中出现了Java语法问题,导致JSP页面翻译成的Servlet源文件不能通过编译,JSP引擎也将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息。

l     JSP页面翻译成的Servlet程序在运行时出现异常,这与普通Java程序的运行时错误完全一样,Java虚拟机将提示错误发生在Servlet源文件中的位置(行和列)以及相关信息。  

l     到此为止,web开发接触到了4个域对象,这4个域对象是学习web的重点,也是笔试经常考察的知识点

l     pageContext(称之为page域)

l     request(称之为request域)

l     session(称之为session域)

l     servletContext(称之为application域)

 

 

 

posted @ 2012-11-09 21:44  yangkai_keven  阅读(191)  评论(0编辑  收藏  举报