jsp相关基础知识

1、JSP简介

  JSP全称是Java Server Page,它和Servlet同样,也是sun公司推出的一套开发动态web资源的技术,称为JSP/Servlet规范。其本质也是一个Servlet。html

2、HTMLServletJSP的关系

  HTML:只能开发静态资源,不能包含java代码,没法添加动态数据。java

  Servlet:写java代码,能够输出页面内容,可是很不方便,开发效率极低。web

  JSPHTML+Servlet浏览器

3、JSP快速入门(输出当前时间)

4、分析JSP的原理以及生命周期

写在以前:缓存

明确JSP就是一个Servlet。是一个特殊的Servlet。tomcat

JSP的原理:服务器

  客户端提交请求——Tomcat服务器解析请求地址——找到JSP页面——Tomcat将JSP页面翻译成Servlet的java文件——将翻译好的.java文件编译成.class文件——返回到客户浏览器上。session

 

5、JSP的语法

  5.1 模板元素

      jsp中的模板元素指的就是jsp中的html标签,在开发过程当中,先写好这些模板元素,由于它们决定了页面的外观。架构

  5.2 Java程序片断

      在jsp中,可使用java脚本代码。形式为:app

      <%

        在里面写java程序脚本

        须要注意:这里面的内容由tomcat负责翻译,翻译以后是service方法的成员变量

      %>

  5.3 Java表达式

    使用<%=表达式%>

    翻译完后是out.print(表达式内容);

    <%out.print("当前时间);%><%="当前时间"%>是同样的

  5.4 JSP声明

    JSP的声明

    <%! 

      声明能够是变量,方法,静态方法等

      须要注意的是:

      写在里面的内容将会被tomcat翻译成全局的属性或者类方法。

    %>

  5.5 JSP注释

    JSP中的注释:<%--注释--%>

    注意:

    在Jsp中可使用html的注释,可是只能注释html元素,不能注释java程序片断和表达式。

    jsp的注释不只能够注释java程序片断,也能够注释html元素。

  5.6 JSP指令

    5.6.1 简介

      JSP指令是为JSP引擎服务的,它不会产生可见输出,而是告诉引擎如何处理JSP的其他部分(非指令部分)。

      基本语法:

        <%@ 指令名称 属性1="值1" 属性2="值2".......%>

        通常把指令放在JSP页面的顶部(不是必须的)

      指令的属性能够写在一个指令的中,也能够分开写:好比:

      <%@指令 属性1=”值1” 属性2=”值2”%>.

      等价于:

        <%@指令 属性1=”值1” %>.

        <%@指令 属性2=”值2”%>.

    5.6.2 page指令

      属性:

        language:告知引擎,脚本使用的是java,默认是java,支持java。不写也行。

        extends:告知引擎,JSP对应的Servlet的父类是哪一个,不须要写,也不须要改。

        import:告知引擎,导入哪些包(类)。

          注意:引擎会自动导入:java.lang.*,javax.servlet.*,javax.servlet.http.*,javax.servlet.jsp.*

          导入的形式: 

            <%@page import=”java.util.Date,java.util.UUID”%>或者:

            <%@page import=”java.util.Date”%>

            <%@page import=”java.util.UUID”%>  用Eclipse:Alt+/ 自动导入

        session:告知引擎是否产生HttpSession对象,便是否在代码中调用request.getSession()。默认是true。

        buffer:JspWriter用于输出JSP内容到页面上。告知引擎,设定他的缓存大小。默认8kb。

        errorPage:告知引擎,当前页面出现异常后,应该转发到哪一个页面上(路径写法:/表明当前应用)

          注意:当在errorpage上使用了isErrorPage=true以后,ie8有时候不能正常显示

          配置全局错误页面:web.xml

          当使用了全局错误页面,就无须再写errorPage来实现转到错误页面,而是由服务器负责跳转到错误页面。

        isErrorPage:告知引擎,是否抓住异常。若是该属性为true,页面中就可使用exception对象,打印异常的详细信息。默认值是false。

        contentType:告知引擎,响应正文的MIME类型。contentType="text/html;charset=UTF-8"

            至关于response.setContentTYpe("text/html;charset=UTF-8");

        pageEncoding:告知引擎,翻译jsp时(从磁盘上读取jsp文件)所用的码表。

            pageEncoding="UTF-8"至关于告知引擎用UTF-8读取JSP

        isELIgnored:告知引擎,是否忽略EL表达式,默认值是false,不忽略。

      总结:

          属性众多,通常都用默认值。用起来很简单。

  5.6.3 include指令

    该指令是包含外部页面。

      属性:file,以/开头,就表明当前应用。

  5.6.4 taglib指令

    该指令用于引入外部标签

    uri:外部标签的URI地址,相似名称空间。

    prefix:前缀。

6、JSP的转发和包含

  6.1 转发

语法:<jsp:forward page="/forwarddemojsp"></jsp:forward> jsp的内置标签

该方式等价于:

参数:<jsp:param name="message" value="transfer" />

 

获取参数:

 

  注意:

    在使用forward带参数时,不能在中间添加除空格和换行以外的内容。不然报错。

  6.2 包含

     静态包含:只有一种,<%@include file=%>,又称为include指令。特色是将两个页面合成一个。在包含者中可使用被包含者的属性。

     动态包含:除了include指令外,其他全是动态包含。

      jsp的动态包含语法:

      <jsp:include page="" />

        又称为include动做。

      动态包含的特色是,各编译各的,会产生多个javaclass文件。只是合并输出结果。

7、JSP的九大隐式对象(重点)

隐式对象名称

类型

备注

request

javax.servlet.http.HttpServletRequest

 

response

javax.servlet.http.HttpServletResponse

 

session

javax.servlet.http.HttpSession

Page指令能够控制开关

application

javax.servlet.ServletContext

 

page

Java.lang.Object

当前jsp对应的servlet引用实例

config

javax.servlet.ServletConfig

 

exception

java.lang.Throwable

page指令有开关

out

javax.servlet.jsp.JspWriter

字符输出流,至关于printwriter

pageContext

javax.servlet.jsp.PageContext

很重要

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8、PageContext抽象类(重要)

  8.1 PageContext抽象类概述

    它是JSP独有的对象,Servlet中没有这个对象。自己也是一个域(做用范围)对象,可是它能够操做其余3个域对象中的属性。并且还能够获取其余8个隐式对象。(自定义标签时用)

  8.2 PageContext生命周期

    它是一个局部变量,因此它的生命周期随着JSP的建立而诞生,随着JSP的结束而消失。每一个JSP页面都有一个独立的PageContext

  8.3 PageContext经常使用方法

    页面范围的方法:

      void setAttribute(String name,Object value);

      void removeAttribute(String name);

      Object getAttribute(String name);

    操做其余域属性的方法:

      比上面的三个方法多了一个参数 int scope

        void setAttribute(String name,Object value,int scope);

        void removeAttribute(String name,int scope);

        Object getAttribute(String name,int scope);

      int scope它自己是一个常量,有四个值,分别对应四个范围。

        APPLICATION_SCOPE 应用级

        SESSION_SCOPE 会话级

        REQUEST_SCOPE 请求级

        PAGE_SCOPE 页面级

       在四个范围内根据名称查找对象的方法:

         Object findAttribute(String name);

         查找顺序是:PAGE——>REQUEST——>SESSION——>APPLICATION。只要在一个范围内找到就再也不继续查找。

         获取其余八个隐式对象的方法:(自定义标签时用)

         pageContext.getRequest();

         pageContext.getResponse();

         pageContext.getSession();

         pageContext.getServletConfig();

         pageContext.getServletContext();

         pageContext.getException();

         pageContext.getPage();

         pageContext.getOut();(此方法是其父类JspContext提供)

9、四大域对象

 实际开发中用于存放数据的。

域对象名称

范围

级别

备注

PageContext

页面范围

最小

因范围过小,开发中用的不多

ServletRequest

请求范围

page大,比session

不一样的资源,只有转发用

HttpSession

会话范围

request大,比application

屡次请求共享数据,但不一样的客户端不能共享

ServletContext

应用范围

最大

尽可能少用,若是对数据有修改须要作同步处理

 

 

 

 

 

 

 

 

 

 

10、JSP开发

Servlet:擅长处理业务逻辑,不擅长输出显示界面。在web开发中多用于控制程序逻辑(流程)。因此咱们称之为:控制器。

JSP:擅长显示界面,不擅长处理程序逻辑。在web开发中多用于展现动态界面。因此咱们称之为:视图。

例如:

 

 

Mmodel 封装的是数据模型

Vview 指的是jsp页面

CController 指的是Servlet

注意:MVC模型针对的只是表现层的模型,和三层架构是没有关系的。