<%! ... %>中定义的函数,变量,最终作为文件类(class usingout)的成员函数和变量,而不是作为servlet入口函数_jspService中的成员函数或变量。
<% ... %>中包含的jsp语句被包含在入口函数service中。
可以看到_jspService函数中开头:
JspWriter out = null;
out = pageContext.getOut();
这两句是usingout.jsp转为usingout.java文件时,由jsp应用伺服器自动添加的。
不难看出:out在_jspService函数已定义并获得一个实例,因此,可以直接在<% ... %>中使用out,
但要在<%! ... %>函数中使用out对象,由于out并未定义和实例化,编译出错!
如果非要在函数中使用out将某些错误信息输出到客户端,可以将javax.servlet.jsp.JspWriter类型变量作为函数参数。