JSP服务端页面技术

JSP

JSP页面就是带有JSP元素的常规Web页面,它由静态内容和动态内容构成。其中,静态内容指HTML元素,动态内容(JSP元素)包括指令元素、脚本元素、动作元素、注释等内容。

JSP简介

JSP就是Servlet的一个子类或者说就是一种Servlet。
JSP即Java Server Pages,它是建立在Servlet规范之上的动态网页开发技术。在JSP文件中,HTML代码也java代码同在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。为了与传统HTML有所区别,JSP文件的扩展名为.jsp。
JSP技术所开发的Web应用程序是基于Java的,它可以用一种简洁而快速的方法从java程序生成Web页面,其使用具有如下几点特征:

  • 跨平台:由于JSP是基于Java语言的,它可以使用Java API,也具有java一次编译多次运行的特点。
  • 业务代码分离:在使用JSP技术开发Web应用时,可以将页面的开发与应用程序的开发分离开。开发人员使用HTML来设计界面,使用JSP标签和脚本程序来动态生成页面上的内容。在服务器端,JSP引擎(这里指Tomcat)负责解析JSP标签和脚本程序,生成所请求的内容,并将执行结果,以HTML页面的形式返回到浏览器。
  • 组件重用:JSP中可以使用JavaBean编写业务组件,也就是使用一个JavaBean类封装业务处理代码或者作为一个数据存储模型,在整个项目都可以重复使用这个JavaBean,同时,JavaBean也可以应用到其他Java应用程序中
  • 预编译:预编译就是在用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,并且仅执行一次编译,编译好的代码江别保存,下次访问直接访问编译好的代码,这样可以提高服务端访问速度且节约服务器CPU资源

JSP运行原理

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

在这里插入图片描述

JSP的运行过程具体如下:

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

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

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

JSP脚本元素

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

JSP脚本元素主要包含如下三种类型:

  • JSP Scriptlets
  • JSP 声明语句
  • JSP 表达式
1.JSP Scriptlets

JSP Scriptlets是一段代码段。当需要使用Java实现一些复杂操作或控制时,可以使用它。JSP Scriptlets的语法格式如下所示:

<%java 代码(变量、方法、语句等)%>
在JSP Scriptlets 中声明的变量是JSP页面的局部变量,调用JSP Scriptlets时,会为局部变量分配内存空间,调用结束后,释放局部变量占有的内部空间。

2.JSP 声明语句

JSP的声明语句用于声明变量和方法,它以“<%!”开始,以“%>”结束,其语法格式如下所示

<%!
定义的变量或方法等
%>

在上述语法格式中,被声明的Java代码被编译到Servlet的_jspServlet()方法之外,即在JSP声明语句中定义的都是成员方法,成员变量、静态方法、静态变量、静态代码块等,在JSP声明语句中声明的方法,在整个JSP页面内有效。
在一个JSP页面中可以有多个JSP声明语句,单个声明中的Java可以不完整,但多个声明组合后的结果必须时完整的java语句。

标题

在这里插入图片描述
在这里插入图片描述
首先使用<%! 和%>定义了两个变量a 、b以及print()方法,然后使用了<% 和%>输出了两个常量的和,以及print()方法中的返回信息。启动项目后,在浏览器地址栏中输入url地址,访问jsp文件。
注意<%!和%>里面定义的变量是成员变量,方法是全局的方法,此处只是“声明",也就是定义,变量或方法都没有被调用。<%和%>里面定义的是局部变量,不能定义方法(因为Java方法中不能再嵌套定义方法),代码块操作可以将结果输出到浏览器。总之,<%!和%>是用来定义成员变量属性和方法的,<%和%>主要是用来输出内容的,因此如果涉及到了成员变量的操作,那么应该使用<%!和%>,而如果是涉及到了输出内容的时候,就使用<%和%>。

3.JSP表达式

用于将程序数据输出到客户端,它将要输出的变量或者表达式直接封装在以“<%=”开头和以“%>”结尾的标记中,其基本的语法格式如下所示:

<%= expresson %>

在上述语法格式中,JSP表达式中的将“expression”表达式结果暑促和到浏览器。例如,将body中的元素修改为如下:

<%=a+b %>
<%=print()%>

浏览器中再次访问上述jsp同样可以得到原来的结果。
注意:

  • “<%=”和“%=>”标记之间插入的是表达式,不能插入语句;
  • “<%=”是一个完整的符号,“<%”和“=”之间不能有空格;
  • JSP表达式中的变量或表达式后面不能有分号;

JSP注释

同其他各种编程语言语言,JSP也有自己的注释方式,其基本语法格式如下:

<%–注释信息–%>
需要注意的是Tomcat在将JSP页面翻译成Servlet程序时,会忽略JSP页面中被注释的内容,不会将其翻译到客户端。

在这里插入图片描述
启动Tomcat服务器,在浏览器中输入url访问jsp页面,再右键查看源代码,发现只能看到HTML的注释,看不到jsp的注释。

JSP注释、Java注释、HTML注释对比:

<%–jsp注释–%>
<% //java注释 %>
<!–html注释 -->
在这里插入图片描述

JSP指令

为了设置JSP页面中的一些信息,Sun公司提供了JSP指令,JSP2.0提供了page、include和taglib三种指令,每种指令都定义了各自的属性。接下来主要讲一下page和include指令。

page指令

在JSP页面中,经常需要对页面的某些特性进行描述,例如,页面的编码方式,JSP页面采用的语言等,这时可以通过page指令来实现,格式如下:

<%@ page 属性名 1=“属性值1” 属性名2=“属性值2”…%>

