JSP程序由JSP Engine(JSP引擎) 先將它轉換成Servlet代碼,接着將它編譯成類文件載入執行。
只有當客戶端第一次請求JSP時,才需要將其轉換、編譯
Directive 指令
Directive是編譯期間執行的指令,常見的指令有:page include taglib
page:指明與JSP Container(JSP容器)的溝通方式
<%@ page language="java"
import="java.io.*,java.util.*" 引入包和類
errorPage="errorPageUrl" 如果頁面出現錯誤,跳轉到哪個頁面
isErrorPage="false" 當前頁面是否爲一個錯誤頁面
contentType="text/html; charset=GB2312"字符編碼形式
extends="index.jsp" 指明這個jsp頁面是從哪個jsp繼承過來的
buffer="8KB" 緩衝區,默認爲8K。none代表不緩衝
session="true" 是否使用session,默認爲true
autoFlush="true" 頁面輸出完成後,是否自動刷新到客戶端
info="InfoText" 指明JSP相關的描述信息
%>
include: JSP Engine會在jsp程序的轉換期間先把file屬性設定的文件包含進來,然後開始執行轉換及編譯
<%@ include file="index.jsp"%>//index.jsp後面不能接參數。因爲這是一個編譯指令
Declaration 聲明
<%
int i = 0;//這種聲明,i爲局部變量
%>
<%!
int j = 0;//這種聲明,j爲成員變量(全局變量)
public void getMessage(){}//我們可以在此定義成員方法
%>
Action 運行期間的指令
Action是運行期間的指令,常見的指令有:jsp:useBean jsp:include jsp:forward
jsp:include
用於動態的JSP程序或HTML文件
除非這個指令被執行到,否則它是不會被Tomcat等JSP Engine編譯
<jsp:include page="URLSpec">
<jsp:param name="ParamName" value="ParmValue"/> //用來設定include文件時的參數和值
</jsp:include>
jsp:forward
用於將一個jsp頁面的內容傳送到page所指定的jsp程序或者servlet中處理
<jsp:forward page="index.jsp">
<jsp:param name="paramName" value="paramValue"/>
</jsp:forward>
<jsp:forward>與response.sendRedirect的區別
<jsp:forward>
1、跳轉發生在服務器端,跳轉後,客戶端的URL地址依然是1.jsp的地址
2、<jsp:forward>在跳轉的過程中,使用的是同一個request對象
3、工作流程:客戶端發出請求,傳遞到服務器1.jsp頁面,1.jsp頁面解析代碼到<jsp:forward>語句後跳轉到2.jsp頁面。服務器將2.jsp頁面的內容傳遞給客戶端
response.sendRedirect
1、跳轉後,客戶端的URL地址發生改變
2、response.sendRedirect在跳轉過程中,是不同的request對象
3、工作流程:客戶端發出請求後,傳遞到1.jsp頁面。1.jsp向客戶端發出響應,通知客戶端重新訪問2.jsp頁面。客戶端得到請求後,再向2.jsp發出請求。2.jsp將響應內容傳遞給客戶端
<jsp:useBean>
Bean的基本要素:
1、必須要有一個不帶參數的構造器(構造函數),在jsp元素創建Bean時會調用空構造器
2、Bean類應該沒有任何公共實例變量。也就是說不允許直接訪問實例變量,變量名稱首字母必須小寫
3、通過getter()和setter()方法來讀或寫變量值,並且將對應的變量首字母改成大寫
4、Bean要有包,不能使用裸體類
<jsp:useBean id="beanName" class="cn.wyd.testBean" scope="page" type="int">
</jsp:useBean>
id:Bean對象的實例名稱
class:包名+類名
scope:這個Bean的作用範圍,共有page,request,session,application四個值,默認爲page,表示這個Bean只在當前頁面有效。
type:Bean的實例類型,如果這個選擇的是Object,則表示父類引用指向子類對象
<jsp:setProperty property="count" name="beanName" value="50"/>
設置Bean的屬性,property="Bean中的變量名" 這句話相當於beanName.setCount(50);
<jsp:getProperty property="count" name="beanName" />
得到Bean的屬性,相當於beanName.getCount();
JSP內置對象
內置對象是在JSP裏直接可以使用的對象,包括:
out request response pageContext session application config exception page
JSP內置對象out
out內置對象是一個緩衝的輸出流,用來給客戶端返回信息。
它是javax.servlet.jsp.JspWriter類的一個實例
常用方法:
println():向客戶端輸出各種類型的數據
write():
newline():輸出一個換行符
close():關閉輸出流
flush():輸出緩衝區裏的數據
clearBuffer():清除緩衝區裏的數據,同時把數據輸出到客戶端
clear():清除緩衝區裏的數據
getBufferSize():返回緩衝區的大小
JSP內置對象request
request內置對象表示的是調用JSP頁面的請求。
它是javax.servlet.http.HttpServletRequest接口的一個實例
可以用此對象取得請求的Header信息,請求方式(get/post),請求的參數名稱、參數值、客戶端主機名等
常用方法:
getParameter(String paramName) 獲得form提交過來的參數值,此參數值由paramName指定
getMethod():返回客戶端向服務器傳送數據的方法
getParameterNames():獲得客戶端傳送給服務器的所有參數名,返回枚舉類型(Enumeration)
getParameterValues(String name):獲得指定參數的所有值,由name指定
getRequestURI():獲得發出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的機器名稱
getServerName():獲取服務器的名字
getServerPort():獲取服務器端的端口
JSP內置對象response
表示的是返回給客戶端的響應
它是javax.servlet.http.HttoServletResponse接口的一個實例
經常用於設置HTTP標題,添加cookie,設置響應內容的類型和狀態,發送HTTP重定向和編碼URL
常用方法:
sendRedirect(String url):重定向JSP文件
setContentType(String contentType):設置MIME類型和編碼方式
addCookie(Cookie cookie):添加一個cookie對象,用於在客戶端保存特定的信息
addHeader(String name,String value):添加HTTP頭信息,該Header信息將發送到客戶端
containsHeader(String name):判斷指定名字的HTTP頭文件是否存在
sendError(int):向客戶端發送錯誤的信息
JSP內置對象session
常用方法:
setAttribute(String name ,Object value)
getAttribute(String name)
isNew()
getSessionId()
Servlet和JSP的通信
從JSP調用Servlet可用<jsp:forward>或者sendRedirect,請求信息自動跳轉到servlet
從servlet調用JSP使用ResquestDispatcher接口的forward(request,response)方法或者使用sendRedirect跳轉到JSP頁面
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/wangyunda/archive/2008/04/30/2351083.aspx