zoukankan      html  css  js  c++  java
  • JSP九大内置对象和JSP动作标签

    1.什么是JSP九大内置对象

      在jsp中无需创建就可以直接使用的9个对象,它们是:

      * out(JspWriter):等同于response.getWriter(),用来向客户端发送文本数据;

        >jsp的输出流,用来向客户端响应。

      * config(ServletConfig):对应“真身”中的ServletConfig;---在web.xml文件中配置JSP的信息

      * page(当前JSP的真身类型):当前JSP页面的 “this” ,即当前对象;

         >当前jsp对象!它的引用类型是Object,即真身中有如下代码:Object page  =  this;

      * pageContext(PageContext) :页面上下文对象,它是最后一个没讲的域对象;

         > 1个顶9个!

      * exception(Throwable):只有在错误页面中可以使用这个对象;

      * request(HttpServletRequest):即HttpServletRequest类的对象;

      * response(HttpServletResponse):即HttpServletResponse类的对象;

      * application(ServletContext):即ServletContext类的对象;

      * session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session="false"%>,说明这个页面不能使用session。

      在这9个对象中有很多是极少会被使用的,例如:config、page、exception基本不会使用。

      在这9个对象中有两个对象不是每个JSP页面都可以使用的:exception、session。

      在这9个对象中有很多前面已经学过的对象:out、request、response、application、session、config。

    1).pageContext

      *一个顶九个!

      *Servlet中有三大域,而JSP中有四大域,它就是最后一个域对象!

        >ServletContext:整个应用程序

        >session:整个会话(一个会话中只有一个用户)

        >request:一个请求链!

        >pageContext:一个jsp页面!这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据!

          >域对象:有setAttribute(String name,Object value); setAttribute(String name, Object value,int scope);等方法

          >代理其他域:如pageContext.setAttribute("xxx","XXX",pageContext.SESSION_SCOPE);这个是向session域中保存xxx属性及其值。

          >全域查找:pageContext.findAttribute("xxx");  从小到大(四大域中)查找。

          >获取其他8个内置对象:如:pageContext.getSession()、pageContext.getRequest()。

     2).include--->静态包含

      * <%@include %>:它是在jsp编译成Java文件时完成的!他们共同生成一个Java文件(就是一个servlet),然后在生成一个class文件!

      * RequestDispatcher的include()是一个方法,包含和被包含的是两个servlet,即两个.class文件!他们只是把响应的内容在运行时合并了!

      *(包含)作用:把页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立的jsp,而我们只需要处理变化的页面。

    例:

    hel.jsp:省略了部分代码

      <body>
        <%
            String name="ZhangSan";
         %>
         <%@ include file="lo.jsp" %>
      </body>

    lo.jsp:

    <%
        out.print(name);
     %>
    //只有这三行,然后这两个jsp在编译的时候生成一个java文件

    3).taglib--->导入标签库

      *两个属性:

        >prefix:指定标签库在本页面的前缀!由我们自己来起名称!

        >uri:指定标签库的位置!

        >  例如: <%@taglib prefix="s"  uri="/xxx"%>   前缀的用法:<s:text>

     2.JSP动作标签

      这些jsp的动作标签(一个有20个),与html提供的标签有本质的区别。

      *动作标签是由tomcat(服务器)来解释执行!它与Java代码一样,都是在服务器端执行的!

      *html由浏览器来执行!

      *<jsp: forward>:转发!它与RequestDispatcher的forward方法是一样的,一个是在Servlet中使用,一个是在jsp中使用!

        >使用的效果跟在servlet中一样(留头不留体)。

    /jspforward/a.jsp:

    1   <body>
    2     <h1>a.jsp</h1>
    3     <!--转发-->
    4     <jsp:forward page="b.jsp">
    5     </jsp:forward>
    6   </body>

    /jspforward/b.jsp:

    1 <h1>b.jsp</h1>

    请求之后的结果:在页面上只显示    b.jsp

      *<jsp: include>:包含!它与RequestDispatcher的include方法是一样的,一个是在Servlet中使用,一个是在jsp中使用!

        >  <%@include%>和<jsp: include>有什么不同?

    a.jap:

    1   <body>
    2     <h1>a.jsp</h1>
    3     <jsp:include page="b.jsp"></jsp:include>
    4   </body>

    b.jsp:

    1 <h1>b.jsp</h1>

    在浏览器中请求http://localhost:8080/XJS_JSP/jspinclude/a.jsp结果:

    在服务器的work目录下是两个java文件,两个class文件,本质是方法include的调用,然后实现动态包含。

      *<jsp:param>:它用来作为forward和include的子标签!用来给转发或包含的页面传递参数!

    例如:在动态包含中使用<jsp:param>

    /jspparam/a.jsp:

    1   <body>
    2     <h1>a.jsp</h1>
    3     <jsp:include page="b.jsp">
    4         <jsp:param value="taeyeon" name="uname"/>
    5         <jsp:param value="123" name="pwd"/>
    6     </jsp:include>
    7   </body>

    /jspparam/b.jsp:

    1 <h1>b.jsp</h1>
    2 
    3 <%
    4     String name1=request.getParameter("uname");
    5     String pwd1=request.getParameter("pwd");
    6     
    7     out.print(name1+":"+pwd1);
    8  %>

    请求http://localhost:8080/XJS_JSP/jspparam/a.jsp后的结果:

    证明出,在包含中使用<jsp:param>动作标签,可以在起被包含的页面中获取参数,起到一个传值的效果。


     jsp在tomcat的安装目录下的conf/context.xml中配置

    <Context reloadable="true">加上这个属性之后,再修改jsp页面就不用重启服务器(修改web.xml、Servlet...还得重启服务器),开发阶段可以使用!!!

     在tomcat的安装目录下的conf/web.xml文件中:

    有这些代码

     1     <servlet>
     2         <servlet-name>jsp</servlet-name>
     3         <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
     4         <init-param>
     5             <param-name>fork</param-name>
     6             <param-value>false</param-value>
     7         </init-param>
     8         <init-param>
     9             <param-name>xpoweredBy</param-name>
    10             <param-value>false</param-value>
    11         </init-param>
    12         <load-on-startup>3</load-on-startup>
    13     </servlet>

    对应的servlet-mapping

    1     <servlet-mapping>
    2         <servlet-name>jsp</servlet-name>
    3         <url-pattern>*.jsp</url-pattern>
    4         <url-pattern>*.jspx</url-pattern>
    5     </servlet-mapping>

    所以在请求jsp页面时都是这个servlet在处理,把请求jsp页面生成对应的Java文件(其实就是Servlet),在编译成class文件,在调用其service()方法。

  • 相关阅读:
    IOC基础
    spring ioc原理
    spring ioc原理
    2014年度辛星css教程夏季版第一节
    2014年度辛星html教程夏季版第八节
    2014年度辛星html教程夏季版第七节
    2014年度辛星html教程夏季版第六节
    2014年度辛星html教程夏季版第五节
    2014年度辛星html教程夏季版第四节
    2014年度辛星html教程夏季版第三节
  • 原文地址:https://www.cnblogs.com/xjs1874704478/p/10859224.html
Copyright © 2011-2022 走看看