jsp相关基础知识

一、JSP简介

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

二、HTMLServletJSP的关系

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

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

  JSPHTML+Servlet

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

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

写在之前:

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

JSP的原理:

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

 

五、JSP的语法

  5.1 模板元素

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

  5.2 Java程序片段

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

      <%

        在里面写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:前缀。

六、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文件。只是合并输出结果。

七、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

很重要

八、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提供)

九、四大域对象

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

域对象名称

范围

级别

备注

PageContext

页面范围

最小

因范围太小,开发中用的很少

ServletRequest

请求范围

page大,比session

不同的资源,只有转发用

HttpSession

会话范围

request大,比application

多次请求共享数据,但不同的客户端不能共享

ServletContext

应用范围

最大

尽量少用,如果对数据有修改需要做同步处理

 

 

 

 

 

 

 

 

 

 

十、JSP开发

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

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

例如:

Mmodel 封装的是数据模型

Vview 指的是jsp页面

CController 指的是Servlet

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

 

 

 

 

原文地址:https://www.cnblogs.com/li-ran/p/6867600.html