JSP的指令

JSP引入

      servlet的作用:用于JAVA语言开发动态资源的技术

      JSP的作用:用Java语言(+html语言)开发动态资源的技术

              jsp就是servlet

      JSP的特点

          1)JSP的运行必须交给tomcat服务器

                            tomcat的work目录:tomcat服务器存放JSP运行时的临时文件

          2)JSP页面既可以写html代码,也可以写java代码(html页面不可以写java代码)

     JSP的执行过程

           问题:http://localhost/NotepadDemo2/ListContactServlet/hello.jsp   如何显示效果

          1)访问到hello.jsp页面,tomcat扫描到jsp文件,在%tomcat%/work把jsp文件翻译成java源文件

                           (hello.jsp ->   _hello_jsp.java)(翻译)

          2)tomcat服务器把java源文件编译成class字节码文件(编译)

                           (_hello_jsp.java  ->  _hello_jsp.class)

         3)tomcat服务器构造_hello_jsp类对象

         4)tomcat服务器调用_hello_jsp类里面方法,返回显示内容到浏览器

        第一次访问jsp:执行1 、2 、3 、4

        第n次访问jsp:执行 4 

      注意:

          1)jsp文件修改了或者jsp临时文件被删除,就要重新走 1 和 2 的过程

          2)

     问题:

         为什么jsp就是servlet

            jsp翻译的java文件:

                      public final class _hello_jsp  extends  org.apache.jasper.runtime.HttpJspBase

implements  org.apache.jasper.runtime.JspSourceDependent

               HttpJspBase类

             public  abstract  class   org.apache.jasper.runtime.HttpJspBase  extends  javax.servlet.http.HttpServlet

implements  javax.servlet.jsp.HttpJspPage

           结论:jsp就是一个servlet程序!!

                  servlet的技术可以用在jsp程序中

                   jsp的技术并不是全部适用于servlet程序

          servlet的生命周期

                    1)构造方法

                    2)init方法

                    3)service方法

                    4)destory方法

           jsp的生命周期

                    1)编译:jsp ->java文件

                    2)翻译:java文件 ->class文件(servlet程序)

                    3)构造方法(第一次访问)

                    4)init方法(第一次访问):_jspInit()

                    5)service方法:_jspService()

                    6)destory方法:_jspDestory()

JSP语法

        1)jsp模板

                   jsp页面中的html代码就是jsp的模板

        2)jsp表达式

                   语法:<%= 变量或表达式%>

                   作用:向浏览器输出变量的值或者表达是计算的结果

                   注意:

                       1)表达式的原理就是翻译成out.print(“变量”);通过该方法向浏览器写出内容

                       2)表达式后面不需要带分号结束

        3)jsp的脚本

                      语法:<%java代码 %>

                      作用:执行java代码

                     注意:

                            1)原理把脚本中java代码原封不动的拷贝到jspService方法中执行

                          脚本中不能声明方法

        4)jsp的声明

                      语法:<%!  变量或方法 %>

                      作用:声明jsp的变量或方法

                       注意:

                           变量翻译成成员变量,方法翻译成成员方法

                           jsp声明中不能重复定义翻译好的一些方法

        5)jsp的注释

                        语法:<%--  jsp注释--%>

                        和html注释的区别: html注释会执行但是jsp注释不会被执行( html注释不会注释掉jsp标签)

JSP指令有page指令、include指令和taglib指令。

一 、page指令:

  作用:

              告诉tomcat服务器如何

<%@ page 

[language="java"]--告诉服务器是用什么动态语言来翻译jsp文件

[extends="package.class"]

[import="{package.class|package.*}、. . ."]--告诉服务器java文件使用什么导入包,多个包之间用逗号分隔

[session="true|false"]   --表示是否开启session的功能

       false,不能用session内置对象;true可以使用session内置对象

[buffer="none|8kb|seizekb"]   -- jsp页面的缓冲区大小

[autoFlush="true|false"][isThreadSafe="true|false"]

[info="text"]

[errorPage="relativeURL"]   --指定当前jsp页面的错误处理页面

[isErrorPage="true|false"]  --指定当前页面为错误处理页面

            exception内置对象:true,是错误处理页面,可以使用exception内置对象

<!--全局错误处理页面配置-->
<error-page>
    <error-code>500</error-code>
    <location>/500.jsp</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>/404.html</location>
</error-page>

[contentType="mimeType[;charset=characterSet]"|"text/html;charset=IOS-8859-1"]  --服务器发送浏览器的数据类型和内容编码

 

[pageEncoding="charACTERsET|IOS-8859-1"]   --告诉服务器使用什么编码翻译jsp文件(称Java文件)

[isELlgnored="true|false"]  --是否忽略EL表达式

%>

最简单的page指令

<%@ page  language="java" contentType="text/html;charset=UTF-8" import="java.util.*" pageEncoding="UTF-8"%>

page常用的属性:

1.language属性:language属性为指定JSP页面使用的是哪种脚本语言,目前使用的只有Java所以默认 language=“Java”

2.extends属性:extends属性是JSP文件被编译成Java代码后继承的父类,它便可以引用父类中的变量、方法。但是会降低JSP的灵活性。

3.import属性:用来指定导入的Java包名或者类列表。需要引用多个类文件时用( ,)隔开。

4.contentType属性:用来指定以哪种文件形式显示JSP文件,同时指定页面的字符编码方式。

5.pageEncoding属性:用来指定JSP页面采用的字符编码方式,相当于contentType属性值中的charset值。

二 、include指令:

    通过include指令来包含另外一个页面,当容器编译JSP文件时,当前的页面会和include指令指定的页面合并。作用是:通过代码的重用来减少工作量。

include指令的两种形式:

<%@ include  file=" "  %>   指令元素(静态包含)

