1.request:客户端发送给服务器的所有数据,所有信息,都会被封装在request对象中:
请求行+请求头+请求体=request
<fieldset>
<legend>请求行</legend>
请求方式:<%= request.getMethod()%><br>
请求url:<%= request.getRequestURI()%><br>
</fieldset>
<fieldset>
<legend>请求头</legend>
Accept:<%= request.getHeader("Accept") %><br>
User-Agent:<%= request.getHeader("User-Agent") %><br>
Accept-Encoding:<%= request.getHeader("Accept-Encoding") %><br>
Host:<%= request.getHeader("Host") %><br>
</fieldset>
<fieldset>
<legend>其他信息</legend>
客户端ip:<%=request.getRemoteAddr() %><br>
web应用所在路径:<%=request.getRealPath("/") %><br>
</fieldset>
2.response:相应内置对象,服务器响应给客户端的所有数据,都会被先封装进response中,再从response中取出来,生成一个http响应
response.getWriter():用于获取一个字符输出流,该流起点为服务器,终点为客户端
3.out:该对象是一个字符输出流,该流可以向客户端浏览器发送数据。
注:除该流之外,getOutputStream()可以获取一个字节流,这两个流方向一致,关系为互斥,不能同时使用
如果非要使用response.getOutputStream()获取流,必须先让out失效。
out.clearBuffer();
out=pageContext.pushBody();
4.session:会话范围,在jsp中特指一个用户从打开一个网站的任何一个页面开始,到关闭了该网站的所有页面为止。
session方法:
<table>
<tr>
<td>新会话?</td>
<td><%=session.isNew() %></td>
</tr>
<tr>
<td>会话id</td>
<td><%=session.getId() %></td>
</tr>
<tr>
<td>会话创建时间</td>
<td><%=session.getCreationTime() %></td>
</tr>
<tr>
<td>上次会话访问</td>
<td><%=session.getLastAccessedTime() %></td>
</tr>
<tr>
<td>当前系统时间</td>
<td><%=System.currentTimeMillis() %></td>
</tr>
<tr>
<td>会话闲置时间</td>
<td>
<%=System.currentTimeMillis() - session.getLastAccessedTime() %>
</td>
</tr>
<tr>
<td>让会话失效</td>
<td>
<% //session.invalidate(); %>
</td>
</tr>
</table>
5.application:应用对象,应用范围,从部署web应用开始,到卸载web应用为止,算一次应用范围。
application.setAttribute("a", "123");
application.getAttribute("a");
application.removeAttribute("a");
在application中设置,获取,删除参数,也可以在web.xml中设置初始化参数,在jsp中获取 <context-param>
<param-name>abc</param-name>
<param-value>bca</param-value>
</context-param>
<%=application.getInitParameter("abc") %>
6.pageContext:页面范围对象,在页面之内可以传参,除此之外,该对象可以获取其他8个内置对象。
该功能的定义为九大内置对象的方法设置提供了极大便利,因为如果九个内置对象拥有同一个方法,
不需要定义九种参数,而是传入一个pageContext即可。
pageContext.forward("b.jsp");//java代码版本的请求转发
pageContext.include("b.jsp");//java代码版本的动态包含
7.exception:异常对象,要使用该内置对象,必须在jsp页面上添加一个指令元素
<%@ page errorPage="true" %>
<%@ page errorPage="b.jsp" %>//在页面上添加该指令元素可以指定出错后的跳转页面
在b.jsp上可以进行异常输出:<%@ page language="java" pageEncoding="utf-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>b.jsp</title>
</head>
<body>
<%=exception %>
</body>
</html>
8.config:用于获取jsp页面的初始化参数。
<servlet>
<servlet-name>aa</servlet-name>
<jsp-file>/b.jsp</jsp-file>
<init-param>
<param-name>x</param-name>
<param-value>hhhhh</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>aa</servlet-name>
<url-pattern>/b.php</url-pattern>
</servlet-mapping>
在web.jsp中进行以上设置,就可以在特定的jsp页面中设置初始化参数由于进行了servlet映射,访问b.php并获取初始化参数
<%=config.getInitParameter("x") %>
即可在b.jsp页面中看到结果
9.page:代表当前jsp页面对象本身,它其实就是this,它可以获取page指令元素的info属性的内容
10.jsp中的四大范围:
在一个jsp页面设置四大范围,并在该页面获取<body>
<%
pageContext.setAttribute("a", "页面范围");
request.setAttribute("a", "请求范围");
session.setAttribute("a", "会话范围");
application.setAttribute("a", "应用范围");
%>
<%=pageContext.getAttribute("a") %>
<%=request.getAttribute("a") %>
<%=session.getAttribute("a") %>
<%=application.getAttribute("a") %>
</body>
从当前页面进行请求转发到b.jsp,再次获取四大范围
<jsp:forward page="b.jsp"></jsp:forward>
可以看到页面范围丢失。
若从该界面进行跳转,直接改变链接访问b.jsp:
可以看到请求范围也随之丢失。
此时再关闭浏览器,重新打开并直接访问b.jsp
看到会话范围丢失。
重新部署web应用,并直接访问b.jsp
看到所有范围均无法获取到,由此可见,jsp中四大范围大小以此为:
pageContext<request<session<application,除了pageContext外,其他范围都可以在页面之间传递数据。