Java EE基础知识学习(三)

在这一节我们要介绍七个JSP的动作指令,之前我们介绍了三个JSP的编译指令,编译指令是用来通知Servlet引擎的处理消息,而动作指令只是运动时的动作。编译指令在将JSP编译成Servlet时起作用,而处理指令通常可以替换成JSP脚本,它只是JSP脚本的标准化写法。


一、JSP的七个动作指令

JSP的动作指令主要有以下七个:

jsp:forward:执行页面转向,将请求的处理转发到下一个页面。

jsp:param:用于传递参数,必须和其他的标签配合使用。

jsp:include:用于动态引入一个外部JSP页面。

jsp:plugin:用于下载JavaBean或Applet到客户端执行。

jsp:useBean:创建一个JavaBean实例的属性值。

jsp:setProperty:设置JavaBean实例的属性值。

jsp:getProperty:获取JavaBean实例的属性值。



1、forwar指令

forward指令用于将页面响应转发到另外的页面。下面是forward指令的示例:

a.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>
<jsp:forward page="b.jsp"></jsp:forward>
</body>
</html>

b.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>Hello World</p>
</body>
</html>

当我们访问a.jsp的时候,内容显示的是"Hello World",但是在浏览器的地址栏中URL依然显示的是a.jsp。


2、include指令

include指令是一个动态的include指令,虽然它也用于将一个外部页面包含进来,但是它不会导入被include页面的编译指令,只是把被导入页面的body内容插入。include代码示例:

a.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>
<jsp:include page="b.jsp"></jsp:include>
</body>
</html>


b.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>Hello World</p>
</body>
</html>

当我们在浏览器中执行a.jsp的时候,显示的内容会是"Hello World",我们发现它与静态include运行的结果是一样的,那它们的区别在哪里呢?它们的区别主要有三个:

1、静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet,而动态导入则在Servlet中使用include方法来引入被导入的页面内容。

2、静态导入时被导入的编译指令会起作用,动态导入只导入页面的body内容。

3、动态包含还可以增加额外的参数,这点我们在param指令中讲解。

关于第一点其实我们打开动态导入后编译生成的Servlet文件可以看到,include指令被下面代码所替代:

org.apache.jasper.runtime.JspRuntimeLibrary.include(request,response,"b.jsp",out,false);

而静态页面则是直接将另一个页面的内容加入到了原页面的Servlet中。


总结起来,如果我们导入的外部页面很少改动,我们选择使用静态include,如果外部页面经常变动,我们使用动态include。


3、useBean指令

useBean指令用来创建一个javabean实例,要使用它首先我们要在项目的src目录下创建一个包,例如abc包,然后在这个包里创建一个javabean类,接下来我们就可以在JSP代码中用useBean创建一个实例了。

例如:在abc包中创建一个Person类:

package abc;

public class Person {
	private String name;
	private int age;
	public Person()
	{
		name="";
		age=0;
	}
	public void setName(String n)
	{
		name=n;
	}
	public void setAge(int a)
	{
		age=a;
	}
	public String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}
}

a.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>
<jsp:useBean id="p1" class="abc.Person" scope="page"></jsp:useBean>
</body>
</html>

这样我们就创建了一个javabean的实例p1,并且可以通过setProperty和getProperty方法来设置和获取p1的属性值。
在创建的时候id是我们创建的对象名称,class是我们的javabean类名,scope则是指定了javaBean实例的作用范围,它有四个选项:

page:只在该页面有效。

request:只在本次请求中有效。

session:只在本次会话中有效。

application:在本web应用中一直有效。


4、setProperty指令

setProperty指令用来设置javabean实例的属性值,例如在上个例子中我们可以用以下代码设置p1属性:

<jsp:setProperty property="age" name="p1" value="22"/>
<jsp:setProperty property="name" name="p1" value="wang"/>

5、getProperty指令

getproperty指令用来获取javabean实例的属性值,例如在上个例子中我们可以用以下代码获取p1属性:

<jsp:getProperty property="name" name="p1"/>
<jsp:getProperty property="age" name="p1"/>

这两行代码会获取p1的属性值并且将其输出。


6、plugin指令

plugin指令主要用于下载服务器端的JavaBean或者Applet到客户端执行,由于程序要在客户端执行,所以客户端必须安装虚拟机。


7、param指令

param指令用来设置参数值,这个指令必须配合include、forward或者plugin指令使用。

配合include指令代码:

a.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>
<jsp:include page="b.jsp">
	<jsp:param value="2017" name="year"/>
</jsp:include>
</body>
</html>

b,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>
<%=request.getParameter("year") %>
</body>
</html>

在上面的例子中,我们在a.jsp中使用include包含b页面,同时传递了一个"year=2017"的参数,然后b页面通过request.getParameter()方法获取参数值并使用输出表达式输出这个参数值,所以我们在浏览器中运行a.jsp会显示一个数字2017。


配合forward指令:

a.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>
<jsp:forward page="b.jsp">
	<jsp:param value="2017" name="year"/>
</jsp:forward>
</body>
</html>

b.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>
<%=request.getParameter("year") %>
</body>
</html>

上面的例子同样在a中使用forward时传递了一个“year=2017”的参数,这个参数在b中使用request.getParamter()方法获取。在浏览器中运行以后会显示数字“2017”。


关于plugin和param指令的配合使用这里就不举例说明了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值