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"
JspWriter与PrintWriter的关系的更多相关文章
- 辨析JspWriter和PrintWriter
JspWriter和PrintWriter的区别? JspWriter相当于带缓冲的PrintWriter 如何控制out缓冲? 通过设置JSP页面page指令的buffer属性, 可以调整out缓冲 ...
- jsp 以及javabean内省技术
l JSP l JavaBean及内省 l EL表达式 1.1 上次课内容回顾 会话技术: Cookie:客户端技术.将数据保存在客户端浏览器上.Cookie是有大小和个数的限制. Session:服 ...
- JSP(一)
一.JSP概要 一]JSP的概念 1>JSP是SUN公司开发的一个基于服务端的一种动态WEB开发技术. 2>JSP的代码结构/内容 = HTML内容+JSP特有元素内容 ...
- JSP 内置对象(上)
JSP 内置对象是 Web 容器创建的一组对象,不使用 new 关键字就可以直接使用的对象.如上一章中使用脚本实现打印九九乘法表中的out对象 <%-- 脚本:out对象是JSPWriter类的 ...
- IO流(五)__文件的递归、Properties、打印流PrintStream与PrintWriter、序列流SequenceInputStream
一.文件的遍历 1.需求:对指定目录进行所有的内容的列出(包含子目录的内容)-文件的深度遍历 思想:递归的思想,在递归的时候要记住递归的层次. public class FileTest { publ ...
- Java Servlet(五):GenericServlet与Servlet、HttpServlet之间的关系(jdk7+tomcat7+eclipse)
本篇主要记录下,对GenericServlet的作用理解,及其与Servlet/HttpServlet之间的关系. 示例完成业务: 1.新建一个login.jsp页面,要求改页面能输入username ...
- Java输入、输入、IO流 类层次关系梳理
本文主要关注在Java编程中涉及到的IO相关的类库.方法.以及对各个层次(抽线.接口继承)的流之间的关系进行梳理 相关学习资料 http://baike.baidu.com/view/1007958. ...
- cookie与sessionID之间的关系实验
上一篇介绍了cookie,这里来看看cookie与sessionID之间有什么关系. 一.编写测试用例代码 新建一个servlet如下: public class SessionServlet ext ...
- java IO选择流的原则及其与IO流相关类的关系
1 按照用途进行分类 1.1 按照数据的来源(去向)分类 是文件:FileInputStream, FileOutputStream, FileReader, FileWriter 是byte[]:B ...
随机推荐
- php笔记(一)面向对象编程
<?php //定义一个类 class Car { var $name = '汽车'; function getName() { return $this->name; } } //实例化 ...
- 配置pyqt5环境 for python3.4 on Linux Mint 17.1
1.安装QT 配置QT PATH 在 /etc/profile文件中追加 export QTDIR=/usr/local/Qt5.4.2/5.4/gcc_64 export LD_LIBRARY_PA ...
- 计算机网络分层(OSI七层、 TCP/IP四层)
- 《JavaScript高级程序设计》读书笔记 ---数据类型
ECMAScript 中有5 种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number.String和Object——复杂数据类型,Object 本质上是由一组 ...
- HADOOP与ORACLE关联
安装Oracle和Oracle大数据连接器/OLH,尝试把HDFS中的数据文件装载到Oracle中的表 http://f.dataguru.cn/thread-460110-1-1.html 文档讲述 ...
- 清除浮动clearfix
css用clearfix清除浮动 更多2013/11/4 来源:css学习浏览量:11901 学习标签: css clearfix 本文导读:写css 时总为浮动而烦恼,如果用了浮动,浮动的父层不会跟 ...
- 转:java.io.IOException: Exceeeded maximum number of redirects: 5 解决版本
Jmeter运行的时候出现的重定向超过n次的问题: When trying to test a Silverlight application, I get the below error. Has ...
- ShellExecute, WinExec, CreateProcess区别
ShellExecute ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件.打开一个目录.打印一个文件等等),并对外部程序有一定的控制. 有几个API函数都可以实现这些功能 ...
- 第五节 面向连接传输:TCP
第五节 面向连接传输:TCP TCP概述RFCs:793,1122,1323,2018,2581 点对点: 一个发送方,一个接收方 可靠,按序的字节流: 无“报文边界”,无结构但有 ...
- 只能在执行 Render() 的过程中调用 RegisterForEventValidation
当用GridView导出Execl的时候,会发生只能在执行 Render() 的过程中调用 RegisterForEventValidation的错误提示.有两种方法可以解决以上问题: 1.修改web ...