JSP(Java server page)是Java EE规范最基本成员,他是Java Web开发的重点知识,尽管我们一直在用。但其原理知之甚少。今天重点研究一些JSP核心内容以及其工作原理。

JSP和Servlet的本质是一样的,由于JSP终于须要编译成Servlet才干运行,换句话说JSP是生成Servler的草稿文件。

JSP比較简单。就是在HTML中嵌入Java代码,或者使用JSP标签。包括使用用户自己定义标签,从而能够动态的提供内容。早起JSP应用比較广泛,一个web应用能够所有由JSP页面组成,仅仅须要少量的JavaBean就可以,可是这样导致了JSP职责过于复杂,这是Java EE标准的出现无疑是雪中送炭,因此JSP慢慢发展成单一的表现技术,不再承担业务逻辑组件以及持久层组件的责任。

JSP基本原理

JSP的本质是servlet,当用户指定servlet发送请求时,servlet利用输出流动态生成HTML页面。由于包括大量的HTML标签。

静态文本等格式导致servlet的开发效率极低,所有的表现逻辑,包括布局、色彩及图像等,都必须耦合在Java代码中。起静态的部分无需Java程序控制,仅仅有那些须要从数据库读取或者须要动态生成的页面内容才使用Java脚本控制。

因此JSP页面内容有下面两部分组成

静态部分:HTML标签

动态部分:Java脚本

JSP的4种基本的语法

JSP凝视

JSP凝视用于标注程序开发过程中的开发提示,不会输出到client。<%-- 凝视内容 --%>

JSP声明

JSP声明用于声明变量和方法。在JSP中声明方法看起来非常特别。似乎不须要定义类就能够直接定义方法,方法似乎能够脱离类独立存在。实际上JSP声明会转换成servlet的成员变量或成员方法,因此JSP声明仍然符合Java语法。<%! 声明部分 %>

输出JSP表达式

<%=表达式 %>

JSP脚本

曾经JSP应用非常广泛。通俗点讲不论什么能够运行的Java代码都能够通过JSP脚本嵌入到HTML页面中。

<% Java脚本 %>

JSP的3个预编译指令

page指令

该指令是针对当前页面的指令。通常位于JSP页面的顶端,一个JSP页面能够使用多条page指令。

include指令

用于指定包括还有一个页面的指令。使用include指令能够将一个外部文件嵌入到当前JSP文件里,同一时候解析这个页面中的JSP。include即能够包括静态文本,又能够包括动态JSP页面。

taglib指令

用于定义和訪问自己定义标签。

JSP的7个动作指令

forword指令

用于将页面响应转发到还有一个页面,既能够转发到静态的HTML,也能够转发到动态的JSP页面,或者转发到容器中的servlet。

param指令

用于运行參数,必须与其支持參数的标签一起使用。本身不能单独使用。由于单独的param指令没有实际意义。

include指令

用于动态引入一个JSP页面,它是一个动态include指令,也用于包括某个页面,不会导入被include页面的编译指令,仅仅将被导入页面的body内容插入本页面。

plugin指令

用于下载JavaBean或applet到client运行。

useBean指令

创建一个JavaBean的实例

setProperty指令

设置JavaBean实例的属性值

getProperty指令

输出JavaBean实例的属性值

JSP脚本中的9个内置对象

application对象

javax.servlet.ServletContext的实例,该实例代表JSP所属的web应用本身。能够用于JSP页面,或者servlet之间交换信息。

config对象

javax.servlet.ServletConfig的实例,该实例代表JSP的配置信息

exception对象

java.lang.Throwable的实例,该实例代表其它页面中的异常和错误。

out对象

javax.servlet.jsp.JspWriter的实例,该实例代表JSP的输出流。用于输出内容,形成HTML页面。

page对象

代表页面本身,通常没有太大用处。

pageContext对象

javax.servlet.jsp.PageContext的实例。该对象代表JSP页面的上下文,使用该对象能够訪问页面中的共享数据。

request对象

javax.servlet.http.HttpServletRequest的实例。该对象封装了一次请求。client请求的參数都被封装在这个对象里。

response对象

javax.servlet.http.HttpServletResponse的实例,代表服务器对client的响应,通常非常少使用该对象直接响应,而是使用out对象,除非须要生成非字符响应。

session对象

javax.servlet.http.HttpSession的实例。该对象代表一次会话,当client浏览器与网站连接时,会话開始,当client关闭浏览器是会话结束。