<jsp:include flush="true" page=" "></jsp:include>  行为元素(动态包含)

注意:

        1)原理:把被包含的页面的内容翻译到包含页面中,合并成翻译成一个java源文件,在编译运行

         这种叫做静态包含(源码包含)

           2)如果使用静态包含,被包含页面中不需要出现全局的html标签了(如html、head、body)

  这两种方法的区别:

      1、指令元素是在JSP文件被编译成servlet时,引入指定的文件;行为元素是当JSP页面被请求时,才引入指定文件。

      2、行为元素可以向页面传递参数;指令元素不能传递参数。

      3、在编译阶段,指令元素把被包含的文件插入到包含的地方,生成一个.Java文件和一个.class文件;行为元素在编译时,被包含的文件单独生成一个.Java文件和.class文件。

      4、指令元素用include的伪代码实现页面包含页面,不会检查包含文件的变化;行为元素用jsp:include动作实现页面包含页面,总是检查包含文件中的变化。

动态包含是把两个或两个以上的独立文件合并成一个页面显示出来,动态包含是把两个或两个以上的文件合并成一个文件编译。

三、taglib指令:

      是用来制定一个标签库以及自定义标签库的前缀。JSP文件使用taglib指令来告诉容器,该JSP文件需要哪些标签库,并可以指定标签的前缀。

<%@  taglib  uri="URIToTagLibrary"  prefix="tagPrefix"  %>

其中 uri是指标签库的路径;prefix是标签的前缀。taglib指令在JSP文件中的代码如下:

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

<c:forEach>

    <c:if  test=" "></c:if>

</c:forEach>

只有在JSP文件中需要用到标签库的时候,才会使用taglib指令。

四、JSP的内置对象

      1)什么事内置对象?

              例如:HttpSession  ServletContext   HttpServletRequest。我们每次都要使用这些对象,一直创建会很麻烦。所以sun公司设计jsp时,在jsp页面加载完毕之后就会自动帮开发者创建好这些对象。而开发者只需要直接使用这些对象调用方法即可!这些创建爱女好的对象就叫内置对象

              举例:

              servlet:

                        HttpSession   session=request.getSession();

              jsp:

                   tomcat: HttpSession   session=request.getSession();(不需要开发者做)

   九大内置对象

            内置对象                       类型

            request                        HttpServletRequest

            response                     HttpServletResponse

            config                          ServletConfig

            application                  ServletContext

            session                       HttpSession

            exception                    Throwable

            page                            Object(this)

            out                               JspWriter

            pageContext               PageContext 

out对象

    out对象类型,JspWriter类,相当于带缓冲的PrintWriter

       PrintWriter:

               writer(内容):直接向浏览器写出内容

       JspWriter:

               writer(内容):向jsp缓冲区写出内容 

pageContext对象

   pageContext对象的类型是PageContext,叫jsp的上下文对象       

    1)可以获取其他八个内置对象

            public  class  _hello_jsp{

                        public void jspService(request,response){

                                创建内置对象

                               HttpSession session=request.get.......;

                               ServletConfig config=.......;

 

                                 把8个经常使用的内置对象分装到PageContext对象中

                                 PageContext pageContext = 封装

                                 调用method1方法

                                 method1(session,config);

                           }

                          public void method1(){

                               希望使用内置对象

                               从PageContext对象中获取其他八个内置对象

                               jspWriter  out = pageContext.getOut();

                              HttpServletRequest  request = pageContext.getRequest();

                              ......

                           }

          }

                         使用场景:在自定义标签的时候,pageContext对象频繁使用到

     2)本身是一个域对象

                         ServletContext   context域

                         HttpServletRequest   request域

                         HttpSession    session域

                         PageContext    page域

          作用:保存数据和获取数据,用于获取数据

           保存数据:

                 1)默认情况下,保存到page域

                                pageContext.setAttribute("name");

                 2)可以向四个域对象保存数据

                                 pageContext.setAttribute("name",域范围常量)                       

           获取数据:

                 1)默认情况下,从page域获取

                            pageContext.getAttribute("name");

                 2)可以从四个域中获取数据

                           pageContext.getAttribute("name",域范围常量)

             域范围常量                   

              PAGE_SCOPE
              REQUEST_SCOPE
              SESSION_SCOPE
              APPLICATION_SCOPE

                 3)自动在四个域中搜索数据

                           pageContext.findAttribute("name");

            顺序:page域 -> request域 -> session域 ->context域

                    

JSP中的四个域对象:

           1)域对象作用

                     保存数据  和获取数据 ,用于数据共享

          2)域对象方法

                    setAttribute(“name”,Object)保存数据

                    getAttribute(“name”) 获取数据

                    removeAttribute(“name”)清除数据

        3)域对象作用范围

                   page域:只能在当前jsp页面中请求(当前页面)

                   request域:只能在同一个请求中使用(转发)

                   session域:只能在同一个会话(session)中使用(私有的)

                   context域:只能在同一个web应用中使用(全局的)

Jsp的最佳实践

                servlet技术:开发动态资源。是一个java类,最擅长写java代码

                jsp技术:开发动态资源。最擅长通过java代码输出html代码。

           各取所长:                 

                在web项目下所涉及到逻辑

                           1)接收参数(servlet做)

                           2)处理业务逻辑,返回结果(servlet做)

                           3)显示数据到浏览器(jsp做)

                           4)跳转到其他页面(servlet做)

                  servlet+jsp模式

                         servlet:

                               1)接收参数

                               2)处理业务逻辑

                               3)把结果保存到域对象

                               4)跳转页面

                         jsp:

                                1)从域对象取出数据

                                2)把数据显示到浏览器

                        servlet的数据      ->        jsp页面

                         List<Contact>           使用域对象   共享数据

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值