深入体验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对象的方法

              

public void setAttribute(java.lang.String name,java.lang.Object value)

public java.lang.Object getAttribute(java.lang.String name)

public void removeAttribute(java.lang.String name)

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

                

public java.lang.Object getAttribute(java.lang.String name,int scope)
public void setAttribute(java.lang.String name, java.lang.Object value,int scope)
public void removeAttribute(java.lang.String name,int scope)


        

            代表各个域的常量

                 

PageContext.APPLICATION_SCOPE
PageContext.SESSION_SCOPE
PageContext.REQUEST_SCOPE
PageContext.PAGE_SCOPE 

           

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

 

引入和跳转到其他资源

  

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

  

  例:include方法测试

   主代码:

                
      PageContextInclude.jsp
  <body>
<%pageContext.include("/PageContextInclude1.jsp");%>
   这里是PageContextInclude测试! <br>
<%pageContext.include("/PageContextInclude2.jsp");%>
 </body>

PageContextInclude1.jsp
  <body>
     这里是动态包含头!<br/>
  </body>

   
PageContextInclude2.jsp
  <body>
    这里是动态包含尾!<br>
  </body>

     

   效果如图:

         

   

     forward方法测试:

              主要代码:

                

<body>
  <%
    pageContext.forward("/PageContextForward1.jsp");
   %>
   这里是PageContextForward测试!<br>
  </body>

          PageContextForward1.jsp主代码:

                

  <body>
  PageContextForward1动态转发! <br>
  </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主要的代码:

                            
  <body>
  <%@include file="IncludeHead.jsp" %>
   这是一个include指令实现!<br>
   <%@include file="IncludeFoot.jsp" %>
 </body>

IncludeHead.jsp
 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
   我是头! <br>

 IncludeFoot.jsp
  <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
   我是尾! <br>

       效果如图:

      
      
          
                DElementInclude.jsp主代码:
                       
 <body>
    <%request.setCharacterEncoding("utf-8"); %>
  
  <jsp:include page="/Include.jsp">
     <jsp:param value="十年" name="pass"/>
  </jsp:include>
   这里是Include的测试! <br>
  </body>

        Include.jsp主代码:
             
  <body>
  <%=request.getParameter("pass") %>
 Include! <br>
  </body>

    效果如图:
      

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

     Forward.jsp
   
  <body>
  
  <%=request.getParameter("name") %>
  </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主代码:
      
  <body>
  这里是JSP动作元素测试!<br/>
  <%request.setCharacterEncoding("utf-8"); %>
  <jsp:forward page="/Forward.jsp">
    <jsp:param value="lijizh" name="name"/>
  </jsp:forward>
  </body>

     Forward.jsp
   
  <body>
  
  <%=request.getParameter("name") %>
  </body>

        关于JSP中的相关知识是比较松散的,掌握起来不是很容易,但是它是非常重要的,因此,初学者应当多加练习,熟练掌握每一个知识点。
     
               OK,到这里吧!



  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值