1
、
include
指令
作用:把多个文件中需要共享的代码放在单独的文件中,然后在需要的时候使用该指令引入这个文件。典型的应用,把网站的头部和版权信息放在单独的文件中,在其他文件中包含这两部分。
基本的语法格式:
<%@ include file=" 目标文件 "%>
file 属性指出目标文件。
例:把 index.jsp 和 register.jsp 中的共同部分做成单独的文件 header.jsp (后缀名不一定是 .jsp ),然后在 index.jsp 和 register.jsp 中调用。
header.jsp 中的内容如下:
<%@ page contentType="text/html;charset=gb2312"%>
<table align="center" width=780>
<tr height="100">
<td align="center"><h1> 电子书店 </h1></td>
</tr>
<tr>
<td align="center">
<!-- 超链接的基本格式 -->
<a href="register.jsp"> 注册 </a>
最新图书 最畅销图书 查询图书 修改密码 查询订单购物车 </td>
</tr>
<tr>
<td><hr></td>
</tr>
在 index.jsp 中引入 header.jsp 的代码:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ includefile="header.jsp"%>
<tr>
<td>
<table>
<tr>
<td>
<!-- 登录界面代码 -->
<form action="login_process.jsp"method="post">
<!-- 主要是涉及提交信息,就要用到 form , action 决定了提交给哪个文件处理 -->
用户名: <input type="text"name="username" value="aaa"> <br>
口令: <input type="password"name="userpass" value=""> <br>
<input type="submit" value=" 登录 "><inputtype="reset" value=" 重写 ">
</form>
</td>
<td>
欢迎光临我们的书店!
</td>
</tr>
</table>
</td>
</tr>
</table>
运行过程:在转换的时候,当遇到 include 指令的时候会把 include 指令指向的目标文件的内容拷贝到当前位置,替换 include 指令,这样最后形成一个文件。然后才编译形成 class 文件,然后运行。
2 、 <jsp:forward> 标签
我们使用登录功能的模拟来介绍。
首先,使用 Java 代码完成判断,使用 <jsp:forward> 完成跳转,代码:
<%@ page contentType="text/html;charset=gb2312"%>
<%
// 先获取用户输入的用户名和口令,然后判断是否合法
String username = request.getParameter("username");
Stringuserpass = request.getParameter("userpass");
if(username.equals("zhangsan") &&userpass.equals("zhangsan"))
{
%>
<jsp:forward page="success.jsp"/>
<%
}else{
%>
<jsp:forward page="index.jsp"/>
<%
}
%>
注意:不管跳转到 success.jsp 还是 index.jsp ,地址栏都是处理文件的名字。
<jsp:forward> 的语法格式:
<jsp:forward page=" 目标文件 "/>
page 属性指出转向的目标文件。最后的结束符为 “/>” ,斜杠不能省略。
另外一个可以完成跳转的方式是采用 response.sendRedirect() 。 response 和 request 一样,都是内容对象,可以直接访问。修改上面的文件:
<%@ page contentType="text/html;charset=gb2312"%>
<%
// 先获取用户输入的用户名和口令,然后判断是否合法
String username = request.getParameter("username");
Stringuserpass = request.getParameter("userpass");
if(username.equals("zhangsan") &&userpass.equals("zhangsan"))
{
response.sendRedirect("success.jsp");
}else{
response.sendRedirect("index.jsp");
}
%>
<jsp:forward> 和 response.sendRedirect 的运行效果相同(针对上面的这个例子)。
相同点:都是转向目标文件。
不同点:地址栏中显示的内容是不相同的,如果使用 <jsp:forward> ,地址栏显示当前文件的名字,如果使用 response ,地址栏显示的是转向后的文件的名字。执行过程不同:使用 <jsp:forward> 相当于一次请求,使用 response 相当于两次请求。
使用 <jsp:forward> 的情况:
index.jsp 中输入用户名和口令,提交给 login_process.jsp ,服务器保存用户的输入信息,使用 <jsp:forward> 转向 success.jsp 之后, success.jsp 还可以访问用户输入的信息,因为输入同一次请求。
使用 response 的请求:
index.jsp 中输入用户名和口令,提交给 login_process.jsp ,服务器保存用户的输入信息,使用 response 的 sendRedirect 方法相当于重新向服务器发送一次请求,这样上次的请求内容(用户名和口令)就不能共享了。
3 、 <jsp:include> 标签
把 index.jsp 中 <%@include="header.jsp"%> 替换成 <jsp:include page="header.jsp"/>
从运行效果上相同。
不同点: 1 、两个文件,目标文件是单独运行的,当前文件运行到 <jsp:include> 标签的时候,转向执行标签所指向的目标文件,执行之后返回继续标签之后的内容。
2 、 <%@ include%> 指令是在编译(转换)的时候使用, <jsp:include> 在运行的时候起作用。
程序中如何选用:要导入的内容是不是每次都执行,如果每次都执行的话,应该使用 <%@ include%> ,如果是在特定的条件下,应该使用 <jsp:include> 。例如,登录之后要么转向 success.jsp 要么转向 index.jsp ,如果在程序中使用导入,应该用 <jsp:include> 。
4 、 <jsp:include> 和 <jsp:forward> 区别
把 login_process.jsp 中的 <jsp:forward> 替换成 <jsp:include> :
<%@ page contentType="text/html;charset=gb2312"%>
<%
// 先获取用户输入的用户名和口令,然后判断是否合法
String username = request.getParameter("username");
Stringuserpass = request.getParameter("userpass");
if(username.equals("zhangsan") &&userpass.equals("zhangsan"))
{
%>
<jsp:include page="success.jsp"/>
<%
}else{
%>
<jsp:include page="index.jsp"/>
<%
}
%>
运行效果是相同的。但是有不同点,修改代码如下:
<%@ page contentType="text/html;charset=gb2312"%>
处理文件的前半部分 <br>
<%
// 先获取用户输入的用户名和口令,然后判断是否合法
String username = request.getParameter("username");
Stringuserpass = request.getParameter("userpass");
if(username.equals("zhangsan") &&userpass.equals("zhangsan"))
{
%>
<jsp:include page="success.jsp"/>
<%
}else{
%>
<jsp:include page="index.jsp"/>
<%
}
%>
<br> 处理文件的后半部分
两次运行结果不相同。
分析原因:
<jsp:forward>: 先执行标签之前的内容,遇到标签的时候转向执行目标文件,执行完不返回,显示的内容为目标文件的内容,标签之前的内容执行,但是不显示。标签之后的内容不会执行,当然更不会显示。
<jsp:include> :先执行标签之前的内容,遇到标签转向执行目标文件,执行完返回,继续执行标签之后的内容,显示的内容为:标签之前的内容 + 目标文件的内容 + 标签之后的内容,标签的前后都执行,都显示。
5 、使用标准标签库( JSTL )完成登录的判断过程
如何使用标签标签库:( 1 )得到标签库的实现文件, jstl.jar 和 standard.jar ,放在 WEB-INF 下面的 lib 子文件夹。( 2 )在 JSP 文件中要声明标签库,通过 tablib 指令进行声明: <%@ taglibprefix="c" uri=" http://java.sun.com/jsp/jstl/core"% > (3) 使用标签: <c:iftest=""> </c:if>
要完成判断,可以使用标签标签库中的 c:if 标签。标签的基本格式:
<c:if test=""> 条件成功要执行的内容 </c:if>
test 表示测试条件,测试条件可以写常量,可以是表达式语言( EL ,主要用于输出),主要使用表达式语言。
例如:要判断用户提交的用户名和口令是否是 zhangsan 。
<c:if test="${param.username==\"zhangsan\"&& param.userpass==\"zhangsan\"}">
<jsp:forward page="success.jsp"/>
</c:if>
注意:添加完标准标签库之后,需要重新启动服务器。
6 、使用 session 保存登录后的信息
在网站中设置了 application sessionrequest pageContext 对象保存内存中的信息。 application 是网站所有用户共享的存储变量的位置。 session 是网站为每个访问网站的人创建的,每个用户对应一个 session ,也是存放变量的位置。 request 是为每个用户的每次请求设置的存储信息的位置,每次访问会有一个 request 。 pageContext 是每次访问的每个页面对应一个。常用的 session 和 request 。多次访问之间要共享信息可以使用 session ,如果在某次访问的多个页面之间共享信息使用 request (例如,使用 jsp:forwrad 转向的文件和当前文件就属于同一次请求)。
登录后的用户信息应该放在 session 中。
要在这些范围中保存信息,可以使用标准标签库中的 <c:set> 标签完成。
<c:set> 的基本语法格式:
<c:set var=" 变量的名字 " scope=" 范围 " value=" 值 "/>
要把用户名放到 session 中:
<c:set var="username" scope="session"value="${param.username}"/>
作用:把多个文件中需要共享的代码放在单独的文件中,然后在需要的时候使用该指令引入这个文件。典型的应用,把网站的头部和版权信息放在单独的文件中,在其他文件中包含这两部分。
基本的语法格式:
<%@ include file=" 目标文件 "%>
file 属性指出目标文件。
例:把 index.jsp 和 register.jsp 中的共同部分做成单独的文件 header.jsp (后缀名不一定是 .jsp ),然后在 index.jsp 和 register.jsp 中调用。
header.jsp 中的内容如下:
<%@ page contentType="text/html;charset=gb2312"%>
<table align="center" width=780>
<tr height="100">
<td align="center"><h1> 电子书店 </h1></td>
</tr>
<tr>
<td align="center">
<!-- 超链接的基本格式 -->
<a href="register.jsp"> 注册 </a>
最新图书 最畅销图书 查询图书 修改密码 查询订单购物车 </td>
</tr>
<tr>
<td><hr></td>
</tr>
在 index.jsp 中引入 header.jsp 的代码:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ includefile="header.jsp"%>
<tr>
<td>
<table>
<tr>
<td>
<!-- 登录界面代码 -->
<form action="login_process.jsp"method="post">
<!-- 主要是涉及提交信息,就要用到 form , action 决定了提交给哪个文件处理 -->
用户名: <input type="text"name="username" value="aaa"> <br>
口令: <input type="password"name="userpass" value=""> <br>
<input type="submit" value=" 登录 "><inputtype="reset" value=" 重写 ">
</form>
</td>
<td>
欢迎光临我们的书店!
</td>
</tr>
</table>
</td>
</tr>
</table>
运行过程:在转换的时候,当遇到 include 指令的时候会把 include 指令指向的目标文件的内容拷贝到当前位置,替换 include 指令,这样最后形成一个文件。然后才编译形成 class 文件,然后运行。
2 、 <jsp:forward> 标签
我们使用登录功能的模拟来介绍。
首先,使用 Java 代码完成判断,使用 <jsp:forward> 完成跳转,代码:
<%@ page contentType="text/html;charset=gb2312"%>
<%
// 先获取用户输入的用户名和口令,然后判断是否合法
String username = request.getParameter("username");
Stringuserpass = request.getParameter("userpass");
if(username.equals("zhangsan") &&userpass.equals("zhangsan"))
{
%>
<jsp:forward page="success.jsp"/>
<%
}else{
%>
<jsp:forward page="index.jsp"/>
<%
}
%>
注意:不管跳转到 success.jsp 还是 index.jsp ,地址栏都是处理文件的名字。
<jsp:forward> 的语法格式:
<jsp:forward page=" 目标文件 "/>
page 属性指出转向的目标文件。最后的结束符为 “/>” ,斜杠不能省略。
另外一个可以完成跳转的方式是采用 response.sendRedirect() 。 response 和 request 一样,都是内容对象,可以直接访问。修改上面的文件:
<%@ page contentType="text/html;charset=gb2312"%>
<%
// 先获取用户输入的用户名和口令,然后判断是否合法
String username = request.getParameter("username");
Stringuserpass = request.getParameter("userpass");
if(username.equals("zhangsan") &&userpass.equals("zhangsan"))
{
response.sendRedirect("success.jsp");
}else{
response.sendRedirect("index.jsp");
}
%>
<jsp:forward> 和 response.sendRedirect 的运行效果相同(针对上面的这个例子)。
相同点:都是转向目标文件。
不同点:地址栏中显示的内容是不相同的,如果使用 <jsp:forward> ,地址栏显示当前文件的名字,如果使用 response ,地址栏显示的是转向后的文件的名字。执行过程不同:使用 <jsp:forward> 相当于一次请求,使用 response 相当于两次请求。
使用 <jsp:forward> 的情况:
index.jsp 中输入用户名和口令,提交给 login_process.jsp ,服务器保存用户的输入信息,使用 <jsp:forward> 转向 success.jsp 之后, success.jsp 还可以访问用户输入的信息,因为输入同一次请求。
使用 response 的请求:
index.jsp 中输入用户名和口令,提交给 login_process.jsp ,服务器保存用户的输入信息,使用 response 的 sendRedirect 方法相当于重新向服务器发送一次请求,这样上次的请求内容(用户名和口令)就不能共享了。
3 、 <jsp:include> 标签
把 index.jsp 中 <%@include="header.jsp"%> 替换成 <jsp:include page="header.jsp"/>
从运行效果上相同。
不同点: 1 、两个文件,目标文件是单独运行的,当前文件运行到 <jsp:include> 标签的时候,转向执行标签所指向的目标文件,执行之后返回继续标签之后的内容。
2 、 <%@ include%> 指令是在编译(转换)的时候使用, <jsp:include> 在运行的时候起作用。
程序中如何选用:要导入的内容是不是每次都执行,如果每次都执行的话,应该使用 <%@ include%> ,如果是在特定的条件下,应该使用 <jsp:include> 。例如,登录之后要么转向 success.jsp 要么转向 index.jsp ,如果在程序中使用导入,应该用 <jsp:include> 。
4 、 <jsp:include> 和 <jsp:forward> 区别
把 login_process.jsp 中的 <jsp:forward> 替换成 <jsp:include> :
<%@ page contentType="text/html;charset=gb2312"%>
<%
// 先获取用户输入的用户名和口令,然后判断是否合法
String username = request.getParameter("username");
Stringuserpass = request.getParameter("userpass");
if(username.equals("zhangsan") &&userpass.equals("zhangsan"))
{
%>
<jsp:include page="success.jsp"/>
<%
}else{
%>
<jsp:include page="index.jsp"/>
<%
}
%>
运行效果是相同的。但是有不同点,修改代码如下:
<%@ page contentType="text/html;charset=gb2312"%>
处理文件的前半部分 <br>
<%
// 先获取用户输入的用户名和口令,然后判断是否合法
String username = request.getParameter("username");
Stringuserpass = request.getParameter("userpass");
if(username.equals("zhangsan") &&userpass.equals("zhangsan"))
{
%>
<jsp:include page="success.jsp"/>
<%
}else{
%>
<jsp:include page="index.jsp"/>
<%
}
%>
<br> 处理文件的后半部分
两次运行结果不相同。
分析原因:
<jsp:forward>: 先执行标签之前的内容,遇到标签的时候转向执行目标文件,执行完不返回,显示的内容为目标文件的内容,标签之前的内容执行,但是不显示。标签之后的内容不会执行,当然更不会显示。
<jsp:include> :先执行标签之前的内容,遇到标签转向执行目标文件,执行完返回,继续执行标签之后的内容,显示的内容为:标签之前的内容 + 目标文件的内容 + 标签之后的内容,标签的前后都执行,都显示。
5 、使用标准标签库( JSTL )完成登录的判断过程
如何使用标签标签库:( 1 )得到标签库的实现文件, jstl.jar 和 standard.jar ,放在 WEB-INF 下面的 lib 子文件夹。( 2 )在 JSP 文件中要声明标签库,通过 tablib 指令进行声明: <%@ taglibprefix="c" uri=" http://java.sun.com/jsp/jstl/core"% > (3) 使用标签: <c:iftest=""> </c:if>
要完成判断,可以使用标签标签库中的 c:if 标签。标签的基本格式:
<c:if test=""> 条件成功要执行的内容 </c:if>
test 表示测试条件,测试条件可以写常量,可以是表达式语言( EL ,主要用于输出),主要使用表达式语言。
例如:要判断用户提交的用户名和口令是否是 zhangsan 。
<c:if test="${param.username==\"zhangsan\"&& param.userpass==\"zhangsan\"}">
<jsp:forward page="success.jsp"/>
</c:if>
注意:添加完标准标签库之后,需要重新启动服务器。
6 、使用 session 保存登录后的信息
在网站中设置了 application sessionrequest pageContext 对象保存内存中的信息。 application 是网站所有用户共享的存储变量的位置。 session 是网站为每个访问网站的人创建的,每个用户对应一个 session ,也是存放变量的位置。 request 是为每个用户的每次请求设置的存储信息的位置,每次访问会有一个 request 。 pageContext 是每次访问的每个页面对应一个。常用的 session 和 request 。多次访问之间要共享信息可以使用 session ,如果在某次访问的多个页面之间共享信息使用 request (例如,使用 jsp:forwrad 转向的文件和当前文件就属于同一次请求)。
登录后的用户信息应该放在 session 中。
要在这些范围中保存信息,可以使用标准标签库中的 <c:set> 标签完成。
<c:set> 的基本语法格式:
<c:set var=" 变量的名字 " scope=" 范围 " value=" 值 "/>
要把用户名放到 session 中:
<c:set var="username" scope="session"value="${param.username}"/>