JspWriter与PrintWriter的关系
一.JspWriter與PrintWriter的關系:
1.都是繼承自java.io.Writer類.
JspWriter可以在JSP頁面中直接用out對象輸出.可以用pageContext.getOut();得到JspWriter對象.PrintWrietr在JSP頁面中必須用response.getWriter();方法得到其對象.二者作用域不同.
?
2.在JSP頁面中同時調用兩種方法向頁面輸出數據,
PrintWriter中的數據會輸出在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中的數據然后再輸出JspWriter中的數據.這是因為out對象相當于插入到了PrintWriter前面的緩沖區中.out對象滿足一定條件時,才會調用PrintWriter對象的print()方法,把out緩沖區中的內容輸出到瀏覽器端.如果想讓上面的代碼的按代碼的先后順序輸出可以寫成:
????????????? JspWriter out1 = pageContext.getOut();
????????????? out1.print("222");
????????????? out1.flush(); //刷新緩沖區
????????????? PrintWriter pw = response.getWriter();
???????
????????????? pw.print("111");
?????????? ?*out對象調用PrintWriter對象的print( )方法輸出緩沖區中的內容的條件:
?????????? ?^設置page指令的buffer屬性關閉了out對象的緩存功能
??????????? ^寫入到out對象中的內容充滿了out對象的緩沖區
????????????^整個JSP頁面結束
??????????? ^JSP中調用了out.flush()或response.flushbuffer()
?
二、JSP九個隱含對象
?????????? 1.JSP九個隱含對象(內置對象):直接在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;
三.全局錯誤處理?????????
???????????? 對頁出現的相同的錯誤或異常不用在每個頁面的指令頭都追加errorPage="錯誤頁面";指令.
???????????? 而可以在xml中配置全局錯誤處理.(必須寫在xml文件的 <web-app></web-app>標簽對中)
??????????? <error-page>
????????????????????? <error-code>404</error-code>
??????????????????????<location>/404Error.jsp</location>
????????????</error-page>
?????????? //用于處理404錯誤的全局配置.所有404錯誤都會轉到404Error.jsp頁面中.
?????????? <error-page>
?????????????? <exception-type>java.lang.ArithmeticException</exception-type>
????????????? <location>/ArithmeticException.jsp</location>
?????????? </error-page>
?????????? //用于處理算術異常的全局配置.所有算術異常都會轉到rithmeticException.jsp頁面中.
四、EL表達式的簡單介紹:
?????????? 1、從四個作用域中取值,可屏蔽null值,如果得到的value為空,則輸出"",而不是null.而且不用指定作用域,從四個作用域的取值順 序也是從小到大的順序.
?????????????? 即(page--?? >request-->session-->application).如果有兩個作用域中有相同的"key".那么EL表達式取到的value是作用域較小的key所對應的value.而不會把兩個作用域中
?????????????? 的值都取出來.
?????????????? ${key}
?????????????? ${key.propertityName}
.
??????????? 2、取請求參數的值非常方便
???????????????? ${param.paramName} //取得URL后的參數名所對應的參數值.如<jsp:forward page="2.jsp?name=aaa&age=14"></jsp:forward>
??????????????? 用${param.name}就可以得到"aaa",${param.age}就可以得到"14"
? 用EL表達式可以省略大量的代碼.不用再調用作用域的getAttribute()方法,判斷value是否為null的傳統方法.
? 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"
轉載于:https://www.cnblogs.com/huangpeng1990/p/4364370.html
總結
以上是生活随笔為你收集整理的JspWriter与PrintWriter的关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: conflicting types fo
- 下一篇: Windows上的音频采集技术