第22章 JSP技术简介
Internet已经发展成为电子商务、电子政务、应用系统等Web应用的基础设施。基于Web的应用程序称为浏览器/服务器模式,即B/S模式。跟传统的服务器/客户端模式相比,B/S结构的管理和部署都非常简单。要开发Web应用程序,传统的HTML已经不能满足要求,需要一些语言用于动态的处理用户请求。目前,生成动态网页的方法有CGI、ASP、PHP和JSP。其中JSP是基于Java的,本章主要介绍JSP的知识。
22.1 JSP综述
JSP是Java Server Page的缩写。它是SUN公司推出的一门基于Java的Web动态页面技术。JSP为创建动态的Web应用程序提供了简介快速的方法,而且继承了Java“一次编写,处处运行”的特性。它既与硬件平台无关,也同操作系统和Web服务器无关。
22.1.1 什么是JSP技术
JSP是Java Server Page的缩写。它是SUN公司推出的一门基于Java的Web动态页面技术。JSP为创建动态的Web应用程序提供了简介快速的方法,而且继承了Java“一次编写,处处运行”的特性。它既与硬件平台无关,也同操作系统和Web服务器无关。
22.1.2 JSP技术和ASP技术比较
JSP技术和ASP技术有许多相似的地方,二者将页面逻辑设计和页面布局设计分离开。但二者的不同点也有很多,ASP是微软公司独自开发的,通常仅能运行在Windows平台,与微软的服务器IIS搭配使用。对每个客户端请求,ASP解释程序都会产生一个新的线程解释和执行。ASP都采用COM技术实现软件的重利用,但是由于COM技术非常复杂,开发难度比较高。在数据库处理方面,ASP采用ADO技术,通过ODBC来访问数据库。
JSP的核心技术是Servlet。对于Servlet程序,服务器仅需要加载一次,后续的请求用一个线程处理。当收到第一次请求时,先将其转换为Servlet,然后解释为Java字节码,在由Java虚拟机解释执行,当再次接受到请求的时候,不需要再次转换和编译而直接执行其字节码。软件构建方面,JSP主要采用JavaBean,相比较COM技术简单了很多。
22.1.3 JSP技术和PHP技术比较
PHP是一种开放源代码的、跨平台的、服务器端嵌入的动态网页开发技术。PHP通过在不同的平台上重新编译来适应不同平台之间的差异,以此来满足跨平台型的要求。
JSP技术的跨平台性是基于Java技术的。构建在Java虚拟机平台之上,几乎不需要对其进行改动。JSP技术是采用JDBC来访问数据库的,对于不同的数据库操作只需要改动很少的部分,甚至是不需要修改。表21.1是对这几种技术的比较。
22.2 JSP技术开发环境
JSP的运行环境的除了Java环境外还需要有一个服务器,本节使用服务器是Tomcat。本节主要介绍JSP开发环境的搭建,使用的服务器是Tomcat,并用JSP实现了简单的HelloWorld程序。搭配完配置环境后就可以进行JSP的开发了。
22.2.1 Tomcat的安装及配置
Tomcat是一个开源项目,它是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器,本书使用的就是该服务器。
22.2.2 简单的JSP小程序
本小节通过一个简单的程序来说明JSP的各个元素。
(1)在C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT(当然前提是Tomcat安装在默认的目录下面,如果安装在别的目录当然不同)下建立Test.jsp。
22.3 JSP基本语法
JSP是基于Java的,它的大部分特性跟Java是相同的。所以对于它的基本语法就不再需要介绍,本节将会介绍在JSP的的一些基本语法元素。读者需要仔细的了解这些内容,这些内容在前面是没有介绍过的。
22.3.1 注释
在JSP中语法有两种,一种是输出到客户端的注释,另一种是不输出到客户端的注释。
1.输出到客户端的注释
2.不输出到客户端的注释
22.3.2 声明元素
在JSP中,Java脚本是放在“<%%>”中的,所有的代码都可以放在其中,但是JSP提供了更专业一点的声明格式:
<%! 声明的内容 %>
在这个声明块中,可以声明变量,也可以声明方法。
1.声明变量
2.声明方法
22.4 JSP指令元素
JSP指令元素用来和JSP引擎进行交流。主要用来说明如何处理JSP页面,如错误处理、包含文件以及对文件文件编码的指定。JSP指令元素主要包括page指令和include指令,本节会对这两种指令进行介绍。
22.4.1 page指令
page指令用来指定JSP页面的属性,如脚本语言、编码方式、错误处理页面等。
1.page指令格式
2.page指令内容
22.4.2 include指令
include指令用于将另一个文件的内容添加到当前页面中。添加的文件可以是HTML文件也可以JSP文件或是txt等文件。
22.5 JSP动作元素
JSP动作元素是用来控制JSP引擎的行为。例如将请求转到另一个页面,设置页面提交的参数,使用JavaBean等。主要的动作有param、forward、include、useBean、setProperty和getProperty等动作,它们在JSP编程中是非常重要的。
22.5.1 param动作
param动作用于为页面重定向提供参数值,主要用于后边涉及到的几个动作。其一般使用的格式如下:
<jsp: param name=属性名 value=属性值/>
设置的属性值可以用requset.getParameter(属性名)获得参数的值,例如:
<jsp: param name=”name” value=”lancy”/>
可以通过requset.getParameter(name)得到值“lancy“。
22.5.2 forward动作
通过forward动作,可以从一个页面转到另一个页面。即结束一个页面而转到另一个网页,它一般的使用格式如下:
<jsp: forward page=文件名>
param元素
</jsp:forward>
22.5.3 include动作
include动作用于在动态生成页面的时候,插入另一个文件的内容。
include指令和include动作都能把另一个文件的内容插入到当前文件中来。但是由于include指令是在将JSP编译成Servlet的时候,所以另一个文件的改动内容不会反映到当前文件中。而include动作是发生在页面请求的时候,它可以把另一个文件的改动内容反映到当前文件中。
22.5.4 useBean动作
在JSP中可以使用Java类,在JSP中可以使用它的功能。本小节通过一个简单的程序来演示它的使用。
22.5.5 setProperty动作
setProperty用来设定javaBean属性的值,它的使用格式如下:
<jsp:setProperty name=javaBean名称
property=属性名
value=属性值
/>
name指定使用的JavaBean名,property是JavaBean里属性值,通过value给该属性赋值。
22.5.6 getProperty动作
通过getProperty动作可以取出javaBean的属性值,并转换为字符串输出到当前页面。getProperty动作的语法格式如下:
<jsp:getProperty name=javaBean名称 property=属性名>
22.6 JSP内建对象
在JSP页面中,用户可以建立自己的对象。除此之外,JSP规范中还预先定义了一些规范,用户不需要创建就存在的对象,即JSP内建对象。JSP中共有9种内建对象,本节内容会对这9种对象就行简单的介绍。
22.6.1 request对象
与request相联系的是HttpServletRequest类。它是触发该页面请求的类,代表了进入页面的数据,提供可与请求相关的全部信息。包括源代码、头信息和cookie等与请求有关的参数,作用范围是一个页面。
22.6.2 response对象
response对象与HttpServletResponse相联系。在JSP中response对象一个关键应用就是通过response.addCookie()函数将cookie对象加入response中,通过response.sendRedirect()将响应传递至另一个JSP页面。
22.6.3 out对象
out对象是使用PrintWriter类来将信息发送输出到客户端。起作用范围是在页面内,可以利用指令元素page属性来调整缓冲区大小。
22.6.4 session对象
session对象用来代表当前会话,是用户和服务器间进行交互的消息。包括了用户的请求,只要服务器能收到用户的请求,这个session就会一直存在,session有一定的生命时间,超过这段时间用户没有发出新的请求,则当前session就会自动关闭。
session对象主要用来存放会话的信息,如用户名等信息,也可以用它来实现购物车的应用,把用户想要订购的东西放入到session中,保存下来就是。
22.6.5 application对象
application对象代表了JSP页面的应用,是ServeletContext类的对象。可以通过如下格式来建立application对象的变量。
application.setAttribute(变量名,变量值)
取得application对象的变量值使用如下格式:
application.getAttribute(变量名)
22.6.6 config对象
config对象是ServletConfig类的一个对象。它以初始化参数的形式存储,由JSP页面编译而成的servlet配置参数,由于JSP页面很少和初始化参数打交道,所以该对象很少被使用到。
22.6.7 pageContext对象
pageContext对象是javax.servlet.jsp.PageContext类的一个对象。通过该对象可以访问其它的内建对象,如getResponse()能返回当前的response对象,getRequest()能返回当前request对象。也可以建立pageContext对象变量,使用下面的格式进行设置和访问:
pageContext.setAttribute(变量名,变量值)
取得application对象的变量值使用如下格式:
pageContext.getAttribute(变量名)
21.6.8 page对象
page对象用来表示JSP页面本身,表示将JSP编译成servlet的一个对象,通过该对象可以调用servlet中的所有方法,其作用相当于Java中的this,该对象很少被用到。
22.6.9 exception对象
该对象代表了JSP页面中的异常处理,仅仅在处理错误的页面有效,可以用它来捕获异常并进行处理。跟Java不同的是,该对象实际很少被使用。
22.7 小结
本章的内容主要是JSP技术,实际上JSP技术现在已经很少被单独的使用,而是和流行的struts等框架结合使用。但是JSP是这些技术的基础内容,只有掌握了这些基础的知识,才能更深入的了解那些高级的知识并能举一反三,否则学到的东西只能是空中楼阁。作为一门完整的技术,想用短短一章的内容来介绍完全几乎是不可能的事情。但是本书通过一些简单小例子对JSP中的主要的内容进行了简单的介绍,虽然是比较简单,但是已经涵盖了它们的基本功能,读者如果想深入了解JSP技术,可以阅读其它的相关专门的JSP教程。