JSP九大内置对象
JSP九大内置对象为:pageContext, request, session, application, out, exception, page, config, response
1、pageContext
pageContext是页面的上下文对象,其有效范围仅限于当前页面,即使是转发之后,其中存储的信息也会消失。
2、request
request是一个请求对象,包含了请求数据,当然服务器也可以向其中写数据,其作用范围仅限于此次请求。即转发后有效,重定向会失效。
3、session
session是指一次会话,该会话是从打开浏览器,访问网站,到关闭浏览器,这才是一次完整的会话。一般调用req.getsession会为客户端创建一个session保存在服务器端,可以存储数据,数据可以在此次会话中共享。关闭浏览器并不能就此关闭session,销毁session对象可以调用invalidate()方法或者等待session超时(一般为30分钟)。
4、application
application也就是servlet中的servletContext。是一个服务器层级的对象。其作用域为开启服务器到关闭服务器。其中的数据可以被所有用户所共享。
主要记一下以上的四种属性。
当我们在这些个对象中设置了一些属性。当我们需要读取这些属性内容是,服务器又是如何处理的呢?
pageContext.setAttribute("name1", "张三1");
request.setAttribute("name2", "张三1");
session.setAttribute("name3", "张三1");
application.setAttribute("name4", "张三1");
当我们如上分别使用四个对象设置了不同的属性,要想获取所有的属性,一种办法是按照设置的顺序用不同对象获取不同的属性。
<%
String name1 = (String)pageContext.getAttribute("name1");
String name2 = (String)pageContext.getAttribute("name2");
String name3 = (String)pageContext.getAttribute("name3");
String name4 = (String)pageContext.getAttribute("name4");
%>
name1:${name1}
name2:${name2}
name3:${name3}
name4:${name4}
上段代码中使用jsp表达式嵌入了一段java代码通过pageContext一个对象获取name1-name4。并使用EL表达式将name1-name4输出到浏览器。当然也可以使用jsp表达式输出--<%= name1%>,即可。但是它两有一点区别。EL表达式会过滤NULL等无效输出,比如:String name5 = (String)pageContext.getAttribute("name5");获取一个我们没有设置的name5,所以name5值为null,用EL表达式不会输出name5的值。jsp表达式会把null也输出到浏览器上。
通过上面这段代码可以有效的将name1-name4的值都准确的输出到浏览器中,在后续的实验中发现之所以能够输出name1-name4的值可能完全归功于EL表达式(依据我个人实验所得出的结论)。因为在使用JSP表达式时,无法输出非对应对象获取的值。
然后我去查找了JSP文件翻译成java文件中看到EL表达式为:
out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${name1}", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
可以看到EL表达式并非是直接输出java变量,而是自己去获取该变量。

浙公网安备 33010602011771号