【JavaWeb学习 | 第17篇】JSP内置对象

【JavaWeb学习 | 第17篇】JSP内置对象(隐式对象)

在JSP页面中,容器(Tomcat等)会自动为我们创建并注入9个内置对象(也称为隐式对象预定义对象)。这些对象无需我们手动声明或实例化,就可以直接在<% %>脚本片段、表达式<%= %>或EL表达式中使用,大大简化了JSP开发。

这9个内置对象对应Servlet中的核心组件,理解它们是掌握JSP的关键。

一、JSP九大内置对象一览表

序号对象名称Java类型主要作用域核心功能描述
1requestjavax.servlet.http.HttpServletRequestrequest获取客户端请求信息(参数、头信息、Cookie等)
2responsejavax.servlet.http.HttpServletResponse设置响应信息(重定向、设置头、Cookie等)
3outjavax.servlet.jsp.JspWriterpage向客户端输出内容(类似PrintWriter
4sessionjavax.servlet.http.HttpSessionsession管理用户会话状态(保存用户登录信息等)
5applicationjavax.servlet.ServletContextapplication整个Web应用共享的数据(全局配置、计数器等)
6configjavax.servlet.ServletConfigpage当前JSP/Servlet的配置信息(初始化参数)
7pageContextjavax.servlet.jsp.PageContextpage最强大:管理四大作用域、跳转、获取其他内置对象
8pagejava.lang.Object(实际是当前JSP的Servlet实例)page代表当前JSP页面本身(很少直接使用)
9exceptionjava.lang.Throwablepage(仅错误页)异常对象,仅在isErrorPage="true"的页面可用

注意:其中exception对象只有在页面指令<%@ page isErrorPage="true" %>时才可用。

二、四大作用域(与内置对象紧密相关)

JSP通过pageContext可以操作四大作用域,数据共享范围从大到小依次是:

  1. page(页面作用域):当前JSP页面
  2. request(请求作用域):一次请求(包括转发)
  3. session(会话作用域):一次会话(浏览器关闭前)
  4. application(应用作用域):整个Web应用(服务器重启前)

常用方法:

  • setAttribute(String name, Object value)
  • getAttribute(String name)
  • removeAttribute(String name)

三、常用内置对象详细说明与示例

1. request 对象(最常用)

用于获取表单参数、请求头、客户端信息等。

&lt;%-- 获取表单参数 --%>
姓名:&lt;%= request.getParameter("username") %>

&lt;%-- 获取所有参数名 --%>
&lt;% 
    java.util.Enumeration&lt;String> names = request.getParameterNames();
    while(names.hasMoreElements()) {
        String name = names.nextElement();
        out.println(name + " = " + request.getParameter(name) + "&lt;br>");
    }
%>

&lt;%-- 请求头 --%>
User-Agent: &lt;%= request.getHeader("User-Agent") %>

2. response 对象

常用于重定向、设置响应头。

&lt;% 
    // 重定向(客户端行为,地址栏改变)
    response.sendRedirect("success.jsp");

    // 设置响应类型
    response.setContentType("text/html;charset=UTF-8");
%>

注意sendRedirect()后不能再输出内容,否则可能抛异常。

3. out 对象

用于输出内容到客户端。JspWriter类型,比response.getWriter()更方便(有缓冲)。

&lt;% out.print("Hello JSP!"); %>
&lt;% out.println("换行输出"); %>

&lt;%-- 表达式其实就是 out.print() --%>
&lt;%= "直接输出" %>

4. session 对象

保存用户会话数据(默认30分钟超时)。

&lt;% 
    session.setAttribute("user", "张三");
    String user = (String) session.getAttribute("user");
    out.println("当前登录用户:" + user);

    // 获取Session ID
    out.println("Session ID: " + session.getId());
%>

5. application 对象

整个应用共享,常用于在线人数统计、全局配置。

&lt;% 
    Integer count = (Integer) application.getAttribute("onlineCount");
    if(count == null) count = 1;
    else count++;
    application.setAttribute("onlineCount", count);
    out.println("当前在线人数:" + count);
%>

6. pageContext 对象(超级重要)

可以获取其他内置对象、管理四大作用域、实现页面跳转(forward)。

&lt;%-- 设置/获取不同作用域 --%>
&lt;% pageContext.setAttribute("msg", "page作用域"); %>
&lt;% pageContext.setAttribute("msg", "request作用域", PageContext.REQUEST_SCOPE); %>

&lt;%-- 获取其他对象 --%>
&lt;% 
    HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
    JspWriter o = pageContext.getOut();
%>

&lt;%-- 转发(服务器内部跳转,地址栏不变) --%>
&lt;% pageContext.forward("target.jsp"); %>

7. config 对象

获取web.xml中为当前Servlet/JSP配置的初始化参数。

&lt;%= config.getInitParameter("paramName") %>

8. page 对象

基本等同于this,指向当前JSP翻译成的Servlet实例,很少直接用。

9. exception 对象(错误处理页专用)

在错误页面中使用:

&lt;%-- error.jsp --%>
&lt;%@ page isErrorPage="true" contentType="text/html;charset=UTF-8" %>
&lt;h2>发生错误!&lt;/h2>
错误信息:&lt;%= exception.getMessage() %>
&lt;br>
堆栈信息:
&lt;pre>&lt;%= exception.getStackTrace() %>&lt;/pre>

四、实际开发小贴士

  • EL表达式中也可以直接使用这些对象(如${param.username}${sessionScope.user}${pageContext.request.contextPath})。
  • pageContext 是连接其他对象的桥梁,很多框架(如JSTL)都依赖它。
  • 作用域选择原则:能用小的作用域就不要用大的,避免内存浪费和数据混乱。
  • JSP现在逐渐被Thymeleaf、Freemarker等模板引擎替代,但在学习JavaWeb基础时,熟练掌握内置对象仍是必须的。

五、练习建议

  1. 写一个登录页面,用request获取用户名密码,存入session,跳转后显示欢迎信息。
  2. 实现一个简单的在线计数器(用application)。
  3. 创建一个错误页面,演示exception对象的使用。
  4. 使用pageContext在不同作用域间传递数据,并比较区别。

掌握了这9个内置对象,你就真正进入了JSP开发的“门”。


系列文章导航(持续更新中):

  • 第16篇:JSP基础语法(指令、脚本、表达式、动作标签)
  • 第17篇:JSP内置对象(本文)
  • 第18篇:JSP与Servlet的结合、JSP开发模式(MVC)…

有任何疑问(如某个对象的具体方法想看更多示例),随时在评论区留言,我会继续补充!

继续加油,JavaWeb学习之路越走越宽!🚀

文章已创建 5295

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部