JSP Action 标签

什么是JSP Action?

JSP Action使用XML语法的结构来控制Servlet引擎的行为。我们可以通过JSP Action(如include和forward)来动态插入文件、重用Bean组件、将用户转发到另一个页面等。与指令不同,Action在每次访问页面时都会重新评估。

语法

<jsp:action_name attribute="value" />

在本教程中,您将了解JSP标准Action。JSP标准Action标签用于控制Servlet引擎的行为。

JSP中常用Action标签列表

JSP中有11种标准Action标签,以下是它们的完整列表。

Action标签名称 语法 描述
jsp:useBean <jsp:useBean id=”” class=”” /> 用于在JSP页面中调用和使用Bean。
jsp:include <jsp:include page=”页面URL” flush=”true/false” /> 在请求处理期间将另一个JSP文件包含到当前文件中。
jsp:setProperty <jsp:setproperty name=”” property=”” /> 设置Bean的属性。
jsp:getProperty <jsp:getAttribute name=”” property=”” /> 检索Bean的属性并将其转换为字符串以供输出。
jsp:forward <jsp:forward page=”值” /> 将请求转发到另一个JSP或静态页面。
jsp:plugin <jsp:plugin type=”applet/bean” code=”对象代码” codebase=”对象代码库” /> 将Applet或Bean等Java组件引入JSP,并自动生成标签。
jsp:body <jsp:body></jsp:body> 定义在请求处理期间动态生成的XML元素。
jsp:text <jsp:text>模板文本</jsp:text> 用于在JSP页面中插入模板文本,仅包含文本和EL表达式。
jsp:param <jsp:param name=”val” value=”val” /> 在jsp:plugin Action中传递参数以添加额外数据。
jsp:attribute <jsp:attribute></jsp:attribute> 定义动态生成的XML属性。
jsp:output <jsp:output doctype-root-element=”” doctype-system=”” /> 指定输出中使用的XML或DOCTYPE声明。

jsp:useBean

  • 当我们要使用JSP页面中的Bean时,会使用此Action名称。
  • 使用此标签,我们可以轻松调用Bean。

jsp:UseBean的语法:

<jsp:useBean id="" class="" />

此处指定了此Bean的标识符,class是Bean类的完整路径。

示例

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Action JSP1</title>
</head>
<body>
<jsp:useBean id="name" class="demotest.DemoClass">
</body>
</html>

代码解释

第10行代码:在上面的代码中,我们使用了Bean的“bean id”和“class path”。

jsp:include

  • 它还用于像包含指令一样,将一个jsp文件插入到另一个文件中。
  • 它是在请求处理阶段添加的。

jsp:include的语法

<jsp:include page="page URL" flush="true/false">

示例

Action_jsp2(第10行代码)我们正在包含一个date.jsp文件。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Date Guru JSP</title>
</head>
<body>
<jsp:include page="date.jsp" flush="true" />
</body>
</html>

Date.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<p>
Today's date: <%= {new java.util.Date()).toLocaleString()%>
</p>
</body>
</html>

代码解释

Action_jsp2.jsp

第10行代码:在第一个文件中,我们将date.jsp文件包含在action_jsp2.jsp中。

Date.jsp

第11行代码:我们在date.jsp的第11行代码中打印今天的日期。

执行代码后,输出如下。

jsp:include

输出

  • 由于date文件已包含在主jsp中,因此它会显示今天的日期和时间。

jsp:setProperty

  • JSP标准Action的此属性用于设置Bean的属性。
  • 在设置属性之前,我们需要定义一个Bean。

语法

<jsp:setproperty name="" property="" >

这里,name定义了要设置属性的Bean,property定义了要设置的属性。我们还可以设置value和param属性。这里value不是必需的,它定义了赋给属性的值。这里的param是请求参数的名称,可以使用它来获取值。setProperty的示例将在getproperty之后演示。

jsp:getProperty

  • 此属性用于获取Bean的属性。
  • 它会转换为字符串,最后插入到输出中。

语法

<jsp:getAttribute name="" property="" >

这里,name是需要从中检索属性的Bean的名称,并且必须定义Bean。property属性是要检索的Bean属性的名称。

setProperty和getProperty示例

TestBean.java

package demotest;

import java.iO.Serializable;

public class TestBean implements Serializable{
	
	private String msg = "null";
	
	public String getMsg() {
		return msg;
	}
	
	public void setMsg(String msg) {
		this.msg = msg;
	}
}

Action_jsp3.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Action 3</title>
</head>
<body>
<jsp:useBean id="GuruTest" class="demotest.TestBean" />
<jsp:setProperty name="GuruTest" property="msg" value="GuruTutorial" />
<jsp:getProperty name="GuruTest" property="msg" />
</body>
</html>

代码解释

TestBean.java

第5行代码:TheTestBean实现了Serializable类。它是一个带有getter和setter的Bean类。

第7行代码:这里我们使用了一个私有的字符串变量msg,初始值为“null”。

第9-14行代码:这里我们使用了变量“msg”的getter和setter。

Action_jsp3.jsp

第10行代码:这里我们使用了“useBean”标签,它指定了要在该jsp类中使用的Bean,即TestBean。

第11行代码:这里我们将TestBean的属性msg设置为“GuruTutorial”。

第12行代码:这里使用getProperty,我们获取了TestBean的属性msg的值,即GuruTutorial,它显示在输出中。

当您执行上述代码时,您会得到以下输出

jsp:getProperty

输出

在此示例中,我们使用TestBean尝试使用setProperty设置属性“gurutest”,并使用getProperty获取属性值“GuruTutorial”。

jsp:forward

它用于将请求转发到另一个jsp或任何静态页面。

这里可以无参数或有参数地转发请求。

语法

