Web基础知识(11)- JSP (三)
JSP 隐式(内置)对象
为了简化页面的开发过程,JSP 提供了一些内置对象。
JSP 内置对象又称为隐式对象,它们由容器实现和管理。在 JSP 页面中,这些内置对象不需要预先声明,也不需要进行实例化,我们可以直接在脚本和表达式中使用。
JSP 中定义了 9 个内置对象:
| 对象 | 说明 |
| request | 获取用户请求信息,类型是 javax.servlet.http.HttpServletRequest |
| response | 响应客户端请求,并将处理信息返回到客户端,类型是 javax.servlet.http.HttpServletResponse |
| out | 输出内容到 HTML 中,类型是 javax.servlet.jsp.JspWriter |
| session | 用来保存用户信息,类型是 javax.servlet.http.HttpSession |
| application | 所有用户共享信息,类型是 javax.servlet.ServletContext |
| config | Servlet 配置对象,用于 Servlet 和页面的初始化参数,类型是 javax.servlet.ServletConfig |
| pageContext | JSP 的页面容器,用于访问 page、request、application 和 session 的属性,类型是 javax.servlet.jsp.PageContext |
| page | 类似于 Java 类的 this 关键字,表示当前 JSP 页面,类型是 javax.servlet.jsp.HttpJspPage |
| exception | 该对象用于处理 JSP 文件执行时发生的错误和异常;只有在 JSP 页面的 page 指令中指定 isErrorPage 的取值 true 时,才可以在本页面使用 exception 对象,类型是 java.lang.Throwable |
*注:本文暂时不讨论 exception 对象,后期单独讨论 JSP 异常处理
JSP 的内置对象主要特点:
(1) 由 JSP 规范提供,不用编写者实例化;
(2) 通过 Web 容器实现和管理;
(3) 所有 JSP 页面均可使用;
(4) 只能在脚本和表达式中使用,在声明中不能使用。
1. JSP request 对象
JSP request 是 javax.servlet.http.HttpServletRequest 的实例对象,主要用来获取客户端提交的数据。
request 对象提供了一系列方法,可以获取请求参数信息、表单数据、HTTP 头信息、cookie 和 HTTP 请求方法等。request 对象常用方法如下表所示。
request 对象常用方法:
| 方法 | 说明 |
| String getParameter(String name) | 获取请求参数 name 的值 |
| Enumeration getParameterNames() | 获取所有参数名称 |
| String[] getParameterValues(String name) | 获取请求参数 name 的所有值 |
| Object getAttribute(String name) | 获取 name 属性的值 |
| Enumeration getAttributeNames() | 返回所有属性的名称集合 |
| void setAttribute(String key, Object value) | 给 key 对象赋 value 值 |
| void removeAttribute(String name) | 删除指定的 name 属性 |
| cookie[] getCookies() | 获取所有的 cookie 对象 |
| HttpSession getSession() | 返回 request 对应的 session 对象,如果没有则创建一个 session 对象 |
| HttpSession getSession(boolean create) | 返回 request 对应的 session 对象,如果没有,且 create 值为 true,则创建一个 session 对象 |
| Enumeration getHeaderNames() | 返回 HTTP 头信息的名称集合 |
| String getHeader(String name) | 获取 name 指定的 HTTP 头信息 |
| String getMethod() | 获取 HTTP 请求方法/客户提交信息方式 |
示例,在 request.jsp 页面使用 getHeaderNames() 方法获取 HTTP 头信息,并遍历输出参数名称和对应值。
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*"%> 3 4 5 6Request 7 8 9Get Request Header Info
10
| Parameter | 13Value | 14
|---|---|
| " + paramName + " | \n"); 20 String paramValue = request.getHeader(paramName); 21 out.println("" + paramValue + " |
2. JSP response 对象
JSP response 是 javax.servlet.http.HttpServletResponse 的实例对象。response 对象和 request 对象相对应,主要用于响应客户端请求,将处理信息返回到客户端。
response 对象的常用方法如下:
| 方法 | 说明 |
| void addHeader(String name, String value) | 添加头信息(参数名称和对应值) |
| void addCookie(Cookie cookie) | 添加 cookie 信息 |
| void sendRedirect(String location) | 实现页面重定向 |
| void setStatus(int status) | 实现页面的响应状态代码 |
| void setContentType(String type) | 设置页面的 MIME 类型和字符集 |
| void setCharacterEncoding(String charset) | 设定页面响应的编码类型 |
示例,response.jsp 代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 3 4 523 <% } %> 24 25Response 6 7 8 <% if ("POST".equals(request.getMethod())) { 9 String username = request.getParameter("username"); 10 String password = request.getParameter("password"); 11 if ("admin".equals(username) && "123456".equals(password)) { 12 response.sendRedirect("success.jsp"); 13 } else { 14 response.sendRedirect("failed.jsp"); 15 } 16 } else { %> 17User Login
18
success.jsp 代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 3 4 5Login successfully!
6 7
failed.jsp 代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 3 4Login failed, invalid username or password!
5 6