文档章节

JspWriter与PrintWriter的关系

陈狐
 陈狐
发布于 2017/08/11 09:28
字数 1045
阅读 10
收藏 0

一.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"

本文转载自:http://blog.csdn.net/zhd_superstar/article/details/6588222

陈狐
粉丝 1
博文 53
码字总数 12650
作品 0
武汉
私信 提问
JSP的九个隐式对象

JSP使用脚本元素作为一种简易方法在模板数据中嵌入java代码,这些脚本元素在JSP翻译成Servlet的阶段,都被转化为Servlet中的java代码。 JSP引擎在调用JSP对应的jspServlet时,会传递或创建9...

陈嘻嘻哈哈
2015/11/10
0
0
JSP中out隐式对象的工作原理及相关问题

out与response.getWriter().write()混用时出现的问题: 原因在于: JSP页面执行的时候,会在JspWriter对象的out缓冲区中写入haha信息,并在response.getWriter方法返回的PrintWriter对象中写入...

木子丰
2015/03/16
0
0
response设置编码方式 print和write方法的对比

很多场合会发现我们输出的中文是乱码,这主要可能有两方面的原因: 一个是浏览器的解析方式,另一个是我们服务器端返回数据的方式。只要我们保证浏览器的解析方式和我们回显的数据的编码格式...

MrPei
2018/07/20
0
0
JSP-隐式对象、pageContext、错误处理

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/twilight_karl/article/details/75804749 简介 隐式对象是_jspService()中的局部变量,故只能在 和 中使用 隐式对象...

twilight0402
01/05
0
0
JSP中的九个内置对象

一、JSP运行原理   每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个jspServlet(实质上也是一个servlet) ,然后按照servl...

凡尘网络
2015/12/22
6
0

没有更多内容

加载失败,请刷新页面

加载更多

全面剖析 Knative Eventing 0.6 版本新特性

前言 Knative Eventing 0.6 版本已经于5月15号正式发布。相比于0.5版本,此次发布包含了一些重要特性及更新。针对这些新特性以及更新,我们如何快速、精准的定位主要技术点。本篇文章针对这些...

阿里云官方博客
25分钟前
1
0
在闲鱼,我们如何用Dart做高效后端开发?

背景 像阿里其他技术团队以及业界的做法一样,闲鱼的大多数后端应用都是全部使用java来实现的。java易用、丰富的库、结构容易设计的特性决定了它是进行业务开发的最好语言之一。后端应用中数...

阿里云云栖社区
27分钟前
18
1
初学Docker容器网络不得不看的学习笔记

【技术沙龙002期】数据中台:宜信敏捷数据中台建设实践|宜信技术沙龙 将于5月23日晚8点线上直播,点击报名 一、关于Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0...

宜信技术学院
29分钟前
14
0
Django框架配置

今天我们学习Django框架配置,首先先来看一下如何在Django中创建APP! 1.Django中创建APP 首先我们打开PyCharm,找到之前你创建的Django项目,我的项目是First_Project: (1)先选中你要运行...

彩色泡泡糖
31分钟前
1
0
git代码迁移

一、从阿里云code迁移到gitLab 1、在gitLab上新建一个项目Bicon,添加私钥 2、从原地址克隆一份裸版本库 git clone --bare git://xxxx_Bicon.git 这里的地址是阿里云code的地址 3、以镜像推送...

星爵22
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部