深入理解JSP的更多相关文章

  1. JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期

    JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期. JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成ser ...

  2. 曾经大量使用的Model1开发模式,虽不常用,但可以帮我们理解JSP

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513394762370777604/ 1.<JSP页面实际上就是Servlet> 2.<JSP页 ...

  3. JSP的执行原理、JSP的内置对象、四大作用域解析、MVC模式理解>从零开始学JAVA系列

    目录 JSP的执行原理.JSP的内置对象.四大作用域解析.MVC模式理解 JSP的执行原理 这里拿一个小例子来解析JSP是如何被访问到的 首先将该项目部署到tomcat,并且通过tomcat启动 通过 ...

  4. JSP网站开发基础总结《八》

    JSP的学习总结到本篇已经八篇了,内容比较多,但都是实战,本篇最后为大家介绍一个小效果:百度分页.就是当我们遍历的数据对象较多时,这时我们就会看到了这个效果了,那他是如何实现的呢?下面我们就一起学习一 ...

  5. javaweb回顾第七篇jsp

    1:为什么会有JSP jsp全名(java server pages)中文叫做java服务器页面.在Servlet那一篇我们发现用Servlet可以生成动态页面,但是我们却在Servlet中却写了大量 ...

  6. Web---JSP注册技术的的演绎(3代)-JSP/EJB/Servlet/POJO/JavaBean

    我们可以这么理解JSP注册技术的发展过程: 第一代JSP技术:纯JSP开发. 第二代JSP技术:JSP+EJB开发. (EJB简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行.) 第三代J ...

  7. 疯狂学习java web4(jsp)

    JSP与PHP.ASP.ASP.NET等语言类似,运行在服务端的语言. JSP(全称Java Server Pages)是由Sun Microsystems公司倡导和许多公司参与共同创建的一种使软件开 ...

  8. JSP运行过程 JSP脚本 静态动态包含 jsp指令 jsp内置对象jsp四大作用域 jsp动作元素 EL表达式 JSTL 设计模式 JSP开发模式 EL内置对象

    Day38 JSP JSP的运行过程具体如下: (1)客户端发出请求,请求访问JSP文件. (2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果 ...

  9. jsp篇 之 基本概念

    Jsp概念: 1.jsp是什么 jsp全称Java Server Pages,是一种[动态网页开发技术]. .html文件是静态页面 .jsp 文件是动态页面 jsp页面允许我们在html代码中[嵌入 ...

随机推荐

  1. python模块导入的方法与区别

    import ..   #导入整个模块 from .. import .. #导入模块中的类.函数或者变量 from .. import *  #导入模块中的所有公开成员 from .. import ...

  2. 聊聊keep-alive组件的使用及其实现原理

    写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出. 文章的原地址:https://github.com/a ...

  3. app.config 配置多项 配置集合 自定义配置(4) 自动增加配置项到配置文件的两种方法

    一,按照xml文件处理: 配置文件如下图(最后的图片). 自动写入configSections和configSections的实例 1.自动写入configSections Configuration ...

  4. C#图片水印代码整理

    这一段公司有个项目,客户要求上传的图片要带上自定义的水印.以前也经常和朋友讨论C#图片水印方面的问题,但是从来没有实际操作过.所以,借这次项目的机会也研究了一下C#图片水印的功能!本人参考的是disc ...

  5. java获取泛型信息

    总结一下java中获取与泛型相关的信息的知识,不如说是使用方法.网上也有很多类似的优秀文章,这里主要做一个知识的总结.通过反射获取泛型信息的常见例子: //bean package testProje ...

  6. RunLoop想入门,看这篇就够了

    前言 刚刚听到RunLoop的时候我也是一脸懵逼,这是什么,有什么用呢,逼格貌似还挺高.然后就开始尝试去搞懂它,去找博客,但是几乎所有的博客都是枯燥乏味的,都是讲概念,然后给个实例,对于我这个小白来说 ...

  7. javaweb-1-B/S初论

    一.B/S结构的基本概念 1.什么是动态网页 2.为什么需要动态网页 3.如何实现动态网页 4.为什么学习B/S技术 4.1C/S结构 优点: 1.C/S架构的界面和操作可以很丰富. 2.安全性能可以 ...

  8. [最短路]P1828 香甜的黄油 Sweet Butter

    题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ...

  9. 开源纯C#工控网关+组态软件(六)图元组件

    一.   图元概述 图元是构成人机界面的基本单元.如一个个的电机.设备.数据显示.仪表盘,都是图元.构建人机界面的过程就是铺排.挪移.定位图元的过程. 图元设计是绘图和编码的结合.因为图元不仅有显示和 ...

  10. impala基础

    impala: 查询impala表时一定要加库名使用级联删除带有表的数据库:DROP database name cascade; insert插入的两种方式: 1. insert into empl ...