在上面的语法格式中,page用于声明指令名称,属性用来指定JSP页面的某些特性。page指令提供了一系列与JSP页面相关的属性:如下图所示:
在这里插入图片描述
除了import包之外其他属性都只能出现一次,page指令的属性名称都是区分大小写的。且page指令对整个页面都有效,而且与其书写的位置无关,但是习惯上把page指令写在JSP页面的最前面。
例子:
在这里插入图片描述

include指令

实际开发时,有时需要在JSP页面静态包含一个文件,例如HTML文件,文本文件等,这时,可以通过include指令来实现,include指令的具体语法格式如下所示:

<%@ include file==“被包含的文件地址”%>

include指令只有一个file属性,该属性用来指定插入到JSP页面目标位置的文件资源
**例子:**include.jsp文件中使用include指令将date.jsp文件包含其中
在这里插入图片描述
在这里插入图片描述
启动tomcat服务器,在浏览器中输入地址,浏览器的显示结果如图
在这里插入图片描述
注意:

  1. 被引入的文件必须遵循JSP语法,其中的内容可以包含静态HTML、JSP脚本元素和JSP指令等普通JSP页面所具有的一切内容。
  2. 除了指令元素(page指令,include指令)之外,被引入的文件中的其他元素都被转换成相应的Java源代码,然后插入位置与include指令在当前JSP页面中的位置保持一致。

JSP内置对象

内置对象的概述

在JSP页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象则会非常麻烦。为了简化Web应用程序的开发,JSP2.0提供了9个隐式(内置)对象,他们是JSP默认创建的,可以直接在JSP页面中使用。这9个隐式对象如下表所示:
在这里插入图片描述
out、request、response、config、session、application、page、pageContext、exception。由于request、response、config、session和application所属的类及其用法在前面的章节都已经讲解过了,而page对象在JSP页面中很少被用到。因此下面将对out和pageContext对象进行详细的讲解。

out对象

在JSP页面中,经常需要向客户端发送文本内容,这时,可以使用out对象来实现。out对象是javax.servlet.jsp.JspWriter类的实例对象,它的作用于ServletResponse.getWriter()方法返回的PrintWriter对象非常相似,都是用来向客户端发送文本形式的实体内容。不同的是,out对象的类型为JspWriter,它相当于一种带缓冲功能的PrintWriter。接下来,通过一张图来描述JSP页面的out对象于Servlet引擎提供的缓冲区之间的工作关系,如下如图所示:
在这里插入图片描述
从上图可以看出,在JSP页面中,通过out隐式对象写入数据相当于将数据插入到JspWriter对象的缓冲区中,只有调用了ServletResponse.getWriter()方法,缓冲区中的数据才能真正写入到Servlet引擎所提供的缓冲区。
实例:

在这里插入图片描述
启动Tomcat服务器,在浏览器地址栏中访问该jsp的url地址,结果如图
在这里插入图片描述
从图中可以看出,尽管out.println语句位于response.getWriter().println语句之前,但它的输出内容却在后面。由此可以说明,out对象通过print语句写入数据后,直到整个JSP页面结束,out对象中输入缓冲区的数据(即first line)才真正写入Servlet引擎提供的缓冲区中,而response.getWriter().println语句则是直接把内容(second line)写入Servlet引擎按照缓冲区中的,Sevlet引擎按照缓冲区中的数据存放顺序输出内容。

pageContext对象

在JSP页面中,使用pageContext对象可以获取JSP的其他八个隐式对象。PageContext对象是javax.servlet.jsp.PageContext类的实例对象,它代表当前JSP页面的运行环境,并提供了一系列用于获取其他饮食对象的方法。PageContext对象获取隐式对象的方法,如下表所示:
在这里插入图片描述
表中列举了pageContext获取其他隐式对象的方法,这样,当传递一个pageContext对象就可以轻松的获取其他8个隐式对象了。
pageContext对象不仅提供了获取隐式对象的方法,还提供了存储数据的功能。PageContext对象存储数据是通过操作属性来是实现的,表1-4列举了pageContext操作属性的一系列方法,具体如下:setAttribute、getAttribute、removeAttribute、findAttribute
在这里插入图片描述
上表列举了pageContext对象操作属性的相关方法,其中参数name指定的是属性名称,参数scope指定的是属性的作用范围。pageContext 对象的作用范围有4个值,具体如下:

  • PageContext.PAGE_ SCOPE:表示页面范围
  • PageContext. REQUEST_ SCOPE:表示请求范围
  • PageContext. SESSION_ SCOPE:表示会话范围
  • PageContext APPLICATION SCOPE:表示Web应用程序范围
    范围:page<request<session<application,需要注意的是,当使用findAttribute()方法查找名称为name的属性时,会按照page、request、session和application的顺序依次进行查找,如果找到,则返回属性的名称,否则返回null。接下来,通过一个案例来演示pageContext对象的使用。
    案例:
    在day12项目的WebContent目录下创建-一个名称为pageContext.jsp的页面,编辑后代码如下所示。
    在这里插入图片描述
    在上述代码中首先使用pageContext获取了request对象,并设置page范围内属性;然后使用获取的request对象设置了request范围内属性,接下来使用pageContext对象获得page和request范围内的相应属性,最后使用JSP表达式输出数据。
    结果如下:

在这里插入图片描述

JSP的四个域范围:

PageContext常量名描述作用域名称域对象类型
PageScope当前页面中有效pageContextPageContext
RequestScope一次请求页面范围requestHttpServlet
SessionScope一次会话范围sessionHttpSession
application表示一个web项目整个web项目共享ServletContext
  • page:表示当前页,通常没用。jsp标签底层使用。
  • request:表示一次请求。通常一次请求就一个页面,但如果使用请求转发,可以设计多个页面。
  • session:表示一次会话,可以在多次请求之间共享数据。
  • application:表示一个web应用,可以在整个web项目之间共享数据。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值