目录
JSP动作指令为请求处理阶段提供信息,是运行时的脚本动作,以标签的形式使用
JSP动作标签分类
①基本元素(JSP1.2开始就有的)
<jsp:forward> <jsp:include> <jsp:param> <jsp:plugin> <jsp:params> <jsp:fallback>
②与存取JavaBean有关的
<jsp:useBean> <jsp:setProperty> <jsp:getProperty>
③JSP2.0新增元素,主要与JSP Document有关
<jsp:root> <jsp:declaration> <jsp:scriptlet> <jsp:expression> <jsp:text> <jsp:output>
④JSP2.0新增元素,主要是用来动态生成XML元素标签的值
<jsp:atttibute> <jsp:body> <jsp:element>
⑤JSP2.0新增元素,主要是用在Tag File中
<jsp:invoke> <jsp:dobody>
1.Forward动作指令
Forward动作指令的作用是实现服务器端的页面跳转,即从当前页面转发到另一个页面
<jsp:forward page="relativeURL" />
服务端跳转:页面在跳转的过程中,实际上还是同一个请求,因此在转发过程中request对象在新的页面中也是有效的。
常用于用户登录验证中
forward.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div>
<font color="blue" size="3">forward页面跳转实验</font><br>
<%
String username = "admin",pswd="123";
if("admin"!=username || pswd!="123") { %>
<jsp:forward page="./forwardfail.jsp" />
<%} else {%>
<br><br>
<font color="red" size="4">恭喜你,登录成功!</font>
<%}%>
</div>
</body>
</html>
forwardfail.jsp
<%@ page language="java" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<font color="red" size="4">对不起,用户信息有误!</font><br>
<a href="forward.jsp">重新登陆</a>
</body>
</html>
将密码pswd改成错误的,显示如下
2.include动作指令
语法:<jsp:include>
将另外一个资源的输出内容插入到当前JSP页面的输出内容之中
动态插入
<jsp:include>动作指令涉及到的2个JSP页面会被翻译成2个servlet,这2个servlet的内容在执行时进行合并
两种指令格式
①<jsp:include page="relativeURL" flush="true" />
②<jsp:include page="relativeURL" flush="true" >
<jsp:param name="parameterName" value="parameterValue" />
</jsp:include>
flush属性用于指定在插入其他资源时,是否先将当前JSP页面的已输出内容刷新到客户端。需要设置为flush="true"
当<jsp:include>和<jsp:param>结合使用时,可以在加载文件的过程中同时向文件提供信息
如果在引入文件中定义的变量或方法,在主页面也要用,就应该使用include编译指令来静态引入文件,否则,会影响主页面不能正常生成servlet
<%@include...>和<jsp:include...>指令的区别
前者,在编译阶段,将2个jsp文件合成1个Servlet类,引入的是不可变的静态内容,效率高
后者,在请求阶段,将2个jsp文件合成2个Servlet类,引入的是动态内容,效率稍低
3.plugin动作指令
<jsp:plugin>动作指令动态地下载服务器端的JavaBean或者Java Applet程序到客户端的浏览器上执行。
当JSP页面被编译并响应至浏览器执行时,<jsp:plugin>会根据浏览器的版本替换成<object>或<embed>标记。
<!--code属性所指的文件必须存在于codebase属性指定的目录中-->
<jsp:plugin type="applet" code="applet.Smileface.class" codebase="plugin" jreversion="1.6" width="500" height="400">
<jsp:fallback>
Plugin supported by browser.
</jsp:fallback>
</jsp:plugin>
4.param动作指令
<jsp:param>经常和<jsp:include> 、<jsp:forward>以及<jsp:plugin>一起使用,用于页面间的参数传递
①和<jsp:forward>一起
注意
①<jsp:forward></jsp:forward>之间不能有注释
②程序遇到<jsp:forward></jsp:forward>,页面开始跳转,所以之后的代码就不会再执行了,所以把要执行的代码放在<jsp:forward></jsp:forward>之前。
③中文乱码问题,在发生跳转的那个页面中,对request对象的编码格式设定
paramMain.jsp
<%@ page language="java" contentType="text/html; charset=gb2312" %>
<html>
<head>
</head>
<body>
<%-- 防止中文乱码 --%>
<%request.setCharacterEncoding("gb2312");%>
<jsp:forward page="paramForward.jsp">
<jsp:param value="张三" name="username" />
<jsp:param value="51655" name="password" />
</jsp:forward>
</body>
</html>
paramForward.jsp
<%@ page language="java" contentType="text/html; charset=gb2312" %>
<html>
<head>
</head>
<body>
用户名:<%=request.getParameter("username")%><br>
密码:<%=request.getParameter("password") %>
</body>
</html>
②和<jsp:include>一起
可用来做页面导航部分
mainpage.jsp
<%@ page language="java" pageEncoding="utf-8" %>
<html>
<head>
</head>
<body>
<!--防止中文乱码-->
<%request.setCharacterEncoding("utf-8");%>
<jsp:include page="forward.jsp" flush="true">
<jsp:param name="username" value="张三"/>
<jsp:param name="cur_place" value="成绩录入--成绩查询"/>
</jsp:include>
<hr/>
<font size="4" color="red">这是mainpage</font>
</body>
</html>
forward.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head></head>
<body>
<div>
<%
String username = request.getParameter("username");
String cur_place = request.getParameter("cur_place");
%>
<%=username %>同学,您好!您所在的当前位置:<%=cur_place %>
</div>
</body>
</html>