除了在jsp中9大隐式变量(在前面文章也叫预定义变量)在转化成为servlet后_jspService中可以看到:
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
为了提升效率,在EL表达式中规范了以下隐式对象:
(1)pageContext
pageContext对象引用当前PageContext. PageContext. 类依次拥有request、response,session,out和servletContext属性(即getRequest,getResponse,getSession, getOut,getServletContext方法).例如,下面表达式输出当前的会话ID
${pageContext.session.id}
(2) param和paramValue
这些对象允许我们访问基本的请求参数位(param)或请求参数值的数组(paramValues).因此,下面的表达式输出custID请求参数的值(如果当前请求中不存在这个参数,则返回空字符串。${param.custID}
(3)header和headerValues
这些对象分别访问HTTP请求报头的主要值以及全部值。回顾下,如果点号后面的值不能作为合法的名称,则不能用点号记法。因此,要访问Accept报头, 我们可以使用${header.Accept},或者${header["Accept"]}
类似的对象还有cookie , initParam,pageScope,requestScope,sessionScope,applicationScope