2.5 JSP的7个动作指令 2.5.1 forward指令

2.5 JSP的7个动作指令

动作指令编译指令不同,编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的动作。

  • 编译指令在将JSP编译成Servlet时起作用;
  • 处理指令通常可替换成JSP小脚本,它只是JSP小脚本的标准化写法

JSP动作指令

JSP动作指令主要有如下7个。

  1. jsp:forward:执行页面转向,将请求的处理转发到下一个页面
  2. jsp:param:用于传递参数,必须与其他支持参数的标签一起使用
  3. jsp:include:用于动态包含一个JSP页面
  4. jsp:plugin:用于下载JavaBeanApplet到客户端执行。
  5. jsp:useBean:创建一个Javabean的实例
  6. jsp:setProperty:设置JavaBean实例的属性值
  7. jsp:getProperty:输出Javabean实例的属性值。

下面依次讲解这些动作指令。

2.5.1 forward指令

forward指令用于将页面响应转发到另外的页面。既可转发到静态的HTML页面,也可转发到动态的JSP页面,或者转发到容器中的Servlet
JSPforward指令的格式如下。

JSP1.0语法

对于JSP1.0,使用如下语法:

1
<jsp:forward page={"relativeURL" | "<%= expression %>"} />

JSP1.1语法

对于JSP1.1以上规范,可使用如下语法:

1
2
3
<jsp:forward page="{relativeURL|<%=expression%>}">
{jsp:param..../>}
</jsp:forward>

第二种语法用于在转发时增加额外的请求参数。增加的请求参数的值可以通过HttpservletrEquest类的getParameter方法获取。

jsp-forward.jsp

下面示例页面使用了forward动作指令来转发用户请求。

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %>
<!DOCTYPE html>
<html>
<head>
<title> forward的原始页 </title>
</head>
<body>
<h3>forward的原始页</h3>
<jsp:forward page="forward-result.jsp">
<jsp:param name="age" value="29"/>
</jsp:forward>
</body>
</html>

这个JSP页面非常简单,它包含了简单的title信息,页面中也包含了简单的文本内容,页面的forward动作指令:

1
2
3
<jsp:forward page="forward-result.jsp">
<jsp:param name="age" value="29"/>
</jsp:forward>

forward-result.jsp

将客户端请求转发到forward-result.jsp页面,并且在转发请求时增加了一个请求参数:参数名为age,参数值为29。
forward-result.jsp页面中,使用request内置对象(request内置对象是HttpServletRequest的实例,关于request的详细信息参看下一节)来获取增加的请求参数值。

1
2
3
4
5
6
7
8
9
10
11
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %>
<!DOCTYPE html>
<html>
<head>
<title>forward结果页</title>
</head>
<body>
<!-- 使用request内置对象获取age参数的值 -->
<%=request.getParameter("age")%>
</body>
</html>

forward-result.jsp页面中代码设置了title信息,并输出了age请求参数的值,在浏览器中访问jsp-forward.jsp页面的执行效果如图2.12所示

执行forward时不会丢失请求参数

从图2.12中可以看出,执行forward指令时,用户请求的地址依然没有发生改变,但页面内容却完全变成被forward目标页的内容

执行forward指令转发请求时,客户端的请求参数不会丢失

form.jsp

看下面表单提交页面的例子,该页面没有任何动态的内容,只是一个静态的表单页,作用是将请求参数提交到jsp-forward.jsp页面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!DOCTYPE html>
<html>
<head>
<title> 提交 </title>
</head>
<body>
<!-- 表单提交页面 -->
<form id="login" method="post" action="jsp-forward.jsp">
<input type="text" name="username">
<input type="submit" value="login">
</form>
</body>
</html>

修改forward-result.jsp页,增加输出表单参数的代码,也就是在forward-result.jsp页面改成如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %>
<!DOCTYPE html>
<html>
<head>
<title>forward结果页</title>
</head>
<body>
<!-- 使用request内置对象获取age参数的值 -->
<%=request.getParameter("age")%>
<!-- 输出username请求参数的值 -->
<%=request.getParameter("username")%>
</body>
</html>

在表单提交页面中的文本框中输入任意字符串后提交该表单,即可看到如图2.13所示的执行效果

从图2.13中可看到,forward-result.jsp页面中不仅可以输出forward指令增加的请求参数,还可以看到表单里username表单域对应的请求参数,这表明执行forward时不会丢失请求参数