3.3 隐式对象
概述
Servlet容器会传递几个对象给它运行的Servlet。例如,可以通过Servlet的service方法拿到HttpServletRequest和HttpServletResponse对象,以及可以通过init方法访问到ServletConfig对象。此外,可以通过调用HttpServletRequest对象的getSession方法拿到HttpSession对象。
JSP隐式对象
在JSP中,可以通过使用隐式对象来访问上述对象。JSP隐式对象如下表所示。
| 对象 | 类型 | ||
|---|---|---|---|
request |
javax.servlet.http.HttpServletRequest |
||
response |
javax.servlet.http.HttpServletResponse |
||
out |
javax.servlet.jsp.JspWriter |
||
session |
javax.servlet.http.HttpSession |
||
application |
javax.servlet.ServletContext |
||
config |
javax.servlet.ServletConfig |
||
pageContext |
javax.servlet.jsp.PageContext |
||
page |
javax.servlet.jsp.HttpJspPage |
||
exception |
java.lang.Throwable |
||
| ### request隐式对象 ### | |||
该隐式对象代表Servlet/JSP容器传递给Servlet服务方法的HttpServletRequest对象。可以将request理解为一个指向HttpServletRequest对象的引用变量。下面的代码示例,从HttpServletRequest对象中返回userName参数值: |
|||
|
pageContext隐式对象
获取Servlet相关对象
pageContext提供了有用的上下文信息,并且通过其方法可以访问各种Servlet相关对象,如getRequest、getResponse、getServletContext、getServletConfig和getSession。当然,这些方法在脚本中不是非常有用的,因为可以更直接地通过隐式对象request、response、session和application等来直接访问。
获取和设置属性
PageContext中提供了另一组有趣的方法:用于获取和设置属性的方法,也就是getAttribute方法和setAttribute方法。属性值可被存储在4个范围之一:页面、请求、会话和应用程序。
- 页面范围是最小范围,这里存储的属性只在同一个
JSP页面之中可用。 - 请求范围是指属性存储在当前的
ServletRequest里面。 - 会话范围指属性存储在当前的
HttpSession里面。 - 应用程序范围指属性存储在应用的
ServletContext里面。
setAttribute方法
PageContext的setAttribute方法签名如下:
1 | public abstract void setAttribute(java.lang.String name, |
其中,scope的取值范围为PageContext对象的中存储静态int值:PAGE_SCOPE、REQUEST_ SCOPE、SESSION_SCOPE和APPLICATION_SCOPE。
把属性存储到页面范围
若要保存一个属性到页面范围,可以直接使用setAttribute重载方法:
1 | public abstract void setAttribute(java.lang.String name, |
实例
如下脚本将一个属性保存到ServletRequest中:
1 | <% |
同样效果的Java代码如下:
1 | <% |
out隐式对象
隐式对象out引用了一个javax.servlet.jsp.JspWriter对象,这类似于你在调用HttpServletResponse的getWriter方法时得到的java.io.PrintWriter对象。可以通过调用它的print方法将消息发送到浏览器。例如:
1 | out.println("Welcome"); |
Demo
implicitObjects.jsp页面:
1 | <% import="java.util.Enumeration"%> |
浏览器显示效果如下:
在浏览器中具体看到的内容,取决于所使用的浏览器及其环境。
注意,在默认情况下,JSP编译器会将JSP页面的内容类型设为text/html。如果要使用不同的类型,则需要
通过调用response.setContentType()或者使用页面指令来设置内容类型。例如,下面就是将内容类型设置为text/json:
1 | response.setContentType("text/json"); |
原文链接: 3.3 隐式对象