JSP学习笔记

     好久没写文章了,虽然大家现在都在说jsp可以不用学了,但是难免以后会遇到,所以我就学了。

  其实jsp我很早就学了,但是我忘了,所以决定写篇文章来复习巩固一下;

  下面先放一张jsp的主要知识点吧,关于EL表达式JSTL标签库的内容下次再补上;

一、JSP是什么?有什么用?

  JSP的全称是Java Server Pages。也就是Java的服务器页面。

  其主要作用是:代替Servlet程序回传html页面的数据。因为Servlet回传html页面是一件非常麻烦的事情,所以就有了jsp。

二、JSP的本质是什么?

  JSP的本质是一个Servlet程序。当我们在浏览器上第一次访问这个jsp页面的时候,Tomcat服务器会帮我们把所访问的jsp页面翻译成

一个Java源文件,并且编译成.class字节码文件。

   打开Tomcat的解压目录,apache-tomcatworkCatalinalocalhostROOTorgapachejsp就会发现下面两个文件:

 

   接着打开index.java文件,我们惊奇的发现,jsp这个类继承了HttpJspBase类,而HttpJspBase类继承了HttpServlet类,这就是jsp的本质。

三、JSP的三种语法

  (1)我们先讲头部的page指令。要想使用jsp得先写这个才行!

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  这个page有如下几个属性:

    i.    language:           表示jsp翻译过后是什么语言,目前为止只有Java语言支持。(看来曾经jsp还是很有野心的)

    ii.   contentType:      表示jsp返回的数据类型是什么,等同于response.setContentType()参数值。

    iii.   pageEncoding:  表示当前jsp文件的字符集。

    iV.   import:    和Java中的import一样,用于导包和导类。

    V.    autoFlush:   设置当out输出缓冲区满了以后是否自动刷新缓冲区的。默认值是true,也就是刷新。改为false当缓冲区满会报错。

    Vi.   buffer:    设置out缓冲区的大小,经过sun公司不停实验,默认值8kb是最好的。

    Vii.  errorPage:  设置当jsp页面运行出错时,自动跳转去的错误页面路径。

    Viii.  isErrorPage:   设置当前jsp页面是否是错误页面。默认为false,设置为true可获取异常信息。

    iX. session:   设置访问当前jsp页面是否会创建HttpSession对象,默认为true。

    X. extends:   设置jsp翻译出来的Java类继承谁。

  (2)常用脚本:

    1)声明脚本: <%!  声明类属性、static静态代码块、声明类方法、声明内部类  %>  (极少使用

    2)表达式脚本:<%= 表达式(整型、浮点型、字符串、对象) %>  

      作用:可以在jsp页面上输出数据 (常用,但是我们一般用EL表达式替换它)

      注意:  1、所有的表达式脚本都会被翻译到_jspService()方法中,该方法在jsp翻译出来的类中。

           2、表达式脚本都会被翻译到out.print()输出到页面上。

           3、被翻译到_jspService()方法中,所以该方法中的所有对象都可以直接使用。

           4、表达式脚本不能用分号结尾。

         3)代码脚本:<% Java语句 %>  (常用,但是我们会用JSTL标签库替换它)

      作用:可以在jsp页面中,编写我们自己需要的功能。比如实现一个九九乘法口诀表。

      注意:1、2、点同上。

         3、可以由多个代码脚本组合在一起完成一个完整的Java语句(写出来的代码可读性差

         4、可以和表达式脚本组合起来使用。

  (3)三种注释

      i.  html注释  <!--  这是注释 -->

      ii. java注释  单行注释和多行注释都可以用,不过要写在代码脚本中

      iii.真正的jsp注释   <%-- jsp注释  --%>  可以注释掉上面两种注释

四、九大内置对象

  ①request      请求对象     ②response   响应对象   ③pageContext   jsp的上下文对象    ④session    会话对象    ⑤application    ServletContext对象

  ⑥config      ServletConfig对象      ⑦out    jsp输出对象    ⑧page    指向当前jsp的对象      ⑨exception   异常对象

  这九个对象其中的四大域对象是比较重要的。从上到下为从小到大的范围顺序。

  可以通过   XX对象.setAttribute(key,value)的方式往域中保存数据,也可以通过getAttribute(key)得到数据

    pageContext    当前jsp页面内有效

    request             一次请求内有效

    session             一次会话内有效,关掉浏览器就没了

    application  整个web工程内有效,除非web工程停止或者服务器重新部署

五、jsp中的out输出和response.getWriter输出的区别

  首先jsp的翻译文件都是通过out来进行输出的,所以我们一般也用out

  这里一共牵扯到三种方法:

    ①out.write()   输出字符串没问题,但是其他数据类型有问题。翻译的源码中也是用的这个

    ②out.print()   输出任意数据都没有问题都是通过转换成为字符串以后调用的write()方法输出

    ③response.getWriter().write()  

      当jsp中的所有代码执行完成后会执行out.flush()操作,然后将out缓冲区中的数据追加写入到response缓冲区末尾,

      然后执行response的刷新操作,把所有数据写给客户端。所以会导致response的输出内容总在out的输出内容前面

六、jsp常用标签

  a)jsp静态包含    

  <%@  include  file="/include/footer.jsp" %>

    特点:

       1、静态包含不会翻译被包含的jsp页面

       2、静态包含其实就是把被包含的jsp页面的代码拷贝到包含的位置执行输出。

       3、file属性指定要包含的jsp页面的路径,其中的第一个/映射到你的web目录。

  b)jsp动态包含   

      <jsp:include page="/include/footer.jsp">

        <jsp:param name="username" value="root"/>

      </jsp:include>

    特点:

      1、page属性是你要包含的jsp页面,也翻译成Java代码。也把被包含的内容执行输出到包含位置。

      2、动态包含底层调用如下代码去调用被包含的jsp页面执行输出。

 

JspRuntimeLibrary.include(request,response,"/include/footer.jsp",out,false);

      3、动态包含可以传递参数,如上面代码所示。

  c)请求转发标签

    <jsp:forward page=""></jsp:forward>

    page里面写你要转发的路径。

以上就是本期jsp的全部内容啦,感谢大家查看。

原文地址:https://www.cnblogs.com/xzhm/p/12629179.html