欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

深入理解JSP

程序员文章站 2024-02-03 11:54:28
jsp(java server page)是java ee规范最基本成员,他是java web开发的重点知识,虽然我们一直在用,但其原理知之甚少。今天重点研究一些jsp核心内容以及其工作原理。 js...

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注释用于标注过程中的开发提示,不会输出到客户端。<%-- 注释内容 --%>

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到客户端执行。

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..jspwriter的实例,该实例代表jsp的输出流,用于输出内容,形成html页面。

page对象

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

pagecontext对象

javax.servlet.jsp.pagecontext的实例。该对象代表jsp页面的上下文,使用该对象可以访问页面中的共享数据。

request对象

javax.servlet.http.httpservletrequest的实例,该对象封装了一次请求,客户端请求的参数都被封装在这个对象里。

response对象

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

session对象

javax.servlet.http.httpsession的实例,该对象代表一次会话,当客户端与站点连接时,会话开始,当客户端关闭浏览器是会话结束。