大数据WEB阶段(十三)JSP(一)JSP基础、JSP指令详解、四大域九大隐式对象总结

JSP基础、指令、四大作用域九大隐式对象总结

(一)JSP基础

一、JSP概述

  1. jsp其实是java动态页面技术
  2. HTML可以用来组织页面但是HTML是一种静态web资源技术无法嵌入动态数据。
  3. Servlet是动态web资源技术 但是本质上是一段java代码 不方便在其中组织页面结构。
  4. 于是jsp技术被提出来 写起来就像在写一个html,但是内部可以嵌入java代码,本质上是一种动态web资源 但是可以直接写html标签 非常便于组织页面结构。
  5. Jsp解决了动态页面开发的问题
  6. 真正开发中 , 往往使用servlet来处理业务逻辑 , 将处理好的结构 带到jsp页面 由jsp页面负责展示。

二、JSP原理

  1. jsp会在第一次被访问时被翻译成一个Servlet , 之后对这个jsp的访问本质上都是这个servlet在执行 。
  2. 所以看见是一个jsp , 但是jsp本质上是一个servlet 。

三、JSP基本组成结构

  1. 模板元素
    1. 直接书写在JSP中的HTML内容 , 看起来就像写HTML一样方便 ,这些HTML内容被称为JSP模板元素
    2. 原理:但是最终会在被翻译成Servlet的过程中以out.write();的形式原样输出到浏览器显示 。
  2. 脚本表达式

    <%= java表达式 %>
    
    1. 在JSP页面中可以通过脚本表达式来将一个java表达式的计算结果输出到页面中展示
    2. 原理:在被翻译成Servlet的过程中 , 直接将计算结果的值用out.write()输出
  3. 脚本片段

    <% 若干java代码 %>
    
    1. 在JSP页面中可以直接通过脚本片段写入一段java代码
    2. 原理: 在<% %>中的内容会被原样翻译到servlet中的对应位置后执行
    3. 注意:在同一个JSP页面中 , 多个脚本片段的情况下 , 后面的可以直接访问之前定义的变量
    4. 注意:在同一JSP页面中 , 多个脚本片段的情况下 , 单个脚本片段的java语法可以不完整 , 但是要保证JSP页面翻译成servlet之后java语法是完整的 。
  4. JSP声明

    <%! %>
    
    1. 通过JSP声明来声明一个全局的变量
    2. 原理: 当JSP被翻译为servlet之后JSP声明中的内容将被放置到与service方法同级的位置 , 成为类的成员 。
  5. JSP注释

    <%-- 注释内容 --%>
    
    1. 可以通过JSP注释将jsp中的部分内容注释掉 , 被注释 的内容将不会被翻译到servlet中 。
    2. 注意区别:

      1. JSP注释中的内容不会被翻译为servlet , 更不会输出到页面中去
      2. JSP脚本片段中的java注释的内容 , 将会被翻译到servlet中 , 但是不会执行

        <%  //被注释的java代码 %>
        
      3. 被html注释注释掉的内容 , 将会被翻译到servlet中 , 并且前后的注释标签被当做模板元素直接输出 , 但是浏览器不会显示 , 而注释中的内容仍然会执行

        JSP代码
        ...
        <% int i  = 100; %>
        <!-- i = 0; -->
        <%=i %>
        ...
        被翻译成servlet之后
        ...
        int i = 100;
        out.write("<!--");
        i = 0;
        out.write("-->");
        out.write(i);
        ...
        结果:
        i 为 0 。
        

(二)JSP指令

一、JSP指令概述

  1. 格式:

    <%@ 指令名 若干属性 %>
    
  2. JSP指令不产生任何直接的输出 , 是用来控制JSP解析引擎如何解析JSP页面中的其他部分内容的

