JSP概述

1.1JSP概述

1.1.1 JSP介绍
由sun公司提供的动态web资源的开发技术,看起来非常像html,但是可以在JSP页面中写java代码,所以JSP是一种动态web资源开发技术.

JSP本质上就是一个Servlet!

1.1.2JSP技术的由来
JSP的出现为了解决Servlet在响应时不适合向外输出页面的问题
(1)Servlet本质上是一段java代码,非常适合 处理逻辑,但是处理的结果不太 适合由Servlet向外输出(不适合输出完整的html页面)
(2)Html是用于开发网页的一门技术,可以用来展示数据。但是html开发出来的页面本质上就是一个文档(静态资源),无法展示 动态的数据。
(3)jsp非常适合编写html代码,适合作为响应页面向外输出,同时jsp里可以写java代码,也可以展示动态的数据
(4)jsp在第一次访问时,会被翻译成一个Servlet,对jsp访问后看到的页面,其实就是翻译后的Servlet在向外输出!

1.2JSP语法

1.2.1模版元素

    (1)JSP模版元素 :jsp页面中书写的HTML内容称作JSP的模版元素,在翻译过来的 Servlet 中直接被 out.write() 输出到浏览器页面上了

    (2)JSP表达式 `<%= java表达式 %>`其中可以书写常量,变量,表达式, 在翻译过来的Servlet中,计算java表达式的值后,被out输出到浏览器上

    (3)JSP脚本片断 `<% 若干java语句 %>` 在翻译过来的Servlet中,直接被复制粘贴到了对应的位置执行.
        在一个JSP页面中可以有多个脚本片断,在两个或多个脚本片断之间可以嵌入文本、HTML标记和其他JSP元素
        多个脚本片断中的代码可以相互访问,犹如将所有的代码放在一对`<%%>`之中的情况
        单个脚本片断中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完整的Java语句
    (4)JSP声明  `<%! 若干java语句 %>` 在翻译过来的Servlet中会被放置到和Service方法同级的位置,变成了类的一个成员

    (5)JSP注释 
     `<%-- 注释的内容 --%>` 被jsp注释注释掉的内容,在jsp翻译引擎将jsp翻译成Servlet的过程中会被丢弃,在翻译过来的Servlet中没有这些信息
     `<%//java注释%>` java注释被当作jsp脚本片段被翻译到了Servlet中,在.java文件被翻译成.class文件的时候注释信息被丢弃
     `` html注释被当作模版元素输出到了浏览器上,浏览器认识html注释不予显示

    (6)JSP指令`<%@ 指令名称 属性=... ...%>`
       JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分

        page指令


        Include指令:
            include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet
            只有include指令进行的包含是静态包含,其他的包含都是动态包含

        taglib指令

        (7)JSP九大隐式对象:在翻译过来的ServletService方法自动帮我们前置定义的九个对象,可以在jsp页面中直接使用
      page
      confing
      application
      response
      request
      session
      out
      exception
      pageContext


      out
        相当于是response.getWriter得到PrintWriter
        out和response.getWriter获取到的流不同在于,在于这个out对象本身就具有一个缓冲区.利用out写出的内容,会先缓冲在out缓冲区中,直到out缓冲区满了或者整个页面结束时out缓冲区中的内容才会被写出到response缓冲区中,最终可以带到浏览器页面进行展示
        page指令中的
         [buffer="none | 8kb | sizekb" ]可以用来禁用out缓冲区或设置out缓冲区的大小,默认8kb 
         [ autoFlush="true | false"]用来设置当out缓冲区满了以后如果在写入数据时out如何处理,如果是true,则先将满了的数据写到response中后再接受新数据,如果是false,则满了再写入数据直接抛异常 

        在jsp页面中需要进行数据输出时,不要自己获取response.getWriter,而是要使用out进行输出,防止即用out又用response.getWriter而导致输出顺序错乱的问题

      **pageContext**
        (1)可以作为入口对象获取其他八大隐式对象的引用
            getException方法返回exception隐式对象 
            getPage方法返回page隐式对象
            getRequest方法返回request隐式对象 
            getResponse方法返回response隐式对象 
            getServletConfig方法返回config隐式对象
            getServletContext方法返回application隐式对象
            getSession方法返回session隐式对象 
            getOut方法返回out隐式对象
        (2)域对象,四大作用域的入口,可以操作四大作用域中的域属性

            作用范围: 当前jsp页面
            生命周期: 当对jsp页面的访问开始时,创建代表当前jsp的PageContext,当对当前jsp页面访问结束时销毁代表当前jsp的pageContext
            作用:在当前jsp中共享数据

JSP标签技术

   在jsp页面中写入大量的java代码会导致jsp页面中html代码和java代码混杂在一起,会造成页面非常的混乱,难于维护
   于是在JSP的2.0版本中,sun提出了JSP标签技术,推荐使用标签来代替JSP页面中java代码,并且推荐,JSP2.0以后不要在JSP页面中出现任何一行java代码。

1.4.1EL表达式

EL表达式在JSP中可以非常方便的获取数据,可以代替JSP页面中的JSP表达式(<%= %>)
基本结构: ${ 表达式 }
EL只能获取不能设置!!!
EL只能获取不能遍历!!!
EL表达式提供了如下功能:
(1)EL可以获取常量/变量(必须存入域中)/表达式的值
(2)EL可以获取域中的数组或集合中的数据
(3)EL可以获取域中的Map集合中的数据。

1.4.2JSTL标签库

   JSTL标签库是为JavaWeb开发人员提供了一套标准通用的标签库,JSTL标签库和EL配合使用取代JSP中大部分的Java代码.
   在使用JSTL标签库提供的标签之前,必须在JSP中通过taglib指令引入JSTL标签库(如果缺少JSTL库相关的jar,还需要提前导入jar包)
   1.导入JSTL的jar包
   2.引入JSTL库  

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

其中常用的标签如下:
1、 – 往四大作用域中添加域属性,或者修改四大作用域中已有的属性
(1)往四大作用域中添加一个域属性

你可能感兴趣的:(jsp)