getJspBody().invoke();与getJspContext().getOut().write();的区别

 

getJspBody().invoke();

1.将标签体的内容写入到输出流writer中;

如:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="/simpleTag"  prefix="s"%>




simpleTag



当前时间:


package simpleTag;

import java.io.IOException;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.SimpleTagSupport;

public class DisplayInfo extends SimpleTagSupport {
	@Override
	public void doTag() throws JspException, IOException {
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String data=sdf.format(new Date());
		
		StringWriter stringWriter=new StringWriter();
		getJspBody().invoke(stringWriter);
		System.out.println(stringWriter+data);
		
		
	}

	
}

运行结果为:

getJspBody().invoke();与getJspContext().getOut().write();的区别_第1张图片

 

从运行结果可以看出

getJspBody().invoke(stringWriter);

getJspBody().invoke(stringWriter);把标签体的内容(当前时间:)写到了stringWriter的输出流中

 

2.将标签体的内容输出到页面

如:

@Override
	public void doTag() throws JspException, IOException {
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String data=sdf.format(new Date());
		
		
		getJspBody().invoke(null);
		
	}

前端页面一概不变;

运行结果为:

getJspBody().invoke();与getJspContext().getOut().write();的区别_第2张图片

 

从运行结果可以看出

 

getJspBody().invoke(null);

 

getJspBody().invoke(null);把标签体的内容直接输出到页面

 

getJspContext().getOut().write();

@Override
	public void doTag() throws JspException, IOException {
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String data=sdf.format(new Date());
		
		JspWriter jspWriter=getJspContext().getOut();
		getJspBody().invoke(null);
		jspWriter.write("jspWriter:"+data);
		
		PageContext pageContext=(PageContext) getJspContext();
		pageContext.getResponse().getWriter().write("pageContext:"+data);
	}

前端页面一概不变;

运行结果为:

getJspBody().invoke();与getJspContext().getOut().write();的区别_第3张图片

从运行结果可以看出

getJspContext().getOut();等价于Response().getWriter();

也就是说getJspContext().getOut();的作用是获取页面的输出流Writer

 

 

当同时我们可以发现:

pageContext.getResponse().getWriter().write("pageContext:"+data);

永远比

jspWriter.write("jspWriter:"+data);

先执行!

你可能感兴趣的:(Java)