对象 | 描述 |
---|---|
request | HttpServletRequest 接口的实例 |
response | HttpServletResponse 接口的实例 |
out | JspWriter类的实例,用于把结果输出至网页上 |
session | HttpSession类的实例 |
application | ServletContext类的实例,与应用上下文有关 |
config | ServletConfig类的实例 |
pageContext | PageContext类的实例,提供对JSP页面全部对象以及命名空间的访问 |
page | 相似于Java类中的this关键字 |
Exception | Exception类的对象,表明发生错误的JSP页面中对应的异常对象 |
做用域 | 功能 |
---|---|
pageContext | 做用域仅限于当前页面对象,能够近似于理解为java的this对象,离开当前JSP页面(不管是redirect仍是forward),则pageContext中的全部属性值就会丢失。 |
request | 做用域是同一个请求以内,在页面跳转时,若是经过forward方式跳转,则forward目标页面仍然能够拿到request中的属性值。若是经过redirect方式进行页面跳转,因为redirect至关于从新发出的请求,此种场景下,request中的属性值会丢失。(适用于请求转发,在重定向中会失去被赋予的值) |
session | session的做用域是在一个会话的生命周期内,会话失效,则session中的数据也随之丢失。 |
application | 做用域是最大的,只要服务器不中止,则application对象就一直存在,而且为全部会话所共享。(定义的对象被存储在服务器,因此少使用该对象,否则会增长服务器负载,影响服务器性能) |
<%-- Created by IntelliJ IDEA. User: YOONA Date: 2019/10/21/021 Time: 17:23 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>setAttribute</title> </head> <body> <% pageContext.setAttribute("name","taeyeon",PageContext.REQUEST_SCOPE);//只有pageContext才有第三个参数,session,application,request都没有第三个参数. %> <jsp:forward page="getAttribute.jsp"/> </body> </html>
<%-- Created by IntelliJ IDEA. User: YOONA Date: 2019/10/21/021 Time: 17:27 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>getAttribute</title> </head> <body> <% String s= (String) request.getAttribute("name"); out.println(s); %> <%=s%> </body> </html>
taeyeon taeyeon
当没有设置pageContext.setAttribute()中没有添加这一参数==PageContext.REQUEST_SCOPE==。就会输出null null
。由于page域中设置的参数只能在本页面有做用,因此当页面跳转后就获取不到name的属性值。html
信息 | 描述 |
---|---|
Accept | 指定浏览器或其余客户端能够处理的MIME类型。它的值一般为 image/png 或 image/jpeg |
Accept-Charset | 指定浏览器要使用的字符集。好比 ISO-8859-1 |
Accept-Encoding | 指定编码类型。它的值一般为 gzip 或compress |
Accept-Language | 指定客户端首选语言,servlet会优先返回以当前语言构成的结果集,若是servlet支持这种语言的话。好比 en,en-us,ru等等 |
Authorization | 在访问受密码保护的网页时识别不一样的用户 |
Connection | 代表客户端是否能够处理HTTP持久链接。持久链接容许客户端或浏览器在一个请求中获取多个文件。Keep-Alive 表示启用持久链接 |
Content-Length | 仅适用于POST请求,表示 POST 数据的字节数 |
Cookie | 返回先前发送给浏览器的cookies至服务器 |
Host | 指出原始URL中的主机名和端口号 |
If-Modified-Since | 代表只有当网页在指定的日期被修改后客户端才须要这个网页。 服务器发送304码给客户端,表示没有更新的资源 |
If-Unmodified-Since | 与If-Modified-Since相反, 只有文档在指定日期后仍未被修改过,操做才会成功 |
Referer | 标志着所引用页面的URL。好比,若是你在页面1,而后点了个连接至页面2,那么页面1的URL就会包含在浏览器请求页面2的信息头中 |
User-Agent | 用来区分不一样浏览器或客户端发送的请求,并对不一样类型的浏览器返回不一样的内容 |
方法 | 做用 |
---|---|
Cookie[] getCookies(); | 取得客户端传递的Cookie信息 |
String getHeader(String str); | 取得请求头信息,根据请求头名称取得对应的值 |
Enumeration<String> getHeaderNames(); | 按照枚举的方式取得全部请求头信息 |
String getMethod(); | 取得请求的方式 |
String getPathInfo(); | 取得额外路径 |
String getContextPath(); | 去的当前项目的根路径 |
String getQueryString(); | 取得URL地址?后面的参数 |
String getRequestURI(); | 取得URL地址 |
String getServletPath(); | 取得Servlet的映射路径 |
HTTPSession getSession(); | 取得Session内置对象 |
String getRealPath(); | 取得项目的真实路径 |
String getRemoteHost(); | 取得主机名称 |
String getParameter(String name); | 取得表单提交的参数,适用于每次接收一个参数,会出现空指针异常 |
String getParameterValues(String name); | 取得表单提交的参数,适用于接收多个参数,好比复选框的值。会出现空指针异常 |
void setAttribute(String key,Object value); | 以键值对形式保存数据 |
void getAttribute(String key); | 获取保存的数据属性值 |
void getRequestDispatcher(String loc).forward(HttpServletRequest req, HttpServletResponse resp); | 服务器跳转 |
除了前面介绍的两种解决乱码问题,咱们也能使用request对象来解决乱码问题,使用request。setCharacterEncoding("编码格式");
来设置全局的编码格式。java
全部参数不必定都要用表单的形式来传递,也可使用url重写的方式进行传递,格式以下: 动态页面地址?参数名称 1=参数内容 1&参数名称 2=参数内容 2&....
mysql
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>requestTest(runoob.com)</title> </head> <body> <h2>HTTP 头部请求实例</h2> <table width="100%" border="1" align="center"> <tr bgcolor="#949494"> <th>Header Name</th><th>Header Value(s)</th> </tr> <% Enumeration headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String paramName = (String)headerNames.nextElement(); out.print("<tr><td>" + paramName + "</td>\n"); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>\n"); } %> </table> </body> </html>
HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (空行) <!doctype ...> <html> <head>...</head> <body> ... </body> </html>
响应头 | 描述 |
---|---|
Allow | 指定服务器支持的request方法(GET,POST等等) |
Cache-Control | 指定响应文档可以被安全缓存的状况。一般取值为 public,private 或no-cache 等等。 Public意味着文档可缓存,Private意味着文档只为单用户服务而且只能使用私有缓存。No-cache 意味着文档不被缓存。 |
Connection | 命令浏览器是否要使用持久的HTTP链接。close值 命令浏览器不使用持久HTTP链接,而keep-alive 意味着使用持久化链接。 |
Content-Disposition | 让浏览器要求用户将响应以给定的名称存储在磁盘中 |
Content-Encoding | 指定传输时页面的编码规则 |
Content-Language | 表述文档所使用的语言,好比en, en-us,,ru等等 |
Content-Length | 代表响应的字节数。只有在浏览器使用持久化 (keep-alive) HTTP 链接时才有用 |
Content-Type | 代表文档使用的MIME类型 |
Expires | 指明啥时候过时并从缓存中移除 |
Last-Modified | 指明文档最后修改时间。客户端能够 缓存文档而且在后续的请求中提供一个 If-Modified-Since请求头 |
Location | 在300秒内,包含全部的有一个状态码的响应地址,浏览器会自动重连而后检索新文档 |
Refresh | 指明浏览器每隔多久请求更新一次页面。 |
Retry-After | 与503 (Service Unavailable)一块儿使用来告诉用户多久后请求将会获得响应 |
Set-Cookie | 指明当前页面对应的cookie |
S.N. | 方法 | 描述 |
---|---|---|
1 | String encodeRedirectURL(String url) | 对sendRedirect()方法使用的URL进行编码 |
2 | String encodeURL(String url) | 将URL编码,回传包含Session ID的URL |
3 | boolean containsHeader(String name) | 返回指定的响应头是否存在 |
4 | boolean isCommitted() | 返回响应是否已经提交到客户端 |
5 | void addCookie(Cookie cookie) | 添加指定的cookie至响应中 |
6 | void addDateHeader(String name, long date) | 添加指定名称的响应头和日期值 |
7 | void addHeader(String name, String value) | 添加指定名称的响应头和值 |
8 | void addIntHeader(String name, int value) | 添加指定名称的响应头和int值 |
9 | void flushBuffer() | 将任何缓存中的内容写入客户端 |
10 | void reset() | 清除任何缓存中的任何数据,包括状态码和各类响应头 |
11 | void resetBuffer() | 清除基本的缓存数据,不包括响应头和状态码 |
12 | void sendError(int sc) | 使用指定的状态码向客户端发送一个出错响应,而后清除缓存 |
13 | void sendError(int sc, String msg) | 使用指定的状态码和消息向客户端发送一个出错响应 |
14 | void sendRedirect(String location) | 使用指定的URL向客户端发送一个临时的间接响应,重定向 |
15 | void setBufferSize(int size) | 设置响应体的缓存区大小 |
16 | void setCharacterEncoding(String charset) | 指定响应的编码集(MIME字符集),例如UTF-8 |
17 | void setContentLength(int len) | 指定HTTP servlets中响应的内容的长度,此方法用来设置 HTTP Content-Length 信息头 |
18 | void setContentType(String type) | 设置响应的内容的类型,若是响应还未被提交的话 |
19 | void setDateHeader(String name, long date) | 使用指定名称和值设置响应头的名称和内容 |
20 | void setHeader(String name, String value) | 使用指定名称和值设置响应头的名称和内容 |
21 | void setIntHeader(String name, int value) | 指定 int 类型的值到 name 标头 |
22 | void setLocale(Locale loc) | 设置响应的语言环境,若是响应还没有被提交的话 |
23 | void setStatus(int sc) | 设置响应的状态码 |
<%@ page import="java.util.Calendar" %> <%@ page import="java.util.Locale" %> <%@ page import="com.mysql.jdbc.util.TimezoneDump" %> <%@ page import="java.util.TimeZone" %><%-- Created by IntelliJ IDEA. User: YOONA Date: 2019/10/22/022 Time: 14:29 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>response对象的示例Refresh</title> </head> <body> <h2>自动刷新,response</h2> <% response.setIntHeader("Refresh",2); Calendar calendar=Calendar.getInstance(TimeZone.getDefault()); int hour=calendar.get(Calendar.HOUR); int min=calendar.get(Calendar.MINUTE); int s=calendar.get(Calendar.SECOND); String am_pm=""; if(calendar.get(Calendar.AM_PM)==0)//AM==0;PM==1 am_pm="AM"; else am_pm="PM"; String time=hour+":"+min+":"+s+am_pm; %> <h2><%=time%></h2> </body> </html>
Set-Cookie: name=runoob; expires=Friday, 04-Feb-17 22:03:38 GMT; path=/; domain=runoob.com
(Set-Cookie 信息头包含一个键值对,一个 GMT(格林尼治标准)时间,一个路径,一个域名。键值对会被编码为URL。有效期域是个指令,告诉浏览器在何时以后就能够清除这个 cookie。)的形式体现;cookie是浏览器所提供的一种技术,一些信息存储在客户端,使用时能够不用经过网络传输,而获取信息,提升网页的处理效率,减小服务器的负载。可是因为存储在客户端,因此安全性不好。response.addCookie(Cookie cooke)
,序号 | 方法 | 描述 |
---|---|---|
1 | public void setDomain(String pattern) | 设置 cookie 的域名,好比 runoob.com |
2 | public String getDomain() | 获取 cookie 的域名,好比 runoob.com |
3 | public void setMaxAge(int expiry) | 设置 cookie 有效期,以秒为单位,默认有效期为当前session的存活时间 |
4 | public int getMaxAge() | 获取 cookie 有效期,以秒为单位,默认为-1 ,代表cookie会活到浏览器关闭为止 |
5 | public String getName() | 返回 cookie 的名称,名称建立后将不能被修改 |
6 | public void setValue(String newValue) | 设置 cookie 的值 |
7 | public String getValue() | 获取cookie的值 |
8 | public void setPath(String uri) | 设置 cookie 的路径,默认为当前页面目录下的全部 URL,还有此目录下的全部子目录 |
9 | public String getPath() | 获取 cookie 的路径 |
10 | public void setSecure(boolean flag) | 指明 cookie 是否要加密传输 |
11 | public void setComment(String purpose) | 设置注释描述 cookie 的目的。当浏览器将 cookie 展示给用户时,注释将会变得很是有用 |
12 | public String getComment() | 返回描述 cookie 目的的注释,若没有则返回 null |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>建立cookie</title> </head> <body> <% Cookie cookie1=new Cookie("name","teayeon");//建立cookie对象 Cookie cookie2=new Cookie("age","18"); cookie1.setMaxAge(60*60*24);//设置最大生存时间 cookie2.setMaxAge(60*60*24); response.addCookie(cookie1);//添加到相应的报文头中 response.addCookie(cookie2); %> <h2><a href="getCookie.jsp">点我</a>跳转到获取Cookie信息</h2> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>获取cookie的值</title> </head> <body> <%! String name; String value; %> <% Cookie cookies[]=request.getCookies(); for(int x=0;x<cookies.length;x++){ name=cookies[x].getName(); value=cookies[x].getValue(); %> <h2><%=name%>---><%=value%></h2> <% } %> </body> </html>
name--->teayeon age--->18 JSESSIONID--->5C600F1372097AE7A09ED74D1274FAC5
<% response.setHeader("Set-Cookie","name=teayeon"); %>
注意:通常一个客户端最多保存300多个cookie,当数据量太大时将没法使用cookie。web
<%@page session="false" %>
<input type="hidden" name="sessionid" value="12345">
这个条目意味着,当表单被提交时,指定的名称和值将会自动包含在GET或POST数据中。每当浏览器发送一个请求,session_id的值就能够用来保存不一样浏览器的轨迹。 这种方式多是一种有效的方式,但点击<AHREF>标签中的超连接时不会产生表单提交事件,所以隐藏表单域也不支持通用会话跟踪。因此说只有三种方式支持会话提问:session是否能够在服务器从新启动后继续使用?sql
回答:能够经过序列化的方式保存session对象。apache
S.N. | 方法 | 描述 |
---|---|---|
1 | public Object getAttribute(String name) | 返回session对象中与指定名称绑定的对象,若是不存在则返回null |
2 | public Enumeration getAttributeNames() | 返回session对象中全部的对象名称 |
3 | public long getCreationTime() | 返回session对象被建立的时间, 以毫秒为单位,从1970年1月1号凌晨开始算起 |
4 | public String getId() | 返回session对象的ID |
5 | public long getLastAccessedTime() | 返回客户端最后访问的时间,以毫秒为单位,从1970年1月1号凌晨开始算起 |
6 | public int getMaxInactiveInterval() | 返回最大时间间隔,以秒为单位,servlet 容器将会在这段时间内保持会话打开 |
7 | public void invalidate() | 将session无效化,解绑任何与该session绑定的对象 |
8 | public boolean isNew() | 返回是否为一个新的客户端,或者客户端是否拒绝加入session |
9 | public void removeAttribute(String name) | 移除session中指定名称的对象 |
10 | public void setAttribute(String name, Object value) | 使用指定的名称和值来产生一个对象并绑定到session中 |
11 | public void setMaxInactiveInterval(int interval) | 用来指定时间,以秒为单位,servlet容器将会在这段时间内保持会话有效 |
<%@ page import="java.util.Date" %><%-- Created by IntelliJ IDEA. User: YOONA Date: 2019/11/4/004 Time: 22:29 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>session</title> </head> <% out.print("--------"); //获取session的建立时间 Date createdate = new Date(session.getCreationTime()); //获取session最后一次使用的时间 Date lastdate = new Date(session.getLastAccessedTime()); Integer count = Integer.valueOf(0); String countKey = String.valueOf("count"); String userid = String.valueOf("teayeon"); String userKey = String.valueOf("name"); if (session.isNew()) { session.setAttribute(countKey, count); session.setAttribute(userKey, userid); } else { count = (Integer) session.getAttribute(countKey); count += 1; userid = (String) session.getAttribute(userKey); session.setAttribute(countKey, count); } %> <body> <h1>Session 跟踪</h1> <table border="1" align="center"> <tr bgcolor="#949494"> <th>Session 信息</th> <th>值</th> </tr> <tr> <td>id</td> <td><% out.print(session.getId()); %></td> </tr> <tr> <td>建立时间</td> <td><% out.print(createdate); %></td> </tr> <tr> <td>最后访问时间</td> <td><% out.print(lastdate); %></td> </tr> <tr> <td>用户 ID</td> <td><% out.print(userid); %></td> </tr> <tr> <td>访问次数</td> <td><% out.print(count); %></td> </tr> </table> </body> </html>
Session信息 | 值 |
---|---|
id | 2AF9C0F94869D5049E786A6ECDA8DF8A |
建立时间 | Mon Nov 04 22:53:52 CST 2019 |
最后访问时间 | Mon Nov 04 22:53:52 CST 2019 |
用户 ID | teayeon |
访问次数 | 0 |
Session信息 | 值 |
---|---|
id | 2AF9C0F94869D5049E786A6ECDA8DF8A |
建立时间 | Mon Nov 04 22:53:52 CST 2019 |
最后访问时间 | Mon Nov 04 22:53:52 CST 2019 |
用户 ID | teayeon |
访问次数 | 1 |
当处理完一个用户的会话数据后,您能够有以下选择:编程
移除一个特定的属性:调用public void removeAttribute(String name) 方法来移除指定的属性。浏览器
删除整个会话:调用public void invalidate() 方法来使整个session无效。缓存
设置会话有效期:调用 public void setMaxInactiveInterval(int interval) 方法来设置session超时。tomcat
登出用户:支持servlet2.4版本的服务器,能够调用logout()方法来登出用户,而且使全部相关的session无效。
配置web.xml文件:若是使用的是Tomcat,能够向下面这样配置web.xml文件:
<session-config> <session-timeout>15</session-timeout> </session-config>
==超时以分钟为单位,Tomcat中的默认的超时时间是30分钟。==
Servlet中的getMaxInactiveInterval()方法以秒为单位返回超时时间。若是在web.xml中配置的是15分钟,则getMaxInactiveInterval( ) 方法将会返回900。
- application对象中提供了getAttributeNames()方法,能够取得所有属性的名称,下面利用此方法列出所有的属性名称和内容。
<%@ page import="java.util.*" %><%-- Created by IntelliJ IDEA. User: YOONA Date: 2019/11/6/006 Time: 13:56 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>获取所有的属性名称及内容</title> </head> <body> <% Enumeration enu = application.getAttributeNames(); while (enu.hasMoreElements()) { String name = (String) enu.nextElement(); %> <h3><%=name%>-----><%=application.getAttribute(name)%> </h3> <% } %> </body> </html>
javax.servlet.context.tempdir----->D:\taeyeon\weblearn\target\tomcat\work\Tomcat\localhost\_ org.apache.catalina.resources----->org.apache.naming.resources.ProxyDirContext@7f6dafb ......
- 网站计数器:
<%@ page import="java.math.BigInteger" %> <%@ page import="java.io.File" %> <%@ page import="java.util.Scanner" %> <%@ page import="java.io.FileOutputStream" %> <%@ page import="java.io.FileInputStream" %> <%@ page import="java.io.PrintStream" %> <%-- Created by IntelliJ IDEA. User: YOONA Date: 2019/11/6/006 Time: 14:59 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>网站计数器</title> </head> <body> <%--浏览人数保存在文件中,每次访问都会去读取该文件中的数据,而后判断当前用户是否为新用户,来给流量加一--%> <%! Integer count = null;//建立存放浏览人数的对象 File file1 = null; %> <%! public Integer load(File file) {//返回当前保存的浏览量 try { Scanner scanner = null; file1 = new File(file + "/count.txt"); if (file.exists()) ; else { file.mkdir(); } if (file1.exists()) {//判断当前文件是否存在 scanner = new Scanner(new FileInputStream(file1)); if (scanner.hasNext()) { count = Integer.valueOf(scanner.next()); } scanner.close(); } else { count = 0; save(file, count); } } catch (Exception e) { e.printStackTrace(); } return count; } //用来保存每一判断后的浏览量 public void save(File file, Integer count) { try { if (file.exists()) ; else { file.mkdir(); } PrintStream ps = new PrintStream(new FileOutputStream(file1)); ps.println(count); ps.close(); } catch (Exception e) { e.printStackTrace(); } } %> <% String filePath = application.getRealPath("/"); File file = new File(filePath + "/file"); if (session.isNew()) { synchronized (this) { count = load(file); System.out.println(count); count = count + 1; save(file, count); } } session.setMaxInactiveInterval(1); response.setHeader("refresh","1"); %> <H2>你是第<%=count == null ? "0" : count%>个访客!</H2> </body> </html>
config对象经常使用方法有:
方 法 | 说 明 |
---|---|
getServletContext() | 获取Servlet上下文 |
getServletName() | 获取servlet服务器名 |
getInitParameter() | 获取服务器全部初始参数名称,返回值为java.util.Enumeration对象 |
getInitParameterNames() | 获取服务器中name参数的初始值 |
<servlet> <servlet-name>initmsg</servlet-name> <jsp-file>/WEB-INF/config.jsp</jsp-file> <init-param> <param-name>name</param-name> <param-value>teayeon</param-value> </init-param> </servlet>
<%= config.getInitParameter("name")%>
- 不配置web.xml
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>config安全性</title> </head> <body> <h3>我在WEB-INFO下面</h3> </body> </html>
HTTP状态404- 类型状态报告 信息 描述 所请求的资源不可用。 Apache Tomcat / 7.0.47
- 配置了web.xml,就能够经过虚拟路径进行访问了(servlet-name不能重复)。
<servlet> <servlet-name>config</servlet-name> <jsp-file>/WEB-INF/config.jsp</jsp-file> </servlet> <servlet-mapping> <servlet-name>config</servlet-name> <url-pattern>/config</url-pattern> </servlet-mapping>
注意:咱们在书写web.xml文件时,<servlet>节点必定要放在<servlet-mapping>的前面。好比:
<servlet> </servlet> <servlet-mapping> </servlet-mapping> <servlet> </servlet> <servlet-mapping> </servlet-mapping>
这样书写会报错的,正确方式以下:
<servlet> </servlet> <servlet> </servlet> <servlet-mapping> </servlet-mapping> <servlet-mapping> </servlet-mapping>
方法 | 描述 |
---|---|
forward(String relativeUrlPath): | 将当前页面转发到另一个页面或者Servlet组建上; |
getRequest(): | 返回当前页面的request对象; |
getResponse(): | 返回当前页面的response对象; |
getServetConfig(): | 返回当前页面的servletConfig对象; |
getServletContext(): | 返回当前页面的ServletContext对象,这个对象是全部的页面共享的. |
getSession(): | 返回当前页面的session对象; |
findAttribute(): | 按照页面,请求,会话,以及应用程序范围的属性实现对某个属性的搜索; |
setAttribute(): | 设置默认页面范围或特定对象范围之中的对象. |
removeAttribute(): | 删除默认页面对象或特定对象范围之中的已命名对象. |
这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。
这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象能够经过访问这个对象的属性来导出。
pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL,页面scope等。
PageContext类定义了一些字段(访问域int类型),包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。它也提供了40余种方法,有一半继承自javax.servlet.jsp.JspContext 类。
pageContext.setAttribute(String s,Object b,int i);//s为key,b为value,i为域
pageContext.removeAttribute("attrName", PAGE_SCOPE);
获取request对象:
pageContext.getRequest();
获取application对象:
pageContext.getServletContext();
. . . . . . . 这样的方式就能够等价的获取到对象,而后使用该实例。