zoukankan      html  css  js  c++  java
  • 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模型针对的只是表现层的模型,和三层架构是没有关系的。

     

     

     

     

  • 相关阅读:
    【框架学习与探究之定时器--Hangfire】
    【框架学习与探究之AOP--Castle DynamicProxy】
    【框架学习与探究之消息队列--EasyNetQ(2)】
    【框架学习与探究之消息队列--EasyNetQ(1)】
    【框架学习与探究之宿主服务--Topshelf】
    【框架学习与探究之定时器--Quartz.Net 】
    【C# in depth 第三版】温故而知新(2)
    【C# in depth 第三版】温故而知新(1)
    Hexo集成Algolia搜索插件时遇到的问题
    一日一练-了解几个视频相关的知识点
  • 原文地址:https://www.cnblogs.com/li-ran/p/6867600.html
Copyright © 2011-2022 走看看