JSP-Actions

在本章中,我们将讨论JSP中的Actions。这些动作使用XML语法中的构造来控制servlet引擎的行为。我们可以动态插入文件,重用JavaBeans组件,将用户转发到另一个页面或为Java插件生成HTML。

Action元素只有一种语法,因为它符合XML标准<jsp:action_name attribute = "value" />

Action元素基本上是预定义的功能。下表列出了可用的JSP操作:

语法目的
jsp:include在请求页面时包含一个文件。
jsp:useBean查找或实例化JavaBean。
jsp:setProperty设置JavaBean的属性。
jsp:getProperty将JavaBean的属性插入输出。
jsp:forward将请求者转发到新页面。
jsp:plugin生成特定于浏览器的代码,为Java插件创建OBJECT或EMBED标签。
jsp:element动态定义XML元素。
jsp:attribute定义动态定义的XML元素的属性。
jsp:body定义动态定义的XML元素的主体。
jsp:text用于在JSP页面和文档中编写模板文本。

共同属性

所有Action元素共有两个属性:id属性和scope属性。

ID属性

id属性唯一地标识Action元素,并允许在JSP页面内引用该操作。如果Action创建了对象的实例,则可以使用ID值通过隐式对象PageContext引用它。

scope属性

此属性标识Action元素的生命周期。id属性和scope属性直接相关,因为scope属性决定了与id关联的对象的寿命。scope属性具有四个可能的值:

  • page
  • request
  • session
  • application

include操作

通过此操作,您可以将文件插入到正在生成的页面中。语法看起来像这样:<jsp:include page = "relative URL" flush = "true" />

与include指令不同,include指令在JSP页面转换为servlet时插入文件,而该动作则在请求页面时插入文件。

下表列出了与include动作相关联的属性:

属性说明
page要包含的页面的相对URL。
flush布尔属性确定是否在包含资源之前清除了包含的缓冲区。

让我们定义以下两个文件(A)date.jsp和(B)main.jsp中如下:

以下是date.jsp文件的内容:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<html>
<head>
<meta charset="UTF-8">
<title>北京时间</title>
</head>
<body>
<p>北京时间: <%= (new java.util.Date()).toLocaleString()%></p>
</body>
</html>

以下是main.jsp文件的内容:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
   <head>
   	  <meta charset="utf-8" />
      <title>include Action示例</title>
   </head>
   
   <body>
      <center>
         <h2>include Action示例</h2>
         <jsp:include page = "date.jsp" flush = "true" />
      </center>
   </body>
</html>

启动tomcat,并尝试访问main.jsp。我们可以看到main.jsp把date.jsp包含了。
在这里插入图片描述

useBean操作

该useBean的动作是相当多才多艺。它首先使用id和scope变量搜索现有对象。如果找不到对象,则尝试创建指定的对象。

加载bean的最简单方法如下:<jsp:useBean id = "name" class = "package.class" />
加载Bean类后,可以使用jsp:setPropertyjsp:getProperty操作来修改和检索Bean属性。

下表列出了与useBean操作关联的属性:

属性说明
class指定Bean的完整软件包名称。
type指定将引用该对象的变量的类型。
beanName给出由java.beans.Beans类的实例化方法指定的bean名称。

JavaBean

顺便先介绍一下,什么是JavaBean:
JavaBean(一个Java类),需要满足这么2点:

  1. 由public修饰的类,并且拥有public修饰的无参构造;
  2. 所有的属性(如果有的话),都是private,并且提供set/get方法(如果是布尔类型的属性,则get方法也可以是is方法)。
    我们之前写的实体类就是JavaBean,它是用来封装数据的。

setProperty操作

该setProperty操作设置一个bean的属性。在执行此操作之前,必须预先定义Bean。有两种使用setProperty操作的基本方法:

  • 在jsp:useBean元素之后但在jsp:useBean元素之外使用jsp:setProperty,如下所示:
    <jsp:useBean id = "myName" ... /> ... <jsp:setProperty name = "myName" property = "someProperty" .../>
    在这种情况下,无论是否实例化了新bean或已找到现有bean ,都将执行jsp:setProperty。
  • 可以在其中出现jsp:setProperty的第二个上下文位于jsp:useBean元素的主体内部,如下所示:
    <jsp:useBean id = "myName" ... > ... <jsp:setProperty name = "myName" property = "someProperty" .../> </jsp:useBean>
    在这里,仅当实例化一个新对象时才执行jsp:setProperty,而不是在找到现有对象时执行。

下表列出了与setProperty操作关联的属性:

属性说明
name指定将设置其属性的bean。Bean必须已经预先定义。
property指示要设置的属性。值“ *”表示名称与bean属性名称匹配的所有请求参数都将传递给适当的setter方法。
value要分配给给定属性的值。参数的值为null,或者参数不存在,将忽略setProperty操作。
paramparam属性是请求参数的名称,该属性的值将接收。您不能同时使用value和param,但是允许两者都不使用。

getProperty操作

所述的getProperty动作用于检索一个给定的属性,并将其转换的值的字符串,并最终将其插入到输出中。

getProperty操作只有两个属性,这两个属性都是必需的。getProperty操作的语法如下:<jsp:useBean id = "myName" ... /> ... <jsp:getProperty name = "myName" property = "someProperty" .../>
下表列出了与getProperty操作关联的必需属性:

属性说明
name具有要检索的属性的Bean的名称。Bean必须已经预先定义
propertyproperty属性是要检索的Bean属性的名称。

让我们定义一个将在我们的示例中进一步使用的测试bean:

package action;
 
public class TestBean {
   private String message;
 
   public String getMessage() {
      return(message);
   }
   public void setMessage(String message) {
      this.message = message;
   }
}

现在在main.jsp文件中使用以下代码。这将加载bean并设置/获取一个简单的String参数:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
   <head>
   	  <meta charset="utf-8" />
      <title>JSP使用JavaBean</title>
   </head>
   
   <body>
      <center>
         <h2>JSP使用JavaBean</h2>
         <jsp:useBean id = "test" class = "action.TestBean" />
         <jsp:setProperty name = "test"  property = "message" 
            value = "Hello JSP..." />
            
         <p>获取message....</p>
         <jsp:getProperty name = "test" property = "message" />
      </center>
   </body>
</html>

启动tomcat,结果如下:
在这里插入图片描述
注:使用useBean操作JavaBean可以不用对该java类导包。

forward操作

forward终止当前页面的动作和将请求转发到其他资源,如静态页面,另一个JSP页面或Java Servlet中。

以下是forward的语法:<jsp:forward page = "Relative URL" />

说明:page——由另一个资源的相对URL组成,例如静态页面,另一个JSP页面或Java Servlet,为要请求转发的新页面。

让我们再次使用以下两个文件date.jsp和main.jsp中如下:

以下是date.jsp文件的内容:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<html>
<head>
<meta charset="UTF-8">
<title>北京时间</title>
</head>
<body>
<p>北京时间: <%= (new java.util.Date()).toLocaleString()%></p>
</body>
</html>

以下是main.jsp文件的内容:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
   <head>
   	  <meta charset="utf-8" />
      <title>forward Action示例</title>
   </head>
   
   <body>
      <center>
         <h2>forward Action示例</h2>
         <jsp:forward page = "date.jsp"/>
      </center>
   </body>
</html>

在这里插入图片描述
如图可知,虽然地址栏依旧是main.jsp,但是内容却是date.jsp的内容,因此,forward操作执行了请求转发的操作。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值