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"%>
<%@ include file="header.jsp"%>
<tr>
<td>
<table>
<tr>
<td>
<!--登錄界面代碼-->
<form act
<!-- 主要是涉及提交信息,就要用到form,act
用戶名:<input type="text" name="username" value="aaa"> <br>
口令:<input type="password" name="userpass" value=""> <br>
<input type="submit" value="登錄"><input type="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");
String userpass = 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");
String userpass = 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");
String userpass = 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");
String userpass = 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>:先執行標籤之前的內容,遇到標籤轉向執行目標文件,執行完返回,繼續執行標籤之後的內容,顯示的內容爲:標籤之前的內容+目標文件的內容+標籤之後的內容,標籤的前後都執行,都顯示。
總之<%@include file=“”%>和<jsp:include page=“”>的區別在於前者將頁面包括進來,後者是當執行時纔將頁面包括進來,前者在編譯期使用,後者在運行期使用,後者執行之後回來繼續執行下面的代碼
<jsp:include page="">和<jsp:forward page="">的區別在於前者運行顯示的內容爲 標籤之前的內容+目標文件內容+ 標籤之後內容,而後者是當執行的標籤時直接轉入標籤,標籤之前內容雖然會執行,但是不表現出來,目標文件執行完之後也不返回
<jsp:forward page="">和sendredirect在於前者可以將本頁面的request和response傳入目標文件,但是後者不行
前者相當於一次請求,後者相當於兩次請求
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/JavaEETeacher/archive/2007/12/13/1932447.aspx