JSP动作标签
这些jsp的动作标签,与html提供的标签有本质的区别。
* 动作标签是由tomcat(服务器)来解释执行!它与java代码一样,都是在服务器端执行的!
* html由浏览器来执行!
* <jsp:forward>:转发!它与RequestDispatcher的forward方法是一样的,一个是在Servlet中使用,一个是在jsp中使用!
* <jsp:include>:包含:它与RequestDispatcher的include方法是一样的,一个是在Servlet中使用,一个是在jsp中使用!
<%@include>和<jsp:include>有什么不同!
2. include --> 静态包含
* 与RequestDispatcher的include()方法的功能相似!
* <%@include%> 它是在jsp编译成java文件时完成的!他们共同生成一个java(就是一个servlet)文件,然后再生成一个class!
* RequestDispatcher的include()是一个方法,包含和被包含的是两个servlet,即两个.class!他们只是把响应的内容在运行时合并了!
* 作用:把页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立jsp,而我们只需要处理变化的
页面。
例如:
hel.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'hel.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
String name="zhangSan";
String pagepath = "lo.jsp";
%>
<%@include file="lo.jsp" %>
</body>
</html>
lo.jsp
<%
out.print(name);
%>
<jsp:include>
<jsp:include>标签的作用是用来包含其它JSP页面的!你可能会说,前面已经学习了include指令了,它们是否相同呢?虽然它们都是用来包含其它JSP页面的,但它们的实现的级别是不同的!
include指令是在编译级别完成的包含,即把当前JSP和被包含的JSP合并成一个JSP,然后再编译成一个Servlet。
include动作标签是在运行级别完成的包含,即当前JSP和被包含的JSP都会各自生成Servlet,然后在执行当前JSP的Servlet时完成包含另一个JSP的Servlet。它与RequestDispatcher的include()方法是相同的!
hel.jsp
<body> <h1>hel.jsp</h1> <jsp:include page="lo.jsp" /> </body> |
lo.jsp
<% out.println("<h1>lo.jsp</h1>"); %> |
其实<jsp:include>在“真身”中不过是一句方法调用,即调用另一个Servlet而已。
最终会形成两个java 文件和两个class 文件
* <jsp:param>:它用来作为forward和include的子标签!用来给转发或包含的页面传递参数!
<%--动态包含 --%>
<jsp:forward page="b.jsp" >
<jsp:param value="zhangSan" name="username"/>
<jsp:param value="123" name="password"/>
</jsp:forward>
<h1>b.jsp</h1>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
out.print(username + ", " + password);
%>