二、指令详解

  1. page指令

    <%@ page .... %>
    
    1. 声明当前JSP的基本属性 , 指挥JSP翻译引擎如何翻译JSP页面中的其他内容为servlet
    2. page指令的属性:

      1. [ language=”java” ] 当前JSP使用的开发语言 , 目前也支持java
      2. [ extends=”package.class” ] 当前jsp翻译成servlet后要继承的类,注意此值必须是一个servlet的子类,一般情况下不要改
      3. !![ import=”{package.class | package.*}, …” ] 导入需要使用到的包

        如:java.lang.*;javax.servlet.*;javax.servlet.jsp.*;javax.servlet.http.*;
        
      4. !![ session=”true | false” ] 用来指定当前页面是否使用session,如果设置为true,则翻译过来的servlet中将会有对session对象的引用,于是可以直接在jsp中使用session隐式对象。但是这将导致一旦访问jsp就会调request.getSession()方法,可能导致不必要的空间浪费。如果确定jsp中不需要session可以设为false
      5. [ buffer=”none | 8kb | sizekb” ] out隐式对象所使用的缓冲区的大小
      6. [ autoFlush=”true | false” ] out隐式对象是否自动刷新缓冲区,默认为true,不需要更改
      7. !![ errorPage=”relative_url” ] 如果页面出错,将要跳转到的页面,除了在jsp中使用此属性指定错误页面外也可以在web.xml中配置整个web应用的错误页面,如果两个都设置则jsp中的此属性起作用
      8. !![ isErrorPage=”true | false” ] 如果设置此属性为true,翻译过来的servlet中将含有Exception隐式对象,其中封装的就是上一个页面中抛出的异常对象
      9. [ contentType=”mimeType [ ;charset=characterSet ]” | “text/html ; charset=ISO-8859-1” ] 和jsp乱码相关的指令,用来指定jsp输出时,设置的Content-Type响应头用来指定浏览器打开的编码
      10. ! pageEncoding="characterSet | ISO-8859-1" ] 服务器翻译jsp时使用的编码集.如果向防止jsp乱码,应该保证文件的保存编码和jsp翻译成servlet用的编码以及输出到浏览器后浏览器打开的编码一致.此属性一旦设置好,翻译引擎会间接帮我们设置content-type属性.![
      11. [ isELIgnored=”true | false” ] 当前页面是否使用el表达式,设置为false时表示启用el,j2ee4.0开始默认支持,j2ee4.0以下做开发时,如果要使用el表达式,需将此属性设置为false
      12. 注意:

        1. 指令中errorPage属性可以为当前页面制定错误提示页面 , 但是如果整个站点的jsp页面都需要配时会很繁琐 , 这时可以在web.xml文件中进行统一配置

          <error-page>
              <exception-type>java.lang.Throwable</exception-type>
              <location>/error/error.jsp</location>
          </error-page>
          <error-page>
              <error-code>404</error-code>
              <location>/error/404.jsp</location>
          </error-page>
          <error-page>
              <error-code>500</error-code>
              <location>/error/500.jsp</location>
          </error-page>
          
        2. 如果配置全局友好错误提示页面 又为某个jsp单独指定过错误提示页面 则单独指定的起作用

  2. include指令

    <%@ include file="xxxx"%>
    
    1. 实现页面包含
  3. taglib指令

    <%@ taglib uri="" prefix=""  %>
    
    1. 引入标签库

(三)四大作用域九大隐式对象总结

一、四大作用域

  1. 域对象: 一个对象具有一个可被看见的范围 , 并且利用该对象上的map可以在整个范围内实现资源的共享
  2. PageContext域

    1. 生命周期 :
      1. 访问JSP页面时创建 , 访问JSP页面结束后销毁
    2. 作用范围
      1. 当前JSP界面
    3. 主要功能

      1. 在当前JSP页面中共享数据 , 在PageContext域中的属性可以被整个页面共享

        设置属性
        setAttribute(String name , Object value);
        获取属性
        getAttribute(String  name);
        移除属性
        removeAttribute(String name);
        
      2. 作为入口对象操作四大作用域中的数据

        向指定域中添加属性
        setAttribute(String name, Object value,int scope)
        获取指定域中的指定属性
        getAttribute(String name,int scope)
        移除制定域中的制定属性
        removeAttribute(String name,int scope)
        
        其pageContext中代表域的常量:
        PageContext.APPLICATION_SCOPE --> ServletContext域
        PageContext.SESSION_SCOPE --> Session域
        PageContext.REQUEST_SCOPE --> Request域
        PageContext.PAGE_SCOPE --> PageContext域
        额外提供了一个便捷的方法:
        //按照由小到大的顺序搜寻四大作用域 , 查找指定名称的属性 , 找到则返回对应的值 , 找不到则返回null
        findAttribute(String  name);
        
      3. 提供了便捷的方法实现请求转发、包含:

        pageContext.forward("/index.jsp");
        pageContext.include("/index.jsp");
        
  3. request域

    1. 详细解析请看 :http://blog.csdn.net/chou_out_man/article/details/78700720 第七部分
    2. 生命周期
      1. 请求开始时创建 , 请求结束时死亡
    3. 作用范围:
      1. 一次请求链
    4. 主要功能:

      1. 在作用范围内共享数据
      2. 域对象提供的方法(可以操作map中的数据)

        setAttribute(String name,Object value) :用来存储一个对象,也可以称之为存储一个域属性
        getAttribute(String name); 用来获取request中的数据
        removeAttribute(String name); 用来移除request中的域属性
        getAttributeNames(); 获取所有域属性的名称
        
  4. Session域
    1. 详细解析请看:http://blog.csdn.net/chou_out_man/article/details/78725938 第三部分
  5. ServletContext域
    1. 详细解析请看:http://blog.csdn.net/chou_out_man/article/details/78705014 第三部分
  6. 四大作用域由小到大排序为: PageContext–>Request–>Session–>ServletContext

二、九大隐式对象

  1. 九大隐式对象概述

    1. 在JSP翻译成servlet时, JSP翻译引擎在翻译过来的servlet中 , 预先定义了一些变量 , 可以不需要再JSP中预先定义就可以直接使用 , 共9个 , 统称为JSP九大隐式对象 。 分别是:

      page --- 由JSP翻译引擎翻译出的Servlet
      config --- ServletConfig 当前servlet的配置信息
      application --- ServletContext 当前web应用
      request --- HttpServletRequest请求
      response --- HttpServletResponse响应
      out --- response.getWriter()得到的输出流 , 可以通过他输出数据
      session --- HttpSession当前会话
      exception --- Excception 如果将isErrorPage设置为true , 才会有一个代表当前页面异常的对象
      pageContext --- 代表当前JSP页面
      
  2. 其中七大对象已经做过详解
    1. page 、request http://blog.csdn.net/chou_out_man/article/details/78700720
    2. application、 config 、 response http://blog.csdn.net/chou_out_man/article/details/78705014
    3. session http://blog.csdn.net/chou_out_man/article/details/78725938
  3. out对象
    1. 可以将他理解成response.getWriter()获得的PrintWriter.
    2. 它自带一个缓冲区,其大小收page指令中的buffer的设定限制。当缓冲区满或缓冲区被关闭或当前jsp页面结束,则此缓冲区中的内容将被刷新到response.getWriter()的缓冲区中。
  4. pageContext对象

    1. 作为入口对象获取其他八大隐式对象

      getException方法返回exception隐式对象 
      getPage方法返回page隐式对象
      getRequest方法返回request隐式对象 
      getResponse方法返回response隐式对象 
      getServletConfig方法返回config隐式对象
      getServletContext方法返回application隐式对象
      getSession方法返回session隐式对象 
      getOut方法返回out隐式对象
      
    2. 获取其他域中的数据

      pageContext操作所有域中属性的方法
              getAttribute(String name,int scope)
              setAttribute(String name, Object value,int scope)
      removeAttribute(String name,int scope)
              其中pageContext中代表域的常量:
                  PageContext.APPLICATION_SCOPE
                  PageContext.SESSION_SCOPE
                  PageContext.REQUEST_SCOPE
                  PageContext.PAGE_SCOPE 
          findAttribute方法:
      在四大域中搜寻属性,搜寻的顺序是page域、request域、session域、application域,从小域到大域开始搜索,如果搜索到就直接获取该值,如果所有域中都找不到,返回一个null
      
    3. 作为域对象使用
    4. 跳转到其他资源
      1. 它的身上提供了forward方法和include方法 。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值