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>

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

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

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

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

JSP注释

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

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

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

    Java代码注释

JavaWeb总结(十一)的更多相关文章

  1. JavaWeb学习 (十一)————Session

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  2. javaweb(三十一)——国际化(i18n)

    一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...

  3. javaweb(二十一)——JavaWeb的两种开发模式

    一.JSP+JavaBean开发模式 1.1.jsp+javabean开发模式架构 jsp+javabean开发模式的架构图如下图(图1-1)所示

  4. JavaWeb 后端 <十一> 之 DBUtils 框架 (基本使用 结果集 事务处理 对表读取)

    一.数据库操作框架 1.ORM:Object Relation Mapping Hibernate:非常流行 JPA:Java Persistent API.ORM标准 MyBatis:2010年开始 ...

  5. 巩固javaweb第十一天

    巩固内容: HTML <script> 元素 <script>标签用于加载脚本文件,如: JavaScript. <script> 元素在以后的章节中会详细描述. ...

  6. 学习JAVAWEB第十一天

    今天以及明天做登录案例,复习所学知识.

  7. javaweb学习总结(二十一)——JavaWeb的两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

  8. javaweb学习总结(三十一)——国际化(i18n)

    一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...

  9. Javaweb学习笔记——(二十一)——————过滤器

    过滤器     过滤器概述         1.什么是过滤器:             过滤器javaweb三大组件之一,它与Serlvet很相似,不过它过滤器是用来拦截请求的,而不是处理       ...

  10. Javaweb学习笔记——(十一)——————JSP、会话跟踪、Cookie、HttpSession

    JSP1.什么是JSP jsp即java server pages,它是Javaweb的动态资源. jsp = html + java脚本 + jsp动态标签(包含EL表达式)2.JSP中java脚本 ...

随机推荐

  1. 4.使用bat调用可执行jar文件

    一.项目需求 1.maven工程 2.有properties配置文件. 3.有内部jar包 二.简单的是实现实例 1.项目文件放置 注意:如果是web工程,我们会将jar文件当到我们项目WEB-INF ...

  2. CentOS随笔 - 5.CentOS7安装Sql Server 2017

    前言 转帖请注明出处: http://www.cnblogs.com/Troy-Lv5/ 开发环境嘛, 作为.Net系Sql Server那是必备的. 听过Sql server可以安装在Linux上了 ...

  3. swift版的StringAttribute

    swift版的StringAttribute 效果 源码 https://github.com/YouXianMing/Swift-StringAttribute // // StringAttrib ...

  4. zabbix之自动发现Tomcat多实例(第一种:已经部署完成,后续不再添加;第二种:后续或根据需要添加Tomcat实例)

    单一实例手动部署:https://www.cnblogs.com/huangyanqi/p/8522526.html 注释:参考的一位博主的博客后续做的修改,那个博主的网址找不到了!!!! 背景: 1 ...

  5. zabbix日常监控NFS(新加一)

    有时候主机使用NFS文件挂载的方式来存储.备份.共享文件:但有时会出现断开的现象. 1.客户机现状 [root@tianxia6 ~]# df -h Filesystem Size Used Avai ...

  6. NTRIP协议学习(一)

    这篇博客讲得很清晰.  https://blog.csdn.net/sinat_19447667/article/details/67637167 可以参考的文献包括:<多系统GNSS实时数据质 ...

  7. 面向对象程序设计__Task3_Calculator

    The initial part of the Calculator program 题目链接:Click Here github链接:Click Here 看到这个题目的话,想到就是有3个任务要去做 ...

  8. [微信小程序直播平台开发]___(二)Nginx+rtmp在Windows中的搭建

    1.一个可以忽略的前言 Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Ramble ...

  9. 缓冲区溢出基础实践(一)——shellcode 与 ret2libc

    最近结合软件安全课程上学习的理论知识和网络资料,对缓冲区溢出漏洞的简单原理和利用技巧进行了一定的了解.这里主要记录笔者通过简单的示例程序实现缓冲区溢出漏洞利用的步骤,按由简至繁的顺序,依次描述简单的 ...

  10. zookeeper 快速入门

    分布式系统简介 在分布式系统中另一个需要解决的重要问题就是数据的复制.我们日常开发中,很多人会碰到一个问题:客户端C1更新了一个值K1由V1更新到V2.但是客户端C2无法立即读取到K的最新值.上面的例 ...