一.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缓冲区中的内容输出到浏览器端.如果想让上面的代码的按代码的先后顺序输出可以写成:
spWriter out1 = pageContext.getOut();
out1.print("222");
out1.flush(); //刷新缓冲区
PrintWriter pw = response.getWriter();
pw.print("111");
*out对象调用PrintWriter对象的print( )方法输出缓冲区中的内容的条件:
^设置page指令的buffer属性关闭了out对象的缓存功能
^写入到out对象中的内容充满了out对象的缓冲区
^整个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文件的
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、取请求参数的值非常方便
${param.paramName} //取得URL后的参数名所对应的参数值.如
用${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"
一级建造师二级建造师消防工程师造价工程师土建职称房地产经纪人公路检测工程师建筑八大员注册建筑师二级造价师监理工程师咨询工程师房地产估价师 城乡规划师结构工程师岩土工程师安全工程师设备监理师环境影响评价土地登记代理公路造价师公路监理师化工工程师暖通工程师给排水工程师计量工程师
执业药师执业医师卫生资格考试卫生高级职称护士资格证初级护师主管护师住院医师临床执业医师临床助理医师中医执业医师中医助理医师中西医医师中西医助理口腔执业医师口腔助理医师公共卫生医师公卫助理医师实践技能内科主治医师外科主治医师中医内科主治儿科主治医师妇产科医师西药士/师中药士/师临床检验技师临床医学理论中医理论