<jsp:forward page="value">

这里的value表示请求应该转发到哪里。

示例

Action_jsp41.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Action JSP1</title>
</head>
<body>
<jsp:forward page="jsp_action_42.jsp" />
</body>
</html>

Jsp_action_42.jsp

Guru Action JSP2</title>
</head>
<body>
<a>This is after forward page</a>
</body>
</html>

代码解释

Action_jsp41.jsp

第10行代码:这里我们使用forward JSP Action将请求转发到属性中指定的页面,即jsp_action_42.jsp。

Jsp_action_42.jsp

第10行代码:一旦我们调用action_jsp41.jsp,请求就会被转发到此页面,我们得到输出“This is after forward page.”。

当我们执行上面的代码时,我们会得到以下输出。

jsp:forward

输出

我们调用action_jsp41.jsp,但请求被转发到jsp_action_42.jsp,我们从该页面得到输出“This is after forward page”。

jsp:plugin

  • 它用于将Java组件引入JSP,即Java组件可以是Applet或Bean。
  • 它检测浏览器并在文件中添加<object>或<embed>JSP标签。

语法

<jsp:plugin type="applet/bean" code="objectcode" codebase="objectcodebase">
  • 这里的type指定为object或bean。
  • code指定Applet或Bean的类名。
  • Codebase包含包含类文件的基础URL。

jsp:param

  • 这是上面描述的plugin对象的子对象。
  • 它必须包含一个或多个Action来提供附加参数。

语法

<jsp:params>
<jsp:param name="val" value="val"/ >
</jsp:params>

plugin和param示例

Action_jsp5.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Action guru jsp5</title>
</head>
<body>
<jsp:plugin type="bean" code="Student.class" codebase="demotest.Student">
  <jsp:params>
     <jsp:param name="id" value="5" />
     <jsp:param name="name" value="guru" />
  </jsp:params>
</jsp:plugin>
</body>
</html>

Student.java

package demotest; 

import java.io.Serializable;

public class Student implements Serializable {
	
	public String getName () { 
		return name; 
	}
	public void setName (String name) {
		this.name = name;
	}
	public int getId() { 
		return id; 
	} 
	public void setId (int id) { 
		this.id = id; 
	} 
	private String name = "null"; 
	private int id = 0;
	
}

代码解释

Action_jsp5.jsp

第10行代码:这里我们使用了jsp:plugin对象,其中我们使用了三个属性。

  • Type – 在这种情况下是bean。
  • Code-文件名。
  • Codebase – 带有包名的路径。

第11-14行代码:这里我们使用了jsp:params对象,其中有一个子param对象,带有name和value属性,我们在这两个属性中设置了id和name的值。

Student.java

第7-17行代码:我们使用了id和name变量的getter和setter。

第19-20行代码:我们初始化了变量id和name。

在这种情况下,如果param的设置值在Student Bean中使用,我们将获得输出。在这种情况下,我们不会有任何输出,因为我们只是设置和获取param的值,而没有在任何地方打印它。

jsp:body

  • 此标签用于动态定义XML,即元素可以在编译时而不是请求时生成。
  • 它实际定义了在请求时动态生成的XML,即元素主体。

语法

<jsp:body></jsp:body>

我们在这些标签内编写XML body标签。

jsp:attribute

  • 此标签用于动态定义XML,即元素可以在请求时而不是编译时生成。
  • 它实际定义了将被动态生成的XML的属性。

语法

<jsp:attribute></jsp:attribute>

我们在这里编写XML的attribute标签。

body和attribute示例

Action_jsp6.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Action Guru JSP6</title>
</head>
<body>
<jsp:element name="GuruXMLElement">
<jsp:attribute name="GuruXMLattribute">
Value
</jsp:attribute>
<jsp:body>Guru XML</jsp:body>
</jsp:element>
</body>
</html>

代码解释

第10行代码:这里我们定义了一个元素,它将动态生成为XML,它的名称将是GuruXMLElement。

第11-13行代码:这里我们定义了一个属性,它将是动态生成的XML的XML属性。

第14行代码:这里我们有body Action,我们在其中编写将在动态XML中生成的XML body。

当您执行上述代码时,您会得到以下输出

jsp:attribute

输出

在这里,我们从生成的XML的body标签中获取输出。

jsp:text

  • 它用于JSP页面中的模板文本。
  • 其主体不包含任何其他元素,仅包含文本和EL表达式。

语法

<jsp:text>template text</jsp:text>

这里的模板文本是指仅模板文本(可以是任何需要打印在jsp上的通用文本)或任何EL表达式

示例

Action_jsp7.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Action JSP7</title>
</head>
<body>
<jsp:text>Guru Template Text</jsp:text>
</body>
</html>

代码解释

第10行代码:这里我们使用text对象来打印模板文本。

当您执行上述代码时,您会得到以下输出

jsp:text

输出

我们得到Guru Template Text,它放置在text Action对象中。

jsp:output

  • 它指定了JSP的XML声明或DOCTYPE声明。
  • XML声明和DOCTYPE由输出声明。

语法

<jsp:output doctype-root-element="" doctype-system="">

这里,doctype-root-element表示DOCTYPE中XML文档的根元素。Doctype-system表示在输出中生成的DOCTYPE,并给出系统文字。

示例

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Action Guru JSP8</title>
</head>
<body>
<jsp:output doctype-root-element="html PUBLIC" doctype-system="http://www.w3.org/TR/html4/loose.dtd"/>
</body>
</html>

代码解释

第10行代码:这里我们使用output Action对象来生成DOCTYPE,它将在内部以以下格式生成。

<!DOCTYPE html “http://www.w3.org/TR/html4/loose.dtd”>

这里不会有任何输出,因为它将在内部生成。