深入体验JavaWeb开发内幕——pageContext对象与JSP中标签的简介和相关应用

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

 

         下面,我们就来看一看这个在JSP中占有重要地位的隐式对象pageContent吧。

    

        一、pageConten

              之所以说它最重要,是因为在JSP中它可以随意调用其它几大隐式对象。PageContent只需通过这些方法如:

               getException方法返回exception隐式对象

 

                   getPage方法返回page隐式对象

 

                    getRequest方法返回request隐式对象

 

                 getResponse方法返回response隐式对象

 

                 getServletConfig方法返回config隐式对象

 

                      getServletContext方法返回application隐式对象

 

                         getSession方法返回session隐式对象

 

                           getOut方法返回out隐式对象

 

              就可以很快地完成对其他隐式对象的调用了。那么,为什么要规定一个可以封装其他八点隐式对象的PageContent对象呢?

  

 我们可以这样设想,我们在当前的JSP页面中很可能会用到许多个隐式对象,那么当在自定义的方法中,我们就必须向方法中传递相应的隐式对象作为参数,那么这样一来操   作  就十分不方便了,而PageContent恰好帮助我们解决了这一问题,因为,我们只需要将一个PageContent对象传递进去便可以根据需要产生出人意的隐式对象,以供使用。

 

      PageContent除了可以作为其他隐式对象的调用者之外,其自身也作为一个重要的域对象,也有一些自己的方法。

            如:

              pageContext对象的方法 

              

[java]  view plain  copy
  1. public void setAttribute(java.lang.String name,java.lang.Object value)  
  2.   
  3. public java.lang.Object getAttribute(java.lang.String name)  
  4.   
  5. public void removeAttribute(java.lang.String name)  

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

                

[java]  view plain  copy
  1. public java.lang.Object getAttribute(java.lang.String name,int scope)  
  2. public void setAttribute(java.lang.String name, java.lang.Object value,int scope)  
  3. public void removeAttribute(java.lang.String name,int scope)  

        

            代表各个域的常量

                 

[java]  view plain  copy
  1. PageContext.APPLICATION_SCOPE  
  2. PageContext.SESSION_SCOPE  
  3. PageContext.REQUEST_SCOPE  
  4. PageContext.PAGE_SCOPE   

           

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

 

引入和跳转到其他资源

  

   PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和include方法。

  

  例:include方法测试

   主代码:

                
[java]  view plain  copy
  1.       PageContextInclude.jsp  
  2.   <body>  
  3. <%pageContext.include("/PageContextInclude1.jsp");%>  
  4.    这里是PageContextInclude测试! <br>  
  5. <%pageContext.include("/PageContextInclude2.jsp");%>  
  6.  </body>  

[java]  view plain  copy
  1. PageContextInclude1.jsp  
  2.   <body>  
  3.      这里是动态包含头!<br/>  
  4.   </body>  

   
[java]  view plain  copy
  1. PageContextInclude2.jsp  
  2.   <body>  
  3.     这里是动态包含尾!<br>  
  4.   </body>  

     

   效果如图:

          

   

     forward方法测试:

              主要代码:

                

[java]  view plain  copy
  1. <body>  
  2.   <%  
  3.     pageContext.forward("/PageContextForward1.jsp");  
  4.    %>  
  5.    这里是PageContextForward测试!<br>  
  6.   </body>  

          PageContextForward1.jsp主代码:

                

[java]  view plain  copy
  1. <body>  
  2. PageContextForward1动态转发! <br>  
  3. </body>  

     效果如图:

                     

      注意:

               

            方法接收的资源如果以“/”开头, “/”代表当前web应用。
      
       二、JSP中的标签
                  
                  
                 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。
        

          关于JSP的常用标签

                   <jsp:include>标签 

                <jsp:forward>标签 

                    <jsp:param>标签 

 

    <jsp:include>标签

    

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

 

   语法:

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

 

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

 

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

 

    <jsp:include>与include指令的比较

      

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

 

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

 

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

 

             我们来看一看关于它们的具体应用:

                     

             Include指令: 

                     IncludeCommand.jsp主要的代码:

                            
[java]  view plain  copy
  1.  <body>  
  2.  <%@include file="IncludeHead.jsp" %>  
  3.   这是一个include指令实现!<br>  
  4.   <%@include file="IncludeFoot.jsp" %>  
  5. </body>  

[java]  view plain  copy
  1. IncludeHead.jsp  
  2.  <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  3.    我是头! <br>  

[java]  view plain  copy
  1. IncludeFoot.jsp  
  2.  <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  3.   我是尾! <br>  

       效果如图:

       
       
           
                DElementInclude.jsp主代码:
                       
[java]  view plain  copy
  1. <body>  
  2.    <%request.setCharacterEncoding("utf-8"); %>  
  3.    
  4.  <jsp:include page="/Include.jsp">  
  5.     <jsp:param value="十年" name="pass"/>  
  6.  </jsp:include>  
  7.   这里是Include的测试! <br>  
  8.  </body>  

        Include.jsp主代码:
             
[java]  view plain  copy
  1.  <body>  
  2.  <%=request.getParameter("pass") %>  
  3. Include! <br>  
  4.  </body>  

    效果如图:
       

       <jsp:forward>标签
                
             
              <jsp:forward>标签用于把请求转发给另外一个资源。
       语法:
        <jsp:forward page="relativeURL | <%=expression%>" />
           page属性用于指定请求转发到的资源的相对路径,它也可以通过执行一个表达式来获得。
     
     forward标签测试:
          DElement.jsp主代码:
      
[java]  view plain  copy
  1. <body>  
  2. 这里是JSP动作元素测试!<br/>  
  3. <%request.setCharacterEncoding("utf-8"); %>  
  4. <jsp:forward page="/Forward.jsp">  
  5.   <jsp:param value="lijizh" name="name"/>  
  6. </jsp:forward>  
  7. </body>  

     Forward.jsp
   
[java]  view plain  copy
  1. <body>  
  2.   
  3. <%=request.getParameter("name") %>  
  4. </body>  

    效果如图:
       
     

 <jsp:param>标签
             

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

 

语法1

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

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

</jsp:include>

 

语法2

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

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

</jsp:include>

 

<jsp:param>标签的name属性用于指定参数名,value属性用于指定参数值。在<jsp:include>和<jsp:forward>标签中可以使用多个<jsp:param>标签来传递多个参数。

     

         注意:

               <jsp:param>标签一般不单独使用,而是结合<jsp:include>和<jsp:forward>标签使用。

      <jsp:param>实例:
             
               DElement.jsp主代码:
      
[java]  view plain  copy
  1. <body>  
  2. 这里是JSP动作元素测试!<br/>  
  3. <%request.setCharacterEncoding("utf-8"); %>  
  4. <jsp:forward page="/Forward.jsp">  
  5.   <jsp:param value="lijizh" name="name"/>  
  6. </jsp:forward>  
  7. </body>  

     Forward.jsp
   
[java]  view plain  copy
  1. <body>  
  2.   
  3. <%=request.getParameter("name") %>  
  4. </body>  

        关于JSP中的相关知识是比较松散的,掌握起来不是很容易,但是它是非常重要的,因此,初学者应当多加练习,熟练掌握每一个知识点。
      
               OK,到这里吧!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值