《Servlet和JSP学习指南》一3.6 动作

3.6 动作

第三种句法元素是动作(Action),它们被编译成执行某个操作的Java代码,例如访问某个Java对象,或者调用某个方法。本节讨论必须能被所有JSP容器支持的标准动作。除标准动作之外,还可以创建定制的标签,用来执行某些操作。定制标签将在第6章中讨论。
下面列举部分标准动作。doBody和invoke这两个标准动作将在第7章中讨论。

3.6.1 useBean

这个动作将创建一个与某个Java对象相关的脚本变量。它是将表现逻辑与业务逻辑分隔开来的最容易的方法之一。但是有了像定制标签和Expression Language这类技术之后,现在已经很少使用useBean了。
举个例子。代码清单3-9中的useBeanTest.jsp页面创建了一个java.util.Date实例,并将它与脚本变量today关联起来,之后将它用在一个表达式中。

在Tomcat中,这个动作会被编译成下面的代码:

运行这个页面之后,将会在浏览器中输出当前的日期和时间。

3.6.2 setProperty和getProperty

setProperty 动作是在一个Java对象中保存一个属性,getProperty则是获取一个Java对象的属性。举个例子,代码清单3-11中的getSetPropertyTest.jsp页面保存和输出Employee类实例的firstName属性,具体如代码清单3-10所示。

3.6.3 include

include动作用于动态地包含另一个资源,它可以包含另一个JSP页面、一个Servlet或者一个静态的HTML页面。例如,代码清单3-12中的jspIncludeTest.jsp页面就是利用include 动作来包含menu.jsp页面的。

理解include指令和include 动作之间的区别是很重要的。使用include指令时,这种包含是发生在页面转换的时候,例如JSP容器将页面转换成一个生成的Servlet的时候。使用include 动作时,这种包含则是发生在请求的时候。因此,可以利用include 动作传递参数,而不是利用include指令。
第二个区别在于,使用include指令时,被包含资源的文件扩展名并不重要。而使用include 动作时,文件扩展名则必须为jsp,以便它能够作为一个JSP页面进行处理。例如,在include 动作中用jspf作为扩展名时,将会使得这个JSP segment被当作静态文件进行处理。

3.6.4 forward

forward 动作是将当前页面跳转到另一个不同的资源。例如,下面的forward 动作就是将当前页面跳转到login.jsp页面。

3.6.5 错误处理

在JSP中错误处理支持得很好。你可以利用try语句处理Java代码,也可以指定一个页面,让它在应用程序遇到未捕捉的异常时显示出来。那么,一旦发生异常,用户将会看到一张经过精心设计的页面,解释目前发生了什么状况,而不是用一条错误消息打发用户,让他们皱眉不已。
利用page指令的isErrorPage属性,就可以把一个JSP页面变成一个错误处理页面,该属性值必须为true。代码清单3-13展示了这样一个错误处理程序。

要防止未捕捉异常的其他页面则必须使用page指令的errorPage属性,将路径引向属性值指定的错误处理页面。例如,代码清单3-14中的buggy.jsp页面就是利用了代码清单3-13的错误处理程序。

如果运行这个buggy.jsp页面,它就会抛出一个异常。但你不会看到Servlet/JSP容器产生的错误消息,而是会看到errorHandler.jsp页面显示的内容。

时间: 2024-09-23 19:06:40

《Servlet和JSP学习指南》一3.6 动作的相关文章

《Servlet和JSP学习指南》一导读

前 言 欢迎你阅读本书,其内容涵盖了Servlet 3.0和JSP 2.2方面的技术. Java Servlet技术,或简称Servlet,是Java中用于开发Web应用程序的基本技术.Sun公司于1996年发布了Java Servlet技术,与CGI(Common Gateway Interface,公共网关接口)形成竞争.之后,它成为在Web中生成动态内容的标准.CGI的主要问题在于,它为每一个HTTP请求都创建一个新的进程.因为创建进程需要花费大量的CPU周期,这使得编写可扩展的CGI程序

《Servlet和JSP学习指南》一第3章 JSP 3.0

