JSP行为
<jsp:forward />行为
在JSP页面中完成请求转发。作用等同于Servlet中的request.getRequestDispatcher("/内部路径").forward(request,response)方法,将当前JSP页面的数据转发到另一个JSP文件中。例如:
demo3.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setAttribute("param1", "value1");
%>
<jsp:forward page="demo4.jsp"></jsp:forward>
</body>
</html>
demo4.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%= request.getAttribute("param1") %>
</body>
</html>
运行结果
可以看到,请求转发后,地址栏并未改变。同Servlet一样,跳转动作发生之前不能有任何输出到客户端浏览器,否则会抛出IllegalStateException异常。
我们修改一下上面的代码,把demo3.jsp改为下面这样,运行结果就会改变。
demo3.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setAttribute("param1", "value1");
response.getWriter().println("123");
%>
<jsp:forward page="demo4.jsp"></jsp:forward>
</body>
</html>
运行结果
<jsp:include />行为
动态包含,将被包含资源的运行结果包含进来。在将JSP指令中include的时候,就提到了<jsp:include />行为,前者是将包含进来的源代码添加到了目标文件中,然后编译成一个class文件,是先包含后编译。而<jsp:include />则是先执行JSP程序,然后把执行结果包含到include.jsp中,属于先执行后包含行为。
本行为是使用request.getRequestDispatcher("/内部路径").forward(request,response)来执行被包含的文件的。
标准的JSP行为格式如下:
<jsp:include page="relativeURI" flush="true" />
其中page是必需的,是被包含文件的相对路径,必须为本Web项目中的文件。flush默认为false,设置读入被保存文件内容是否清空缓存。
<jsp:directive />行为
<jsp:directive />行为相当于JSP指令,也就是说<jsp:directive.page />相当于<%@ page %>指令,<jsp:directive.include />相当于<%@ inlcude %>指令。
该行为与JSP指令可以互相改写,前者最初是为了XML格式的JSP准备的,但一般的JSP文件也可使用。
<jsp:plugin />嵌入Applet
Java Applet是运行在客户端浏览器里的Java小程序。在HTML里定义该元素,需要使用<applet>或<object>标签,但是这两个标签的参数繁多复杂,对Java程序开发者来说非常麻烦,因此JSP种提供了一组plugin行为来简化嵌入Applet的操作。
plugin行为包括<jsp:plugin />、<jsp:params />、<jsp:param />、<jsp:fallback />。
功能分别为:
- <jsp:plugin />:定义Java Applet,并声明宽高等属性。
- <jsp:params />:定义一组一对多的参数。
- <jsp:param />:定义单个参数。
- <jsp:fallback />:定义不支持Java Applet时的替换信息。
plugin各属性: