JSP详解

1.JSP是什么?

  •      JSP的全名是:Java Server Pages ,由它的全名可知。它就是java的服务器页面。因为用Servlet传html页面很繁琐,所以出现了Jsp来回传html页面数据。

  Jsp的本质其实就是一个servlet程序。

   原因:

  1. Tomcat服务器在解析项目时,会将.jsp文件翻译为.java和.class文件。
  2. .jsp文件被服务器翻译为.java文件后,我们发现其继承了HttpJspBase,而HttpJspBase又继承了HttpServlet,也就是说翻译出来的jsp页面是一个Servlet程序。

2.JSP头部的page指令:

      page指令可以修改jsp页面中一些重要的属性,或者行为。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  •  language             表示jsp翻译后时什么语言,这里暂时只支持java。
  • contentType         表示jsp返回的数据类型是什么,也是源码中response.setContentType()属性的值。
  • pageEncoding      表示当前jsp文件本身的字符集。
  • import                   用于导包。
  • autoFlush             设置当out输出流缓冲区满了以后,是否自动刷新缓冲区,默认值是true。
  • buffer                    设置out缓冲区的大小,默认是8KB。
  • errorPage             当jsp页面运行时出错,跳转到该属性设置的页面去。
  • isErrorPage          设置当前jsp页面是否是错误信息页面,默认是false,如果是true可以获取异常信息。
  • session                 设置访问当前jsp页面,是否会创建HtppSession对象,默认是true。 
  • extends                 设置jsp翻译称为servlet程序,翻译的java类默认继承谁。

3.JSP中常用的脚本

  1. 声明脚本
    1. 格式:<%!       %>
    2. 作用:可以给jsp翻译出来的java类定义属性和方法甚至是静态代码块,内部类。
  2. 表达式脚本
    1. 格式:<%=     %>
    2. 作用:在jsp页面上输出数据
    3. 特点:所有的表达式脚本都会被翻译到_jspService()方法中;表达式脚本都会被翻译成为out.print()输出到页面上;由于表达式脚本翻译的内容都在_jspService()中,所以_jspService()方法中的对象都可以直接使用;表达式脚本中的表达式不能以分号结束;
  3. 代码脚本
    1. 格式:<%      %>
    2. 作用:可以在jsp页面中编写我们自己需要的功能(java语句)
    3. 特点:代码脚本翻译后都在_jspService方法中;代码脚本由于翻译到_jspService中,所以在_jspService()方法中的现有对象都可以直接使用;还可以由多个代码脚本块组合完成一段完整的java语句。

4.JSP的三种注释:

  1. html注释         <!--   这是html注释   -->,html注释会被翻译到java源代码中,会被输出到客户端。
  2. java注释         // 单行java注释;/*   */   多行java注释。会被翻译到java源代码中。
  3. jsp注释           <%--   这是jsp注释  --%>    jsp注释会注掉jsp页面中所有的代码。

5.JSP的九大内置对象:

jsp中的内置对象指Tomcat在翻译jsp页面成为Servlet源代码后,内部提供的九大对象,叫内置对象。

  • request                请求对象
  • response             响应对象
  • pageContext        jsp的上下文对象
  • session                会话对象
  • application           ServletContext对象
  • config                   ServletConfig对象
  • out                        jsp输出流对象
  • page                     指向当前的jsp对象
  • exception              异常对象 

其中,四个域对象为:pageContext         当前jsp页面范围内有效

                                    request                  一次请求内有效

                                    session                  一个会话范围内有效(打开浏览器访问服务器,直到关闭)          

                                    application             整个web范围内都有效(只要web工程不停止,数据一直都在)    

            域对象是可以像Map一样存取数据的对象。四个域对象功能一样,不同的是它们对数据的存取范围。

           虽然四个域对象都可以存取数据,在使用上它们是有优先顺序的(从小到大进行使用):

                           pageContext----->request------>session------>application

out输出和response.getWriter输出:

          response中表示响应,我们经常用于设置返回给客户端的内容(输出),out也是给用户做输出使用的。

区别:当jsp页面中的代码执行完成后会做以下两个操作:

  1.   执行out.flush()操作,会把out缓冲区中的数据追加写入到response缓冲区末尾。
  2.   会执行response的刷新操作,把数据全部写给客户端。

总结:由于jsp翻译后,底层代码都是使用out来进行输出,所以一般情况下,我们在jsp页面中统一使用out来进行输出,避免打乱页面输出的顺序;

           由于out.write()输出字符串不会出错,out.print()输出任意数据都不会出错(该方法将数据都转化为字符串后再调用write()输出)。所以在jsp页面中,可以统一使用out.print()来进行输出。

6.JSP常用的标签

      1.静态包含(常用)

              格式:       <%@ include file="" %>

              解释:      file属性表示要包含的资源路径。

              特点:      1. 静态包含不会翻译被包含的jsp页面。

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

      2.动态包含

             格式:   <jsp:include page=""></jsp:incliude>

             解释:   page属性表示要包含的资源路径。

             特点:   1.动态包含会翻译被包含的jsp页面。

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

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

解析:使用包含的jsp将自己的request, response, out对象传递给被包含的jsp,然后被包含的jsp页面会用传递过来的out对象来给使用包含的jsp页面里的out缓冲区写数据,这样子就实现了包含关系。

                         3.动态包含可以传递参数。   <jsp:param   name="username"   value="user1"/>

     3.请求转发

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

              解释:其作用和 request.getRequestDispatcher(" ").forward(request,response) 方法一样,page属性设置请求的转发路径。

 

 

 

        

 

 

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值