一.JspWriter與PrintWriter的關系:
1.都是繼承自java.io.Writer類.
JspWriter可以在JSP頁面中直接用out對象輸出.可以用pageContext.getOut();得到JspWriter對象.
PrintWrietr在JSP頁面中必須用response.getWriter();方法得到其對象.二者作用域不同.
2.在JSP頁面中同時調用兩種方法向頁面輸出數(shù)據(jù),PrintWriter中的數(shù)據(jù)會輸出在JspWriter前面.
如:
JspWriter out1 = pageContext.getOut(); //在JSP頁面中可以直接使用out對象,而不用像這
樣用pageContext.getOut();來得到JspWriter對象.這樣做得到的out1和JSP頁面中封裝的out對象是同
一個對象.(可以用out == out1 來判斷兩個對象是否相等.)
out1.print("222");
PrintWriter pw = response.getWriter();
pw.print("111");
*這樣做的結果,在瀏覽器端還是先顯示 "111",然后再顯示"222".說明不管JspWriter與PrintWriter在程序中的順序怎么樣,始終先會輸
出PringWriter中的數(shù)據(jù)然后再輸出JspWriter中的數(shù)據(jù).這是因為out對象相當于插入到了PrintWriter前面的緩沖區(qū)中.out對象滿足一定條件時
,才會調用PrintWriter對象的print()方法,把out緩沖區(qū)中的內(nèi)容輸出到瀏覽器端.如果想讓上面的代碼的按代碼的先后順序輸出可以寫成:
spWriter out1 = pageContext.getOut();
out1.print("222");
out1.flush(); //刷新緩沖區(qū)
PrintWriter pw = response.getWriter();
pw.print("111");
*out對象調用PrintWriter對象的print( )方法輸出緩沖區(qū)中的內(nèi)容的條件:
^設置page指令的buffer屬性關閉了out對象的緩存功能
^寫入到out對象中的內(nèi)容充滿了out對象的緩沖區(qū)
^整個JSP頁面結束
二、
1.JSP九個隱含對象(內(nèi)置對象):直接在jsp文件里使用
HttpServletRequest request
HttpServletResponse response
PageContext pageContext (頁面上下文)
HttpSession session
ServletContext application
ServletConfig config
JspWriter out
Object page
Throwable exception
2、四個作用域
application作用域 ServletContext
session作用域 HttpSession
request作用域 HttpServletRequest
page作用域 PageContext //生命周期是JSP頁面編譯成JAVA文件時的service方法.方法結束,生命周期也結束
3.pageContext的findAttribute方法會依次從四個作用域去找。是按什么先后順序找的?
會按作用域由小到大的順序來查找.即(page-->request-->session-->application).用pageContext.findAttribute("key");
的好處就是不用指定作用域的類型.只要這四個作用域中有指定的key.就可以得到其對應的value;
三.全局錯誤處理
對頁出現(xiàn)的相同的錯誤或異常不用在每個頁面的指令頭都追加errorPage="錯誤頁面";指令.
而可以在xml中配置全局錯誤處理.(必須寫在xml文件的
404
/404Error.jsp
//用于處理404錯誤的全局配置.所有404錯誤都會轉到404Error.jsp頁面中.
java.lang.ArithmeticException
/ArithmeticException.jsp
//用于處理算術異常的全局配置.所有算術異常都會轉到rithmeticException.jsp頁面中.
四、EL表達式的簡單介紹:
1、從四個作用域中取值,可屏蔽null值,如果得到的value為空,則輸出"",而不是null.而且不用指定作用域,從四個作用域的取值順
序也是從小到大的順序.即(page-->request-->session-->application).如果有兩個作用域中有相同的"key".那么EL表達式取到的value是作用
域較小的key所對應的value.而不會把兩個作用域中的值都取出來.
${key}
${key.propertityName}
.
2、取請求參數(shù)的值非常方便
${param.paramName} //取得URL后的參數(shù)名所對應的參數(shù)值.如
用${param.name}就可以得到"aaa",${param.age}就可以得到"14"
用EL表達式可以省略大量的代碼.不用再調用作用域的getAttribute()方法,判斷value是否為null的傳統(tǒng)方法.
3.可以取出JavaBean中的屬性.
如:
class Person
{
private String name;
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
}
可以在JSP頁面寫入以下代碼,方便取出Bean中的屬性.
Person person = new Person();
person.setName("aa");
request.setAttribute("per",person);
${per.name} //運行結果為"aa"
初級會計職稱中級會計職稱經(jīng)濟師注冊會計師證券從業(yè)銀行從業(yè)會計實操統(tǒng)計師審計師高級會計師基金從業(yè)資格稅務師資產(chǎn)評估師國際內(nèi)審師ACCA/CAT價格鑒證師統(tǒng)計資格從業(yè)
一級建造師二級建造師消防工程師造價工程師土建職稱房地產(chǎn)經(jīng)紀人公路檢測工程師建筑八大員注冊建筑師二級造價師監(jiān)理工程師咨詢工程師房地產(chǎn)估價師 城鄉(xiāng)規(guī)劃師結構工程師巖土工程師安全工程師設備監(jiān)理師環(huán)境影響評價土地登記代理公路造價師公路監(jiān)理師化工工程師暖通工程師給排水工程師計量工程師
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級職稱護士資格證初級護師主管護師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗技師臨床醫(yī)學理論中醫(yī)理論