JSP内置对象是一组自动可用的对象,这些对象代表了与请求、响应和JSP页面容器环境相关的各种对象。你不需要显式地创建这些对象,它们由JSP容器提供。这些内置对象提供了对HTTP请求-响应模型的直接支持,并且简化了一些常见的任务比如获取用户数据,跟踪会话等。
JSP 内置对象列表
- request:
HttpServletRequest
对象,表示客户端发起的请求。 - response:
HttpServletResponse
对象,表示对客户端的响应。 - out:
JspWriter
对象,用于向客户端发送输出。 - session:
HttpSession
对象,用于管理与特定用户的会话。 - application:
ServletContext
对象,代表整个Web应用程序的上下文。 - config:
ServletConfig
对象,包含了Servlet的初始化参数。 - pageContext:
PageContext
对象,提供了对JSP页面所有对象和命名空间的访问。 - page: 表示当前的Servlet实例,通常对用户不是太有用。
- exception: 表示JSP页面中发生的异常对象。
域(Scopes)
在JSP中,域指的是数据可以存活的时间和范围,也就是说,在域中存放的对象可以被Web应用程序中的其他组件访问。JSP 支持以下四种域:
- Page Scope: 仅限于本页内可用。
- Request Scope: 与一个请求的生命周期一致。
- Session Scope: 与用户的一个会话期间一致。
- Application Scope: 对所有用户的会话期间一致,只要应用程序启动,数据就会存在。
作用域从小到大的排序是:
- Page Scope:范围最小,只在当前页面有效,当页面处理完毕后,page scope 中的属性就不再可用了。
- Request Scope:范围较小,只在一次请求中有效,请求被转发到其他资源(比如另一个JSP,Servlet等)时,这些属性仍然可用。
- Session Scope:范围较大,跨越多次请求,在一个用户的多次请求之间共享数据,通常用于维护用户会话期间的状态。
- Application Scope:范围最大,跨越整个Web应用程序,所有的用户共享在此域中的属性,只要应用程序启动,这些属性就一直存在。
源码示例
以下是一个简单的JSP页面示例,它演示了如何使用这些内置对象和域来存取数据:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>内置对象和域示例</title>
</head>
<body>
<%-- 使用pageContext设置属性 --%>
<%
pageContext.setAttribute("pageScope", "Page Scope Data");
request.setAttribute("requestScope", "Request Scope Data");
session.setAttribute("sessionScope", "Session Scope Data");
application.setAttribute("applicationScope", "Application Scope Data");
%>
<p>Page Scope: <%= pageContext.getAttribute("pageScope") %></p>
<p>Request Scope: <%= request.getAttribute("requestScope") %></p>
<p>Session Scope: <%= session.getAttribute("sessionScope") %></p>
<p>Application Scope: <%= application.getAttribute("applicationScope") %></p>
</body>
</html>
在上述代码中,我们使用了内置对象pageContext
、request
、session
和application
来设置不同范围的属性。然后,使用相同的对象来获取并显示这些属性值。
注意,在实际开发中,通常不鼓励直接在JSP页面中编写大量的Java代码。应该尽量使用JSP标准标签库(JSTL)或表达式语言(EL)来实现这些功能。
细节解析
每个内置对象有特定的方法和功能,比如:
- pageContext: 这个对象提供了一个单一的API去管理不同的上下文对象,并且能够访问整个JSP页面的命名空间。它还提供了其他功能,如获取其他内置对象、错误信息等。
- request: 通过这个对象,你可以访问客户端发送的所有请求信息,包括表单数据、查询字符串、头信息等。
- response: 你可以使用这个对象来控制发送给客户端的响应,比如设置内容类型、编码方式、发送错误信息等。
- session: 用这个对象可以追踪客户端的会话,可以在多个请求和页面间保持信息。
- application: 通过该对象,你能够访问整个Web应用程序的环境,可以存储全局的配置信息或者共享数据。
注意
为了遵循MVC模式,你应该尽量避免在JSP页面中编写Java代码,因为这会导致表示层和控制层混杂在一起,从而降低应用程序的维护性。在实际应用中,应该尽量使用Servlet来处理业务逻辑,并且只在JSP页面中负责输出结果。