1.JSP 内置对象
在jsp自动转换成的java文件的service方法中,我们可以看到这九个内置对象:
具体如下:
- request(HttpServletRequest):代表客户端的HTTP请求。通过该对象,可以获取请求参数、请求头信息、请求方法等。
- response(HttpServletResponse):代表服务器对客户端的HTTP响应。通过该对象,可以设置响应的状态码、响应头信息、响应内容等。
- session(HttpSession):代表客户端与服务器之间的会话。通过该对象,可以在不同的请求之间共享数据,并实现用户的状态管理。
- application(ServletContext):代表整个Web应用程序的上下文。通过该对象,可以获取应用程序的初始化参数、共享数据等。
- out(JspWriter):代表响应输出流。通过该对象,可以向客户端发送文本、HTML代码等。
- config(ServletConfig):代表JSP页面的配置信息。通过该对象,可以获取JSP页面的初始化参数。
- page(Object):代表当前JSP页面的实例。通过该对象,可以调用当前页面的方法。
- pageContext(PageContext):代表当前JSP页面的上下文。通过该对象,可以访问其他内置对象,以及一些与页面渲染相关的信息。
- exception: 用于处理异常情况。在JSP页面中,可以使用`<%@ page isErrorPage="true" %>`指令将当前页面标记为错误处理页面。这样,当页面发生异常时,会自动跳转到错误处理页面,并将异常信息保存在`exception`对象中。可以通过以下方式访问`exception`对象:<% Exception e = (Exception) request.getAttribute("javax.servlet.error.exception"); %>
这些内置对象可以在JSP页面中直接使用,无需进行额外的声明或初始化。通过这些对象,我们可以方便地访问和操作与Web应用程序相关的数据和功能。
2.JSP内置对象的作用域
从上图的JSP代码,我们可以看到pageContext,request,session,application都可以设置属性。
但它们的区别在于作用域不同:
pageContext:保存的属性仅在当前页面有效,离开当前页面就无法再读取了。一般是用户只使用一次。
request:保存的属性仅在当前请求有效,如果进行请求转发,可以带去下一个页面。一般是用户只使用一次。
session:保存的属性仅在当前会话有效,也就是打开浏览器到关闭浏览器的过程中有效。一个用户可以多次使用这些数据。
application:保存的属性在服务器中有效,也就是打开服务器到关闭服务器的过程中有效。多个用户可以共享这些数据。
使用这四个内置对象来保存数据,可以都用pageContext来读取:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello Freya!</h2>
<%
pageContext.setAttribute("name1","第一棵树");
request.setAttribute("name2","第二棵树");
session.setAttribute("name3","第三棵树");
application.setAttribute("name4","第四棵树");
%>
<%
String name1 = (String)pageContext.getAttribute("name1");
String name2 = (String)pageContext.getAttribute("name2");
String name3 = (String)pageContext.getAttribute("name3");
String name4 = (String)pageContext.getAttribute("name4");
String name5 = (String)pageContext.getAttribute("name5");
%>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3>${name5}</h3>
</body>
</html>
pageContext去取属性的时候,会先检查pageContext中有没有,没有的话再依次检查request, session, application。所以通过pageContext,就可以拿到所有当前页面可以访问的属性。