第3章 JSP 在第1章中我们已经知道,Servlet有两个缺陷无法克服.第一,在Servlet中编写的所有HTML标签都必须包在Java字符串中,这使得发送HTTP响应变成一项十分烦琐的工作.第二,所有文本和HTML标签都必须进行硬编码:因此,即使只对表示层做极其微小的修改,例如,修改背景颜色,也需要重新编译.JavaServer Pages(JSP)解决了Servlet中的这两个问题.但是,JSP并没有取代Servlet,而是对它进行了补充.现代的Java Web应用程序都使用Servlet

《Servlet和JSP学习指南》一1.3 编写基础的Servlet应用程序

1.3 编写基础的Servlet应用程序 Servlet应用程序编写起来非常简单,只需要创建一个目录结构,并将Servlet类放在某一个目录下即可.在本节中,将学习如何编写一个简单的Servlet应用程序,将它命名为app01a.最初它只包含一个Servlet:MyServlet,其会给用户发送一条问候信息. 需要用一个Servlet容器来运行Servlet.Tomcat是一个开源的Servlet容器,可以免费获得,它也可以在能够使用Java的任何操作系统平台上运行.如果你还没有安装Tomcat

《Servlet和JSP学习指南》一1.9 HTTP Servlet

1.9 HTTP Servlet 我们所编写的Servlet应用程序,尽管不能说全部,但其中大多数要用到HTTP.这意味着,可以利用HTTP提供的特性.javax.servlet.http包是Servlet API中的第二个包,其包含了编写Servlet应用程序的类和接口.javax.servlet.http中的许多类型覆盖了javax.servlet中的类型. 图1-5展示了javax.servlet.http中的主要类型. 1.9.1 HttpServlet HttpServlet类覆盖ja

《Servlet和JSP学习指南》一3.1 JSP概述

3.1 JSP概述 JSP页面其实是一个Servlet.但是,使用JSP页面则比Servlet要容易得多,这有两个原因:第一,不需要编译JSP页面:第二,JSP页面一般是扩展名为jsp的文本文件,可以利用任何文本编辑器来编写. JSP页面是在JSP容器中运行的.Servlet容器一般也是JSP容器.例如,Tomcat就是一个Servlet/JSP容器. 第一次请求一个JSP页面时,Servlet/JSP容器要做两件事情: 1. 将JSP页面转换成一个JSP页面实现类,这是一个实现javax.se

《Servlet和JSP学习指南》一3.5 脚本元素

3.5 脚本元素 第二种JSP句法元素是脚本元素,它将Java代码合并成一个JSP页面.脚本元素有3种类型:Scriptlet.声明及表达式,这些都将在接下来的小节中讨论. 3.5.1 Scriptlet Scriptlet是一个Java代码块,它以<%开头,以%>结束.例如,代码清单3-6中的scriptletTest.jsp页面就是使用了Scriptlet. 上述JSP页面中有两个Scriptlet.注意,在一个Scriptlet中定义的变量,对于它后面的其他Scriptlet是可见的.

《Servlet和JSP学习指南》一3.4 指令

3.4 指令 指令(Directive)是第一种JSP句法元素,其指示JSP转换器应该如何将某个JSP页面转换成Servlet的命令.JSP 2.2中定义了几个指令,但最重要的是这两个:page和include,这些在本章中都会讨论到.其他章节中还会讲到的其他指令有:taglib.tag.attribute及variable. 3.4.1 page指令 利用page指令可以就当前JSP页面的某些方面对JSP转换器提出指示.例如,可以告诉JSP转换器隐式对象out应该使用多大容量的缓存区,要使用哪

《Servlet和JSP学习指南》一3.3 隐式对象

3.3 隐式对象 Servlet容器将几个对象传给它所运行的Servlet.例如,在Servlet的service方法中获得HttpServletRequest和HttpServletResponse,并在init方法中获得ServletConfig.此外,还可以通过在HttpServletRequest对象中调用getSession获得一个HttpSession. 在JSP中,可以通过使用隐式对象来获取那些对象.表3-1列出了隐式对象. 例如,隐式对象request表示由Servlet/JSP

《Servlet和JSP学习指南》一2.4 HttpSession对象

2.4 HttpSession对象 在所有的Session追踪技术中,HttpSession对象是最强大的,也是功能最多的.用户可以没有或者有一个HttpSession,并且只能访问他/她自己的HttpSession. HttpSession是当一个用户第一次访问某个网站时自动创建的.通过在HttpServlet-Request中调用getSession方法,可以获取用户的HttpSession.getSession有两个重载方法: 无参的getSession方法返回当前的HttpSession