文章目录
序号 | 隐式对象 | 说明 | 描述 | 作用域 |
---|---|---|---|---|
1 | request | 转译后对应HttpServletRequest/ServletRequest对象 | 得到用户信息 | Request |
2 | response | 转译后对应HttpServletRespons/ServletResponse对象 | 服务器向客户端的回应信息 | Page |
3 | session | 转译后对应HttpSession对象 | 用来保存用户信息 | Session |
4 | application | 转译后对应ServletContext对象 | 所有用户的共享信息 | Application |
5 | out | 转译后对应JspWriter对象,其内部关联一个PringWriter对象 | 用于页面输出 | Page |
6 | page | 转译后对应this | 指当前页面转换后的servlet类的实例 | Page |
7 | config | 转译后对应this | 服务器配置,可以取得初始化参数 | Page |
8 | exception | 转译后对应Throwable对象,代表由其他JSP页面抛出的异常对象,只会出现于JSP错误页面(isErrorPage设置为true的JSP页面) | 表示jsp页面所发生的异常,在错误页中才起作用 | Page |
9 | pageContext | 转译后对应PageContext对象,它提供了JSP页面资源的封装,并可设置页面范围属性 | jsp页面容器 | Page |
只有在jsp脚本和jsp表达式中,才能使用内置对象!
流转对象
:request,response,out
作用域对象
:application,session,request,pageContext。
Jsp隐含变量
1、out
来源于Java.io.Writer类,它用于发送输出流到客户端。
2、request
来源于javax.servlet.http.HttpServletRequest接口。它被关联到每一个HTTP请求。
3、response
来源于javax.servlet.http.HttpServletResponse。response对象用于把取得的数据返回到客户端。
4、pageContext
提供访问JSP页面的命名空间。它也提供用来访问其他的JSP隐含对象。
5、session
来源于javax.servlet.http.HttpSession。它用于存储客户端请求的信息,因此它是有状态交互式的。
6、application
来源于javax.servlet.ServletContext。
7、config
来源于ServletConfig,它包含了当前JSP/Servlet所在的WEB应用的配置信息。
8、page
来源于当前被访问JSP页面的实例化。它实际使用的是JSP转换成的Servlet。
9、exception
用于捕获JSP抛出的异常。它只有在JSP页面属性isErrorPage=true时才可用。
out对象:
out.jsp:
<body>
<%
out.println("first line <br />");
response.getWriter().println("second line <br />");
%>
</body>
结果:
second line
first line
out对象的数据放在缓冲区中,等jsp页面加载完毕才会加载处理
pageContext对象
①javax.servlet.jsp.PageContext(抽象类)类型,pageContext 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性。此对象提供自身和其他3个作用域层次的属性查询和修改能力,同时可以获取其他8个内置对象。它也提供了转发请求到其它资源和包含其他资源的方法:该对象的方法都是抽象方法。作用域为page(页面执行期)。
②常用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope,一般情况下pageContext对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。
他有4个作用范围:
pageContext.PAGE_SCOPE:表示页面范围
pageContext.REQUEST_SCOPE:表示请求范围
pageContext.SESSION_SCOPE:表示会话范围
pageContext.APPLICATION_SCOPE:表示web应用程序范围
pageContex.jsp:
<%
//获取request对象
HttpServletRequest req=(HttpServletRequest)pageContext.getRequest();
//设置page范围内属性
pageContext.setAttribute("str", "java",pageContext.PAGE_SCOPE);
//设置request范围属性
req.setAttribute("str", "java web");
//获得page范围属性
String str1=(String) pageContext.getAttribute("str",pageContext.PAGE_SCOPE);
String str2=(String) pageContext.getAttribute("str",pageContext.REQUEST_SCOPE);
%>
<%="page范围:"+str1 %><br />
<%="request范围:"+str2 %><br />
结果:
page范围:java
request范围:java web
request对象
①javax.servlet.ServletRequest的子类型,equest 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,封装了由WEB浏览器或其它客户端生 成地HTTP请求的细节(参数,属性,头标和数据等),是最常用的对象。作用域为request(用户请求期)。
②常用的方法有:getParameter、getParameterNames 和getParameterValues等,通过调用这几个方法来获取请求对象中所包含的参数的值,方法可查看API。
response对象
①javax.servlet.ServletResponse的子类型,response 对象代表的是对客户端的响应,此对象封装了返回到HTTP客户端的输出,向页面作者提供设置响应头标和状 态码的方式。经常用来设置HTTP标题,添加cookie,设置响应内容的类型和状态,发送HTTP重定向和编码URL等。作用域为page(页面执行期)。
②也就是说可以通过response 对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用。
③常用方法有:sendRedirect、setContentType、encodeRedirectURL、addHeader、addCookie、getWriter等
session对象
①avax.servlet.http.HttpSession类型,主要用于跟踪对话。HttpSession是一个类似哈希表的与单一WEB浏览器会话相关的对象,它存在于HTTP请求之间,可以存 储任何类型的命名对象。作用域session(会话期)。若不需要在请求之间跟踪会话对象,可以通过在page指令中指定session=“false”。
②session对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在 cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。注意:不要把cookie也理解为九大内置对象之一,cookie主要是实现了session的作用。
概要:
HTTP是无状态(stateless)协议;
Web Server 对每一个客户端请求都没有历史记忆;
Session用来保存客户端状态信息;
由Web Server 写入;
存于客户端;
客户端的每次访问都把上次的session记录传递给Web Server;
Web Server读取客户端提交的session来获取客户端的状态信息。
③常用方法有:getAttribute、setAttribute、removeAttribute、setMaxInactiveInterval、getId、 getValue、 getValueNames和putValue等。
application对象
①javax.servlet.ServletContext类型,作用域是application(整个程序运行期)。它提供了关于服务器版本,应用级初始化参数和应用内资源绝对路径,注册信息的方 式,负责提供应用程序在服务器中运行时的一些全局信息。
②常用的方法有:getMimeType、getRealPath、getResourceAsStream等。
③获取ServletContext对象的途径:
方法一:通过GenericServlet提供的 getServletContext()
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext3 = getServletContext();
}
方法二:通过ServletConfig提供的getServletContext()
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext2 = getServletConfig().getServletContext();
}
方法三:通过HttpServletRequest获取
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext1 = req.getServletContext();
}
方法四:通过HttpSession获取。
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = req.getSession().getServletContext();
}
servlet的环境通过调用getServletConfig().getContext()方法获得。
config对象
①javax.servlet.ServletConfig类型,“config” 对象提供一些配置信息,作用域为page(页面执行期)。
②常用的方法有:getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。
exception对象
exception.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
int a=4;
int b=0;
%>
输出结果为:<%=(a/b) %> <%--此处会产生异常--%>
</body>
</html>
error.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%=exception.getMessage()%><br>
</body>
</html>
page对象
①java.lang.Object类型,指向页面自身的方式。作用域为page(页面执行期)。
②“page” 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。
四个作用域:
四个域对象:
pageContext -- page域 (本jsp对象)
request -- request域(本请求)
session -- session域(本会话)
application -- context域(web工程)
1)域对象作用:保存数据和获取数据,用于数据共享。
2)域对象方法:
setAttribute("name",Object) 保存数据
getAttribute("name") 获取数据
removeAttribute("name") 清除数据
3)域对象作用范围:
page域: 只能在当前jsp页面中使用(当前页面)
request域: 只能在同一个请求中使用(转发)
session域: 只能在同一个会话(session对象)中使用(私有的)
context域: 只能在同一个web应用中使用。(全局的)
1、如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。 从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。
2、如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。就算在这个过程中,使用request对象的getRequestDispatcher(“path”).forward(request, response)的请求转发方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量,但如果使用了response对象的sendRedirect(“path”)重定向方式,那这个request域就会失去效果。因为response的sendRedirect(“path”)重定向方式,跟request对象的getRequestDispatcher(“path”).forward(request, response)的请求转发方式是有区别的,因为重定向涉及到浏览器的两次请求和两次响应,故第二次的request会将第一次的request域刷新。
3、如果把变量放到session里,就说明它的作用域是session,有效范围是当前会话。所谓当前会话,是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量。
4、如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。与上述三个不同的是,application里的变量可以被所有用户共用。如果用户甲的操作修改了application中的变量,用户乙访问时得到的是修改后的值。