• JavaWeb总结(十一)


    JSP简介

      虽然Servlet解决了传统CGI编程的缺陷,但是它并不一定是最高效率的方案

        - Servlet的编码、部署和调试任务繁琐

        - 生成动态网页繁琐,不利于项目分工

      为了弥补Servlet这些缺陷,SUN公司又在Servlet基础上推出了JSP(Java Server Page)技术作为解决方案

      作为JSP技术编写的动态页面称为JSP页面,它是由HTML语句和嵌套在其中的Java代码组成一个普通文本文件。为了区分与静态页面的不同,JSP的后缀名必须为.jsp

      JSP2.0规范定义的功能可以分为以下几种:JSP(规范了语法和语义)、JavaBean、定制标记、JSP EL等 

    JSP运行机制与生命周期

      第一阶段——JSP页面翻译

    与Servlet的部署相比,JSP的部署更为简单,Web容器第一次接收到对某个JSP页面的请求后,首先自动将该JSP页面翻译为Servlet代码。 所有JSP页面本质上就是Serlvet程序 。Tomcat将翻译后的代码放在Tomcat安装目录的/work子目录下。

     

    JSP页面翻译阶段

    第二阶段——JSP页面编译

      Web容器负责将Servlet代码编译为字节码。与源文件放在同一个目录下

      (在JSP生命周期中,整个翻译和编译步骤只发生一次,因此,除第一次编译所消耗的额外时间开销外,JSP和Servlet的执行速度相同)

     

    JSP页面编译阶段

    第三阶段——JSP页面类装载

      Web容器装载新生成的servlet类

     

    JSP页面类装载阶段

    第四阶段——JSP页面类实例化

      Web容器创建servlet实例 

     

    JSP页面类实例化阶段

     

    第五阶段——JSP页面初始化

      Web容器调用Servlet示例的jspInit()方法,JSP页面装载资源 

     

    JSP页面初始化阶段

    第六阶段——JSP页面服务

      容器创建一个新线程来处理这个客户的请求,servlet对象的_jspService()方法运行

     

    JSP页面服务阶段

    第七阶段——JSP页面销毁

      容器调用生成的servlet对象的jspDestroy()方法,销毁装载的资源 

     

    JSP页面销毁阶段

    生命周期

    由JSP引擎将JSP页面翻译成JAVA代码

    将JAVA代码编译成class字节码文件

    加载到容器

    由容器实例化成对象

    初始化阶段相关的方法是jspInit()

    请求到达,调用服务阶段相关的方法是_jspService()

    销毁阶段相关的方法是jspDestroy() 

    提示:JSP通常用于简化创建产生文本的Servlet,而Servlet更适合于发送原生字节到客户端或需要用Java源代码完全控制源代码的场合。二者可以很好的分开。

    JSP语法和语义 

      JSP网页主要由元素(Element)和模板数据(Template Data)两个部分组成 

    模板数据是JSP的静态部分 

    WEB容器不处理 

    元素则是必须经由WEB容器解释 

    元素都是以XML做为语法基础,并且大小写要一致 

    WEB容器支持两种不同格式的JSP语法 

    普通格式和XML兼容格式 

    普通JSP语法是设计给开发者用的

    XML兼容JSP语法是设计用来容易被开发工具使用的 

    JSP脚本元素

    脚本元素

    脚本语法

    声明

    <%! 声明 %>

    Scriplet

    <% 代码 %>

    脚本表达式

    <%= 脚本表达式 %>

      Scriptlet

    Scriptlet直接插入Java代码片断到模板数据中

    一个Scriptlet只能是Java程序

    必须符合Java的规范

    以“<%”开始,以“%>”结束来包含程序代码段

    编译后的代码会出现在_jspService()方法中

    声明的变量是一个局部变量

    在JSP文件中大量写入Scriptlet会使得JSP难以维护和文档化

    <% java程序代码 %> 
    <!--对应的XML语法格式为:-->
    <jsp:scriptlet></jsp:scriptlet>

      脚本表达式

    脚本表达式将动态页面生成的结果显示出来 

    不能使用分号来作为脚本表达式的结束符 

    脚本表达式可以是常量,也可以是一个动态计算出来的结果值,甚至还可以把脚本表达式作为其它JSP元素的属性值

    <%= 脚本表达式 %>
    <!--对应XML的语法是:-->
    <jsp:expression>脚本表达式</jsp:expression>

      JSP声明

        可以在JSP程序中声明一个或多个变量。但是每一个声明语句都必须以分号结束

     

    <%! 声明 %>
    <!--XML语法为:-->
    <jsp:declaration>声明</declaration>

     

     

      ScriptletJSP声明的用法很类似,那么那么的区别是什么呢?

        JSP声明方法声明的变量和方法为静态以及实例化变量和方法。即当多个用户同时在访问一个JSP时,每个用户线程将共用全局的变量和方法。

        Scriptlet方法声明的变量和方法将是_jspService()方法中的局部变量和方法。

        如果不是特别需要,不要将变量和方法声明设为全局(推荐<%  %>方法)

    JSP注释

      SP页面中可以插入三种不同类型的注释

        JSP注释,其语法结构为: <%--注释内容--%> (在审查元素中不可见)

        HTML注释 :<!--注释内容-->(在审查元素中可见)

        Java代码注释

     

    我不作恶

    但有权拒绝为善

    我不赞同

    但是我捍卫你不为善的权力

  • 相关阅读:
    优雅的使用Python之软件管理
    优雅的使用python之环境管理
    SpriteSheet精灵动画引擎
    【译】AS3利用CPU缓存
    走在网页游戏开发的路上(十一)
    自定义路径创建Cocos2d-x项目
    C++静态库与动态库
    C++对象模型
    超时空英雄传说2复仇魔神完全攻略&秘技
    从头写个http client(java)
  • 原文地址:https://www.cnblogs.com/HackerBlog/p/5977769.html
Copyright © 2020-2023  润新知