第六章 JSP技术

您所在的位置:网站首页 不是jsp指令元素的是 第六章 JSP技术

第六章 JSP技术

2024-03-10 13:37| 来源: 网络整理| 查看: 265

6.1 JSP概述 6.1.1 什么是JSP

​ JSP全名是Java Server Pages,它是建立在Servlet范围之上的动态网页开发技术。在JSP文件中,HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。为了与传统的HTML有所区别,JSP文件的扩展名为.jsp。

JSP技术所开发的Web应用是基于Java的,它可以用一种简捷而快速的方法从Java程序生成Web页面,其使用上具有如下几点特征。

跨平台性 ,业务和代码相分离,组件重用,预编译 6.1.2 JSP运行原理

​ JSP的工作模式是请求/响应模式,客户端首先发出HTTP请求,JSP程序收到请求后进行处理并返回处理结果。在一个JSP文件第1次被请求时,JSP引擎(容器)把该JSP文件转换成为一个Servlet,而这个引擎本身也是一个Servlet。

img

JSP的运行过程具体如下:

(1)客户端发出请求,请求访问JSP文件。

(2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果发现JSP文件中存在任何语法错误,则中断过程,并向服务器和客户端返回出错信息。

(3)如果转换成功,则JSP容器将生成的Java源文件编译成相应的字节码文件*.class。该class文件就是一个Servlet,Servlet容器回想处理其他Servlet一样来处理它。

(4)由Servlet容器加载转换后的Servlet类(.class文件)创建一个该Servlet(JSP页面的转换结果)实例,并执行Servlet的JSPInit()方法**。jspInit()方法在Servlet的整个生命周期中只会执行一次**。

(5)执行jspService()方法来处理客户端的请求。对于每一个请求,JSP容器都会创建一个新的线程来处理它。如果多个客户端同时请求该JSP文件,则JSP容器也会创建多个线程,使得每一个客户端同时请求该JSP文件,则JSP容器也会创建多个线程,使得每一个客户端请求都对应一个线程。JSP运行过程中采用的这种多线程的执行方式可以极大地降低对系统资源的需求,提高系统的并发量并缩短响应时间。需要注意的是,由于第(4)步生成的Servlet是常驻内存的,所以响应速度非常快。

(6)如果JSP文件被修改了,则服务器将根据设置决定是否对该文件重新编译。如果需要重新编译,则使用重新编译后的结果取代内存中常驻的Servlet,并继续上述处理过程。

(7)虽然JSP效率很高,但在第1次调用的时候往往由于需要转换和编译,所以会产生一些轻微的延迟。此外,有系统资源不足等原因,JSP容器可能会以某种不确定的方式将Servlet从内存中移除,发生这种情况时首先会调用jspDestroy()方法,然后Servlet实例会被加入“垃圾收集”处理。

(8)当请求处理完成后,响应对象由JSP容器接收,并将HTML格式的响应信息发送回客户端。

​ 了解了JSP的运行原理后,完全可以利用其中的一些步骤来做一些工作,如:可以在jspInit()中进行一些初始化工作(建立数据库的连接、建立网络连接、从配置文件中获取一些参数等),可以在jspDestroy()中释放相应的资源等。

6.2 JSP基本语法 6.2.1 JSP脚本元素

JSP脚本元素是指嵌套在之中的一条或多条Java程序代码。通过JSP脚本元素都可以将Java代码嵌入到HTML页面中,所有可执行的Java代码,都可以通过JSP脚本来执行。

1.JSP Scriptlets

​ 主要用来输出内容,也可以定义属性,但是不可以定义方法。其中的变量为局部变量。

2.JSP 声明语句

​ 主要用来定义成员变量属性(类的属性)和方法(全局方法/类的方法),不可以用来输出。在一个JSP页面中可以有多个JSP声明语句,单个声明中的Java语句可以是不完整的,但是多个声明组合后的结果必须是完整的Java语句。

3.JSP 表达式

​ 用于将**程序数据(转换成字符串)**输出到客户端。JSP表达式中的变量或表达式后面不能有分号(;)。

6.2.2 JSP 注释 6.3 JSP 指令

用来设置页面中的信息。

img 6.3.2 include 指令

​ 用于在JSP页面静态包含一个文件。

注意:

(1)被引入的文件必须遵循JSP语法,其中的内容可以包含静态HTML,JSP脚本元素和JSP指令等普通JSP页面所具有的一切内容。

(2)除了指令元素外,被引入的文件中的其他元素都被转换成相应的Java源代码,然后插入当前JSP页面所翻译成的Servlet源文件中,插入位置与include指令在当前JSP页面中的位置保持一致。

(3)file属性的设置值必须使用相对路径,如果以“/”(一般不用)开头,表示相对于当前Web应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件.需要注意的是,这里的file属性指定的相对路径是相对于文件(file),而不是相对于页面(page)。

6.4 JSP 隐式对象 6.4.1 隐式对象的概述

​ JSP为简化频繁使用的对象的创建而默认创建的9个对象,可以直接在JSP页面中使用。

img 6.4.2 out 对象

向客户端发送文本内容类型为JspWriter,它相当于一种带缓存功能的PrintWriter。

img

​ 在JSP页面中,通过out隐式对象写入数据相当于将数据插入到JspWriter对象的缓冲区中,只有调用了ServletResponse.getWriter()方法,缓冲区中的数据才能真正写入到Servlet引擎所提供的缓冲区中。out对象通过print语句写入数据后,直到整个JSP页面结束,out对象中输入缓冲区的数据(即first line)才能真正写入到Servlet引擎提供的缓冲区中。而response.getWriter().println();语句则是直接把内容(即second line)写入Servlet引擎提供的缓冲区中,Servlet引擎按照缓冲区中的数据存放顺序输出内容。

使用page指令设置out对象的缓冲区大小通过page指令中操作缓冲区的buffer属性可以直接将数据写入到Servlet引擎提供的缓冲区中。 6.4.3 pageContext 对象

​ pageContext对象时javax.servlets.jsp.PageContext类的实例对象,它代表当前JSP页面的运行环境,并提供了一系列用于获取其他隐式对象的方法。

img

pageContext还提供了通过操作属性来存储数据的功能。

img

pageContext对象的作用范围有4个值。(由小到大如下)

pageContext.PAGE_SCOPE:表示页面范围。pageContext.REQUEST_SCOPE:表示请求范围。pageContext.SESSION_SCOPE:表示会话范围。pageContext.APPLICATION_SCOPE:表示Web应用程序范围。 6.4.4 exception 对象

​ 用于封装JSP中抛出的异常信息。需要注意的是exception对象只有在错误处理页面才可以使用(即page指令中指定了属性****)。

6.5 JSP 动作元素

​ JSP动作元素用来控制JSP的行为,执行一些常用的JSP页面动作。

6.5.1 jsp:include动作元素

​ 可以把其他资源的输出内容插入到当前JSP页面的输出内容中。

​ page属性用于指定被引入资源的相对路径;flush属性(默认false)用于指定是否将当前页面的输出内容刷新到客户端。

Title 下面包含被引用的include指令 jsp_显示时间

​ 当浏览器第1次请求一个使用jsp:include包含其他页面的页面时,Web容器首先会编译被包含的页面,然后将编译处理后的返回结果包含在页面中,之后编译包含页面,最后将两个页面组合的结果回应给浏览器。

include指令和jsp:include标签都能够包含一个文件,但它们之间有很大的区别如下:

​ jsp:include标签中要引入的资源和当前JSP页面是两个彼此独立的执行实体,即被动态引入的资源必须能够被Web容器独立执行。而include指令只能引入遵循JSP格式的文件。 ​ jsp:include标签中引入的资源是在运行时才包含的,而且只包含运行结果。而include指令引入的资源是在编译时期包含的,包含的是源代码。 ​ jsp:include标签运行原理RequestDispatcher.include()方法类似,即被包含的页面不能改变响应状态码或者设置响应头,而include指令没有这方面的限制。

6.5.2 jsp:forward动作元素

​ 将当前请求转发到其他Web资源(HTML页面、JSP页面和Servlet等),在执行请求转发之后的当前页面将不再执行,而是执行该元素指定的目标页面。page属性用于指定请求转发到的资源的相对路径,该路径是相对于当前JSP页面的URL。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3